微服务的正确粒度是多少?
What is the right granularity for a microsrevice?
我们有一个网站可以通过 API 调用向我们提供航班库存和票价的聚合器来比较机票价格和预订机票。通过 API 从我们的网站调用支付网关来支付门票。我们有类似的酒店预订能力。酒店预订和航班预订使用 Lumen 作为单独的服务实施。由于酒店预订也使用与航班相同的支付网关,因此我们最终在酒店服务下复制了该代码。将支付转换为单独的微服务可能是一个更好的主意。问题是,微服务的正确粒度是多少?
如果您担心代码重复,我可以建议您编写一个通过 composer 引入的包吗?这样你就可以把它拉到你将来可能需要的任何进一步的项目中。至于什么是正确的粒度,一段字符串有多长?
答案是,这取决于。回答您的问题的一种方法是查看您的团队的组织方式。您是否有围绕航班聚合、支付、酒店预订和航班预订组织的团队?如果你有,那么在你的微服务架构中模仿这种组织结构可能是有意义的。毕竟,康威定律规定,这就是您的服务最终将如何组织起来的方式。
话虽如此,我知道的另外两种方式是:
按业务能力分解按业务能力分解
上下文
按业务子域分解。 按子域分解
上下文
我们有一个网站可以通过 API 调用向我们提供航班库存和票价的聚合器来比较机票价格和预订机票。通过 API 从我们的网站调用支付网关来支付门票。我们有类似的酒店预订能力。酒店预订和航班预订使用 Lumen 作为单独的服务实施。由于酒店预订也使用与航班相同的支付网关,因此我们最终在酒店服务下复制了该代码。将支付转换为单独的微服务可能是一个更好的主意。问题是,微服务的正确粒度是多少?
如果您担心代码重复,我可以建议您编写一个通过 composer 引入的包吗?这样你就可以把它拉到你将来可能需要的任何进一步的项目中。至于什么是正确的粒度,一段字符串有多长?
答案是,这取决于。回答您的问题的一种方法是查看您的团队的组织方式。您是否有围绕航班聚合、支付、酒店预订和航班预订组织的团队?如果你有,那么在你的微服务架构中模仿这种组织结构可能是有意义的。毕竟,康威定律规定,这就是您的服务最终将如何组织起来的方式。
话虽如此,我知道的另外两种方式是:
按业务能力分解按业务能力分解 上下文
按业务子域分解。 按子域分解 上下文