无论您是从头构建一个新系统,还是将一个巨石应用分解为微服务,以下问题的答案将帮助您做出更好的选择。

这个服务只做一件事吗

应该。如果你不能用一句话说明微服务的全部目的,那么你的服务可能太大了。
例如:

  • 适当大小的服务:“该服务管理用户之间的朋友关系”
  • 一个执行多个功能的服务,可能应该被拆分为:“这个服务管理用户之间的朋友关系,并聚合用户朋友的所有活动,这样它就可以被使用。

    这个服务是自治的吗

    服务应该对自己的行为负责。它不应该依赖其他服务来完成它的工作。
    例如,考虑一个订单服务,它的协议允许您创建订单、添加物品、添加付款细节和通过付款确认订单。然而,另一个服务处理支付。如果支付服务没有运行怎么办?这种依赖性意味着订单服务不是自治的。
    自治服务将接受确认请求,而不管支付服务的状态如何。它还可能(可能是异步的)确保支付最终得到处理。

    这个服务拥有自己的数据吗?

    如果一个服务是数据所在数据库的唯一写入者和唯一读取者,那么它就“拥有”数据。
    如果您发现自己正在设计访问同一数据库的多个服务,请考虑重新设计。选择一个服务作为所有者;要求其他服务使用该服务的协议来发出读请求。