与微服务共享数据

时间:2015-06-03 07:31:09

标签: microservices

我正在实施一个事件驱动的微服务架构。想象一下以下场景:

  • 聊天服务:能够查看对话和发送消息。对话可以有多个参与者。
  • 注册登录服务:处理新用户的注册,并登录。
  • 用户服务:获取/更新用户个人资料。

注册登录服务使用新创建的用户对象发出以下事件: registration-new login-success logout-success

聊天服务然后侦听registration-new并将某些用户字段存储在自己的redis缓存中。它还会监听login-success并存储令牌,并在logout-success上删除令牌。

用户服务具有以下事件:user-updated。触发此操作时,聊天服务中的侦听器将以redis更新与用户标识对应的数据。与聊天服务一样,用户服务也会监听login-successlogout-success,并执行与聊天服务相同的操作。

我的问题如下:这是一个很好的方法吗?在各地共享数据感觉有点违反直觉。我需要一些建议。谢谢!

1 个答案:

答案 0 :(得分:0)

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