跨微服务共享公共数据如何实现?


在微服务设计过程中,经常出现的一个共同点和要求是共享共同数据。而这个问题在微服务之间的异步消息驱动通信(使用Kafka)中变得更加有趣了

例如,微服务1有一些数据。微服务2和3想要访问这些数据。

我看到了3个选项。

  • 共同存储:微服务1的存储被存储在2和3中。
  • 本地存储:2和3所需要的通用数据也存储在他们那里,可能不是全部的数据,但也是所需要的。
  • 来自1的API暴露:2和3通过API向1询问这些数据。由于这是一个基于Kafka的通信。由于Kafka是异步的,所以通过Kafka来做是很困难的,这种情况最好通过HTTP REST调用来实现。

显然,没有银弹,解决方案取决于需求和现有架构。

网友观点:
1、我会选择2。因为我从来没有做过其他更基本的错误,如

  • 在没有多个团队的情况下做微服务
  • 为了性能而做ms
  • 无视康威法则、团队动力等。
  • 认为分布式系统比漂亮、干净的模块更简单
  • 认为模块不能执行或横向扩展
  • 认为在微服务中建立或修复领域边界比在模件中更容易。
  • 认为我是Netflix,以壮大我的自我

记住:每一个微服务都应该是高可用的、模块化的、可随时独立部署的,否则你就真的是一个分布式的单体,和20年前的SOA没有什么区别。

记住:你做微服务是通过拆分你的漂亮、干净的单体,以便随着公司的发展为新团队腾出空间。

这意味着:微服务首先是一种组织模式。

2、在真正的微服务中,每个服务都处理自己的数据。数据可以跨服务传输(例如,服务 1 需要有关服务 2 的数据,但服务 2 仍然持有并提供它)

3、没有共享的数据。数据有所有者和消费者。“共享数据”的心智模型已经是对低效架构的承诺