如何使用微服务架构处理共享数据源
How to handle shared datasources using microservices architecture
我的微服务架构中有几个服务。
其中两个服务(服务 A、服务 B)具有不同的 api,并提供不同的域逻辑。但是,它们确实共享一些应该 returned 的逻辑 - 来自 Redis 的用户状态。
- 当用户状态改变时,我正在从第三个服务发布到我所有的微服务
解决方案:
我可以创建另一个服务来负责 "user-state" 并将所有用户数据保存在 Redis 上。
缺点:
我的客户将对每个 api 请求进行额外调用(以获取用户状态)。
为每个微服务(持有多个 redis 实例)复制用户状态数据源,并 return 为每个请求独立地复制它。
缺点:
我将复制我的数据和复制 Redis 实例(每个微服务将访问它自己的)
拥有一个 redis 数据源,而所有服务都将使用它。
缺点:
通过使用一个共享数据源
在服务之间复制redis-logic(为了检索数据)并打破微服务原则
你建议做什么?
如果你想保持微服务架构稳固,我肯定会选择第一个;如果您将 "User/User State" 视为可以独立运行的完全独立的产品。
我认为额外的调用来防止冗余implementations/data是可行的方法,如果Redis在它后面,并且前面的API正在执行那么你应该没有问题额外的电话。并且您可以通过尽可能地解耦系统来获得胜利。
如果不是这样,那么2将是一个很好的解决方案。您将面临有关数据完整性和复制问题的挑战,但这是方法之一。
我的微服务架构中有几个服务。
其中两个服务(服务 A、服务 B)具有不同的 api,并提供不同的域逻辑。但是,它们确实共享一些应该 returned 的逻辑 - 来自 Redis 的用户状态。
- 当用户状态改变时,我正在从第三个服务发布到我所有的微服务
解决方案:
我可以创建另一个服务来负责 "user-state" 并将所有用户数据保存在 Redis 上。 缺点: 我的客户将对每个 api 请求进行额外调用(以获取用户状态)。
为每个微服务(持有多个 redis 实例)复制用户状态数据源,并 return 为每个请求独立地复制它。 缺点: 我将复制我的数据和复制 Redis 实例(每个微服务将访问它自己的)
拥有一个 redis 数据源,而所有服务都将使用它。 缺点: 通过使用一个共享数据源
在服务之间复制redis-logic(为了检索数据)并打破微服务原则
你建议做什么?
如果你想保持微服务架构稳固,我肯定会选择第一个;如果您将 "User/User State" 视为可以独立运行的完全独立的产品。
我认为额外的调用来防止冗余implementations/data是可行的方法,如果Redis在它后面,并且前面的API正在执行那么你应该没有问题额外的电话。并且您可以通过尽可能地解耦系统来获得胜利。
如果不是这样,那么2将是一个很好的解决方案。您将面临有关数据完整性和复制问题的挑战,但这是方法之一。