Architecture 微服务体系结构-管理参考数据和其他常见内容

Architecture 微服务体系结构-管理参考数据和其他常见内容,architecture,microservices,Architecture,Microservices,我们正在设计一种新的微服务体系结构,它基于一个现有的大型单体应用程序 我们阅读了很多关于如何设计微服务以及他们如何沟通的信息,但我找不到关于这个“问题”的任何信息: 假设我们有两个管理“建筑”和另一个管理“人”的微服务 但是,现在我们还有另一个用于管理“参考数据”(如国家、州等)的微服务和另一个用于管理“用户偏好”的微服务 我们如何管理一个人“包含”一个国家(国籍)和一栋建筑也包含一个国家(地址) 当用户调用某个业务微服务(个人或建筑)时,我们可以执行一个简单的同步HTTP调用来检索用户首选项吗

我们正在设计一种新的微服务体系结构,它基于一个现有的大型单体应用程序

我们阅读了很多关于如何设计微服务以及他们如何沟通的信息,但我找不到关于这个“问题”的任何信息:

假设我们有两个管理“建筑”和另一个管理“人”的微服务

但是,现在我们还有另一个用于管理“参考数据”(如国家、州等)的微服务和另一个用于管理“用户偏好”的微服务

我们如何管理一个人“包含”一个国家(国籍)和一栋建筑也包含一个国家(地址)

当用户调用某个业务微服务(个人或建筑)时,我们可以执行一个简单的同步HTTP调用来检索用户首选项吗?我们可以把它看作是一种反模式吗

我们可以在共享程序集(.net)上定义这些“共享内容”(c#class)吗?或者是否有其他需要考虑的最佳实践


谢谢,

微服务的全部意义在于它们是独立的。您可以创建一个包含国家的服务(例如,您可以显示可用国家的列表),但我会避免将该服务绑定到其他国家。将国家/地区信息复制到这些其他服务中。这允许这些服务独立地发展。例如,如果一个人的国籍比其他国家的国籍更精细(因为像这样的微妙之处确实发生在现实世界中)

服务可以调用其他服务,较粗的业务服务应该调用粒度较细的服务,但不构成网络,确保您严格定义层次结构,并使高级服务调用低级服务。我不认为“Building”或“Person”服务是那些粗粒度的服务,您可能希望在它们上面有一个层,将这些服务与首选项集成在一起。建筑和人员可能应该独立,但微服务设计不是一门精确的科学,在很大程度上取决于您的情况。如果用户偏好深入集成到Person的行为中,那么将Person作为粗粒度服务可能是有意义的。只要确保这是一个明确的决定,你就不会做一些可怕的事情,比如让他们相互依赖


最后,不要创建“共享内容”程序集。它将在很短的时间内成为你的巨石,并将把一切捆绑在一起,形成一个难以控制的混乱局面。最终,您将面临整体式的所有缺点,以及微服务的所有开销

“包含”很奇怪,它似乎不是来自无处不在的语言(见DDD)。你为什么不说:“一个人有国籍”?谢谢你的反馈。再加上。。。研究使用CDC(变更数据捕获)工具,如Debezium。例如,您可以有一个微服务负责管理参考/主数据,并在发生更改时自动复制到其他微服务。