【问题标题】:Does data duplication in microservice architecture lead to code duplication?微服务架构中的数据重复会导致代码重复吗?
【发布时间】:2021-04-13 08:18:58
【问题描述】:

例如,我们有一个具有微服务架构的应用程序。这些服务使用事件总线相互通信,如下所示:

  1. TeamService 订阅 UserCreated 事件
  2. UserService 发布UserCreated 事件
  3. TeamService 将UserCreated 事件中的用户存储到自己的数据库中

因此,我们在某些服务中复制数据。这在微服务架构中是可以的。但是处理这些数据的代码呢?例如,用户可能有isPublic 字段。如果 isPublic 字段为 false,则用户的个人资料信息仅对用户本人和具有管理员权限的用户可见。

因此,UserService 和 TeamService 必须具有相同的代码来处理此逻辑。或者有没有其他方法来处理isPublic字段而不重复代码?

【问题讨论】:

    标签: architecture microservices code-duplication


    【解决方案1】:

    在微服务架构中,数据可以在多个服务中复制,例如用户服务和团队服务,但只有一项服务拥有并提供数据。例如,用户个人资料数据归用户服务所有,只能由用户服务提供。

    因此,如果任何 UI 或其他服务想要显示配置文件服务,那么它会向用户服务提出相同的要求,如果配置文件不公开,用户服务可能会拒绝(拒绝访问)。

    【讨论】:

    • 多个服务可以提供相同的数据。例如,搜索服务可以提供来自其他服务的数据。
    • 是的,你是对的。在某些情况下,一个服务为另一个服务拥有的数据提供服务。但在您的场景中,我们应该避免这种情况以简化解决方案。
    【解决方案2】:

    您可以构建一个包含公共代码的库,并将其作为依赖项添加到 UserServiceTeamService

    【讨论】:

    • 包含通用业务逻辑的库很难维护。业务逻辑经常变化,因此您经常需要重新发布库并重新部署所有受影响的服务。
    • 没错,但你想解决代码重复问题。如果不想新建库,可以在同一个项目中创建common模块,把常用逻辑放在那里
    • 据我了解,我仍然需要重新部署每个使用该模块的服务
    猜你喜欢
    • 2018-08-11
    • 2019-05-28
    • 2017-08-31
    • 1970-01-01
    • 2017-11-30
    • 2016-06-22
    • 1970-01-01
    • 2017-11-10
    • 2021-01-11
    相关资源
    最近更新 更多