我正在实施一个事件驱动的微服务架构。想象一下以下场景:
注册登录服务使用新创建的用户对象发出以下事件:
registration-new
login-success
logout-success
聊天服务然后侦听registration-new
并将某些用户字段存储在自己的redis缓存中。它还会监听login-success
并存储令牌,并在logout-success
上删除令牌。
用户服务具有以下事件:user-updated
。触发此操作时,聊天服务中的侦听器将以redis更新与用户标识对应的数据。与聊天服务一样,用户服务也会监听login-success
和logout-success
,并执行与聊天服务相同的操作。
我的问题如下:这是一个很好的方法吗?在各地共享数据感觉有点违反直觉。我需要一些建议。谢谢!
答案 0 :(得分:0)
似乎没有别的办法。微服务架构在避免数据共享方面存在很大压力,从而不会产生依赖关系。这意味着每个微服务都会复制一些数据。这也意味着必须存在从其他上下文获取数据的方法。首选方法力求最终的一致性,例如向事件源或AMQP系统发送消息以及订阅它们。您还可以使用同步方法(RPC调用,分布式事务)。这会产生额外的技术依赖性,但如果你不能接受最终的一致性,那么它可能是唯一的方法。