Microservices 微服务在服务之间存储用户信息

Microservices 微服务在服务之间存储用户信息,microservices,domain-driven-design,Microservices,Domain Driven Design,例如,我有邮政服务。在UI上,我需要显示post和userinfo(重定向到用户页面的用户名和id) 选项: 我应该在post服务中存储用户名和id吗。(当每个用户注册到系统时,我将通过RabbitMQ向post服务发送子集详细信息)。(来自UI的请求总数=1) 我将只存储用户Id(AR)。和在UI组件获取id为的用户(来自UI的请求总数=2) 他们两个都很好。该决策基于如何在不同边界上下文之间映射概念。这些措施包括: 反腐败层 共享内核 开放主机服务(选项2) 分道扬镳 客户供应商 墨守

例如,我有邮政服务。在UI上,我需要显示post和userinfo(重定向到用户页面的用户名和id)

选项:

  • 我应该在post服务中存储用户名和id吗。(当每个用户注册到系统时,我将通过RabbitMQ向post服务发送子集详细信息)。(来自UI的请求总数=1)

  • 我将只存储用户Id(AR)。和在UI组件获取id为的用户(来自UI的请求总数=2)


  • 他们两个都很好。该决策基于如何在不同边界上下文之间映射概念。这些措施包括:

    • 反腐败层
    • 共享内核
    • 开放主机服务(选项2)
    • 分道扬镳
    • 客户供应商
    • 墨守成规的
    • 伙伴关系
    • 出版语言
    这不仅是个人偏好,也是关于组织结构()


    如果两个上下文(post和user)都由您的团队控制,您可以选择其中一个。考虑到选项1的复杂性,我更喜欢选项2,因为它非常简单。从简单的开始,然后涉及到您的体系结构始终是一个好主意。

    回答得很好,但恭敬地不同意您的建议。我自己会选择选项1。@tomredfern选项1包括一个数据同步机制,这会增加复杂性。然而,若用户名从未更改,那个么存储用户名冗余看起来很棒。但我担心,随着系统的发展,将有越来越多的事情需要进行冗余保存。然后需要同步数据。无论如何,答案是“视情况而定”…我建议选择1,除非用户名可以更改。在这种情况下,决策更难,最好选择方案2。我会选择方案1。如果用户名可以更改,只需发布一个事件并从post服务中侦听它即可更新数据。此外,实体不应共享accross服务,因此post-bounded上下文可能应该有一个与“用户”不同的“海报”实体。