Microservices 与微服务共享数据

Microservices 与微服务共享数据,microservices,Microservices,我正在实现一个事件驱动的微服务体系结构。想象一下以下场景: 聊天服务:能够查看对话和发送消息。对话可以有多个参与者 注册登录服务:处理新用户的注册和登录 用户服务:获取/更新用户配置文件 注册登录服务使用新创建的用户对象发出以下事件: 新注册 登录成功 注销成功 然后,聊天服务监听注册新的,并将用户的一些字段存储在自己的redis缓存中。它还侦听登录成功并存储令牌,并在注销成功上删除令牌 用户服务具有以下事件:用户已更新。触发此命令后,聊天服务中的侦听器将更新与redis中的用户id对应的数

我正在实现一个事件驱动的微服务体系结构。想象一下以下场景:

  • 聊天服务:能够查看对话和发送消息。对话可以有多个参与者
  • 注册登录服务:处理新用户的注册和登录
  • 用户服务:获取/更新用户配置文件
注册登录服务使用新创建的用户对象发出以下事件:
新注册
登录成功
注销成功

然后,聊天服务监听
注册新的
,并将用户的一些字段存储在自己的redis缓存中。它还侦听
登录成功
并存储令牌,并在
注销成功
上删除令牌

用户服务具有以下事件:
用户已更新
。触发此命令后,聊天服务中的侦听器将更新与redis中的用户id对应的数据。与聊天服务一样,用户服务也会监听
登录成功
注销成功
,并执行与聊天服务相同的操作


我的问题是:这是一个好方法吗?到处共享数据感觉有点违反直觉。我需要一些建议。谢谢大家!

看来没有别的办法了。Microservices体系结构在避免数据共享以避免产生依赖方面带来了很大的压力。这意味着每个微服务都会复制一些数据。这也意味着必须存在一种从其他上下文获取数据的方法。首选方法力求最终的一致性,例如向事件源或AMQP系统发送消息并订阅它们。您还可以使用同步方法(RPC调用、分布式事务)。这会产生额外的技术依赖性,但如果你不能接受最终的一致性,这可能是唯一的方法。

当你说“到处共享数据感觉有点违反直觉”时,你是指“复制”还是“分发”?因为“共享”通常意味着拥有一个每个人都可以访问的公共存储库。这可能不是一个完整的答案,但也没有错,任何反对者都应该说明原因或提供一个替代方案answer@Matt谢谢你的支持!我不明白为什么我的答案不完整,你能澄清一下吗?是的,公平地说,我认为它是完整的,我认为任何反对投票的人都应该说为什么