微服务共享域层

microservice shared domain layer

我对微服务架构有疑问。我们正在开发一个 ERP,其中有几个微服务,例如人力资源、身份、订单等。

我们为所有这些层共有的实体实现了共享域层,包括公司、位置和一些值对象的抽象(接口)。

我的问题是:微服务共享项目的边界是什么?那有多糟糕?

在那种情况下,那些共享实体对于每个微服务来说都是相同的,这样可以帮助我们编写更少的代码,但同时创建一个小级别的耦合。

通常微服务架构采用 "share nothing" 概念,这意味着您的代码库在理想情况下应该是独立的。是的,这将意味着您将编写更多代码,但将使您的微服务更易于管理、解耦并且可能更轻。

另外,关于 DDD 部分做题,你真的应该努力在你的应用程序中保持明确定义的边界,这意味着你不应该害怕在不同的有界上下文中有 "redundant" 个实体,因为相同的概念通​​常对应用程序的不同领域有不同的含义。

继续 "ERP" 主题,您希望应用程序的 "Order Placing" 上下文对 "Product" 实体的看法与 [=21] 的看法完全不同=] 语境。将它们保留在不同代码库中的不同上下文中将使您能够对具有更高凝聚力的较小聚合进行建模,从而减少与模型的其他构造的耦合,从而使您的微服务更容易发展。

My question is: What's the boundary of shared items for microservices and how bad is that?

直到几年前,定义微服务的边界还很复杂,因为根本没有就如何实现这一点达成一致,但 Evans 几年前解决了这个问题:

GOTO 2015 • DDD & Microservices: At Last, Some Boundaries! • Eric Evans

微服务也遵循SOA的四大租户,同样要考虑分布式系统的9大谬误,只是业务范围不同。请记住,微服务架构应该遵循无共享架构,因此服务不会真正共享实体,它们所做的只是订阅消息,通常是在总线中,并存储它们所在的数据片段的本地副本感兴趣。这显然引入了另一个概念,称为最终一致性,并且取决于您的业务需求,如果在您的整体设计中可能会或可能不会。