【发布时间】:2017-05-17 15:49:22
【问题描述】:
我正在开发一个具有微服务架构的网站,每个服务都拥有一个数据库。数据库存储微服务需要的数据。
Post、Video服务需要用户信息,所以这两个服务都订阅了NEW_USER_EVENT。
NEW_USER_EVENT 将在有新用户注册时触发。
一旦服务收到NEW_USER_EVENT,他们会将传入的用户信息放入各自的数据库中。这样他们就可以在不询问User 服务的情况下做事。
到目前为止一切顺利。但问题来了:
- 如果我要创建新服务怎么办?如何获取注册用户信息并将其放入新服务中?
也许我可以从现有服务中获取信息。但是这些事件是由消息队列 (NSQ) 推送的。
如果我要从其中一个微服务中复制数据,我如何确定哪个服务拥有最新的用户信息? (因为有些服务没有收到最新的事件)
阅读更多:
The Hardest Part About Microservices: Your Data
Intro to Microservices, Part 4: Dependencies and Data Sharing
【问题讨论】:
-
为什么“帖子”和“视频”等服务需要了解用户创建?如果请求到达与那些服务从未听说过的用户相关,他们不需要验证用户是否存在......他们可以简单地假设用户确实存在,否则他们不会收到与用户。
-
@Michael 服务收到了
username,它们会将其转换为user_id,而无需询问User服务的松散耦合。当新用户注册时,服务会将username-userId映射存储在他们的每个数据库中,以便他们可以在自己的服务中进行转换。 -
我知道这个问题可以用JWT解决,但我还是有类似的事情,不仅仅是用户需要转换。
-
我认为没有必要在新服务中包含用户数据 - 当您说有新音乐(例如)时,您会发布“用户 ID_HERE 创建了一些音乐”,然后只存储该 ID。该服务不需要知道除 ID 之外的任何内容,不是吗?它可以响应“用户已禁用”事件并可能将它们全部归档——尽管这可能不是必需的。基本上,我不确定为什么这项服务完全关心用户名
-
图不错,Yami用的什么工具?
标签: mysql database message-queue microservices nsq