对使用复杂的cenario的微服务有一些疑问。例如,结帐。
我需要处理产品的详细信息,更新库存,用户的详细信息,税收 根据用户所在地区,计算最终价格并发送产品。所以我有以下服务:
我的第一个问题,我需要一个新服务(比如CheckoutService)来完成所有这些逻辑(并计算最终价格)?
如果是,则此新服务将控制事务(如两阶段提交)?
每项服务都必须是您自己的数据库?如果我的应用程序在亚马逊环境中运行,我需要为每个服务都有一个RDS实例吗?
答案 0 :(得分:4)
老实说,无论你得到什么答案,都不会是完美的答案,因为很多都是受设计和个人需求的影响。
我在设计复杂的微服务架构时采取的步骤与域驱动设计(DDD)紧密相关,如下所示:
现在你有了上下文边界,这将是你的微服务。在实现上下文边界时,您需要将其分解为自己的各个部分。从您的示例中可以看出,您有
然后,您可以在每个上下文边界确定所需的功能,并将其分解为演示文稿/控制器,服务和存储库。
例如,采取订单管理。你可能想要这样的东西:
如果您的订单管理需求对于许多业务规则非常复杂,您可能会将其分解为多个服务/存储库以满足这些需求,或者它可能会得到它自己的上下文边界...
我不能告诉你如何办理结账(你询问有关计算东西和控制交易的信息)。但是你决定这样做。
完成所有这些后,您就可以确定数据存储需求和服务器需求。最初,您可能没有大量用户,因此每个服务可能位于同一项目中的同一服务器上,并且您可以在其自己的服务器上拥有单个数据库。但是请确保以稍后可以解决的方式编写所有内容,这样当您需要通过分布式系统处理更多用户的能力时,您可以这样做而无需重写大量代码。
这是一个很好的答案,因为我可以在不知道你正在做什么的情况下给你。我不会把我放在这里的一切一字一句地付诸实施,我会在这里接受建议并自己完成各个步骤,以确定最适合您需求的设计。
<强> TL; DR 强>