【问题标题】:How to implement complex microservices? [closed]如何实现复杂的微服务? [关闭]
【发布时间】:2016-12-15 19:15:30
【问题描述】:

A 对使用复杂场景的微服务有一些疑问。例如,结帐。

我需要处理产品的详细信息、更新库存、用户的详细信息、税金 根据用户所在地区,计算最终价格并发送产品。所以我有以下服务:

  • 产品服务;
  • 库存服务;
  • 用户服务;
  • 税务服务;
  • 航运服务;
  • CheckoutService?

我的第一个问题,我需要一个新服务(如 CheckoutService)来完成所有这些逻辑(并计算最终价格)?

如果是,这个新服务将控制事务(如两阶段提交)?

每个服务都必须是您自己的数据库?如果我的应用程序在亚马逊环境中运行,我需要为每个服务拥有一个 RDS 实例吗?

【问题讨论】:

    标签: java amazon-web-services architecture microservices


    【解决方案1】:

    老实说,无论您得到什么答案,都不会是完美的答案,因为其中很多都取决于设计和您自己的个人需求。

    我在设计复杂的微服务架构时采取的步骤与领域驱动设计 (DDD) 密切相关,如下所示:

    1. 定义您的域(在您的示例中,电子商务似乎是您的域)
    2. 确定您的即时可交付成果(在您的示例中,将商品添加到购物车和结帐的能力)
    3. 定义您的上下文边界(在您的示例中,Checkout 可能是它自己的上下文边界,并且可能足够细粒度。比结帐更细粒度,您可能正在冒险进入您不想进入的纳米服务领域)

    现在您有了上下文边界,这将是您的微服务。在实现该上下文边界时,您需要将其分解为自己的各个部分。从您的示例来看,您似乎有

    1. 价格/税收计算
    2. 库存管理
    3. 订单管理

    然后,您可以确定上下文边界的每个部分需要哪些功能,并将它们分解为表示/控制器、服务和存储库。

    例如,以订单管理为例。你可能想要这样的东西:

    • Order Service 处理订单的业务逻辑和数据映射
    • Order Repository 从您的数据存储中提取有关订单的数据

    如果您的订单管理需求非常复杂,有很多业务规则,您可能会将其分解为多个服务/存储库以满足这些需求,或者它可能应该拥有自己的上下文边界...

    我无法告诉您如何进行结帐(您询问了有关计算内容和控制交易的问题)。然而,这个设计是你决定做的。

    一旦您准备好所有这些,您就可以确定您的数据存储需求和服务器需求。最初,您可能没有大量用户,因此每个服务可能都存在于同一个项目中的同一台服务器上,并且您可以在它自己的服务器上拥有一个数据库。但是请确保以一种以后可以拆分的方式编写所有内容,这样当您需要通过分布式系统处理更多用户的能力时,您可以在不重写大量代码的情况下这样做。

    这是我在不知道你在做什么的情况下可以给你的最好的答案。我不会逐字逐句地执行我在此处提出的内容并实施它,而是会在此处接受建议并自行执行步骤以确定最适合您需求的设计。

    TL;DR

    1. 定义您的域
    2. 将您的域分解为上下文边界
    3. 确定每个上下文边界
    4. 将这些部分分解为表示/控制器、服务和存储库。
    5. 一切就绪后,确定您的数据存储和服务器需求(开始时,可​​能为您的每个数据存储提供一台服务器(例如,一台服务器上的 SQL 和另一台服务器上的 NoSQL/Blob),以及一台用于微服务的服务器. 然后当你有更多用户需要处理时,分发你的微服务)

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 1970-01-01
      • 2017-09-14
      • 2016-12-02
      • 2020-07-23
      • 2016-01-28
      • 2020-09-20
      • 2020-03-23
      • 2021-01-06
      相关资源
      最近更新 更多