微服务建议关注在两个服务之间共享状态

Microservices advice concern to share state between two services

我遵循微服务架构,我们有两个独立的服务

(用户服务,其他服务)

UserService 写入它自己的数据源(mysql 和 Redis)

客户端正在向 UserService 写入更新

另一方面,客户端从 OtherService 获取数据,这需要来自 UserService 的一些用户状态。

OtherService 的延迟和吞吐量非常重要。

几个选项:

  1. UserService 将在状态更改时更新 OtherService(比我打破 OtherService 的域责任,因为它不应该维护用户状态

  2. OtherService 将向 UserService(通过 api)询问用户状态(增加很多延迟,这对我来说很重要。我可以缓存但仍然..不确定这是正确的方法)

  3. 在 UserService 写入和 OtherService 读取时共享数据存储。共享相同数据源时也违反了微服务原则

你们认为应该怎么做? 谢谢, 射线.

我们在被动端使用冗余只读数据和消息队列来为此类场景进行通信。我的意思是在您的其他服务端有一个用户状态 table 并在消息来自您的用户服务时更新它。它不会影响您的 OtherService 的可用性、性能和可伸缩性。依赖性几乎为零。该方法唯一可能有问题的一面可能是用户状态数据的新鲜度。关于新鲜度问题,我一般指的是毫秒。如果新鲜度问题在您的情况下如此重要,那么您最好的选择是结合两种服务。

我认为您列表中的选项 #2 是正确的做法。您没有在问题中提及延迟数字。

一般来说,MS 体系结构意味着您 运行 在多个 'machines/dockers' 跨多个区域,任何实例都可以在任何给定时刻出生或死亡,如果您不 运行ning同一个数据中心,那么无论你做什么,都会有延迟。

我们(来自臃肿的大型企业应用程序)有时很难将应用程序垂直分解为逻辑功能块。因此,我认为值得考虑从 UserService 和 OtherService 中取出部分并制作另一个 MS。不要认为 MS 会太多,公司实际上有 1000 多个 MS,而且运行良好。不要害怕跳出框框。