【问题标题】:Does storing another service's data violate the Single Responsibility Principle of Microservice存储另一个服务的数据是否违反微服务的单一职责原则
【发布时间】:2022-10-23 16:08:50
【问题描述】:

假设我有一项管理仓库的服务(更新频率不高)。我有一项销售服务,需要商店列表(根据需要进行搜索和使用)。如果我从商店服务中获取商店列表并将其保存在我的销售服务中(比如说在 redis 中),但如果商店列表发生更改,请确保更新 redis。会不会违反微服务架构的单一职责原则?

【问题讨论】:

    标签: architecture microservices single-responsibility-principle


    【解决方案1】:

    不,它没有,实际上这是微服务架构中非常常见的方法,当服务存储来自另一个服务的相关数据的副本并使用某种机制来同步它(通常使用通过消息代理的一些异步通信)。

    存储数据副本不会从管理它的服务转移该数据的所有权。

    【讨论】:

      【解决方案2】:

      这很常见,您有一个微服务模式 (CQRS)。

      如果您需要来自其他服务/微服务的一些信息来加入您的数据,那么您需要存储该信息。

      【讨论】:

        【解决方案3】:

        每当您做出设计决策时,无论是始终向下游系统发出请求还是使用本地副本,那么您基本上都是在进行权衡分析表现数据新鲜度.

        • 如果您总是发出 RPC 调用,那么您更喜欢数据新鲜度而不是性能
          • 您需要多久发出一次 RPC 调用的频率直接影响性能
        • 如果您使用缓存来获得性能,那么就有机会使用陈旧的数据(取决于您的业务,这可能没问题或不可接受)
          • 缓存失效是一个非常有问题的域,所以它可能会让人头疼

        缓存一个微服务的数据不会违反数据所有权,因为缓存只是读取数据,不会删除或更新现有数据。它类似于拥有一个领导者(主) - 多个追随者设置或读写锁。直到只有一个地方可以创建、修改或删除数据,然后才能以正确的方式实现数据所有权。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 2021-06-21
          • 1970-01-01
          • 2023-03-23
          相关资源
          最近更新 更多