你会如何使用微服务设计一个简单的聊天应用程序?

时间:2017-12-10 00:05:43

标签: microservices

所以让我们说这些是我的表:

users
id(pk) | username

channels
id(pk) | title

members
user_id(pk, fk) | channel_id(pk, fk)

messages
id(pk) | channel_id(fk) | sender_id(fk) | text | created_at

从我读到的关于微服务的内容来看,它们应该能够自己部署,并拥有自己的数据库。

我认为这意味着我会让这些微服务各自运行自己的SQL实例:

用户微服务

users
id(pk) | username

Messaging Microservice

channels
id(pk) | title

members
user_id(pk, fk) | channel_id(pk, fk)

messages
id(pk) | channel_id(fk) | sender_id(fk) | text | created_at

我读到这是为了公开这些微服务,我应该为每一个提供某种REST / GraphQL API,因此Messaging Microservice会有getChannel()createMessage()等等。

所以我的问题是,当我需要访问另一个微服务中的数据时,我应该怎么做,基本上他们应该如何相互交谈?例如,在我的前端说我输入聊天频道并想要显示其消息。如果我执行getChannelMessages(),则会返回

列表
{
  id: 1,
  channel_id: 32,
  sender_id: 48,
  text: 'hello world',
  created_at: some unix time
}

此时,我不知道我需要显示谁sender_id: 48。从那里开始,我是否应该使用getUser(sender_id)为每条消息或其他内容调用用户微服务的API?

如果用户被删除怎么办?感觉我必须做一些额外的工作才能进入其他微服务,删除所有消息并将其从频道中删除。事情不会失去同步吗?

最后,如果我只有一个前端,这似乎有点矫枉过正吗?我是否应该有一个与每个微服务交谈的前端,或者我的微服务是否也应该拥有自己的前端?也许如果这是一个网络应用程序,我可以为每个前端或其他东西拆分URL,但多个前端对我来说在移动应用程序的上下文中没有意义。

无法将所有这些放在一起,并希望得到任何建议和澄清。

0 个答案:

没有答案