如何使用微服务架构处理共享数据源

How to handle shared datasources using microservices architecture

我的微服务架构中有几个服务。

其中两个服务(服务 A、服务 B)具有不同的 api,并提供不同的域逻辑。但是,它们确实共享一些应该 returned 的逻辑 - 来自 Redis 的用户状态。

解决方案:

  1. 我可以创建另一个服务来负责 "user-state" 并将所有用户数据保存在 Redis 上。 缺点: 我的客户将对每个 api 请求进行额外调用(以获取用户状态)。

  2. 为每个微服务(持有多个 redis 实例)复制用户状态数据源,并 return 为每个请求独立地复制它。 缺点: 我将复制我的数据和复制 Redis 实例(每个微服务将访问它自己的)

  3. 拥有一个 redis 数据源,而所有服务都将使用它。 缺点: 通过使用一个共享数据源

  4. 在服务之间复制redis-logic(为了检索数据)并打破微服务原则

你建议做什么?

如果你想保持微服务架构稳固,我肯定会选择第一个;如果您将 "User/User State" 视为可以独立运行的完全独立的产品。

我认为额外的调用来防止冗余implementations/data是可行的方法,如果Redis在它后面,并且前面的API正在执行那么你应该没有问题额外的电话。并且您可以通过尽可能地解耦系统来获得胜利。

如果不是这样,那么2将是一个很好的解决方案。您将面临有关数据完整性和复制问题的挑战,但这是方法之一。