【发布时间】:2021-11-19 03:47:40
【问题描述】:
我有一个包含 4 个微服务的应用程序,所有这些微服务都通过 socketio 向客户端发出事件。 目前客户端为每个服务创建一个socket io客户端连接
const apiSocket = new io(gateway, resolveOptions("/api"));
const chatSocket = new io(gateway, resolveOptions("/chat"));
const otherServiceSocket = new io(gateway, resolveOptions("/example"));
const ThatOtherServiceSocket = new io(gateway, resolveOptions("/example2"));
然后将它们导入到需要它们的各种组件中。我看到的问题是我不得不编写大量重复的代码并重复订阅特定频道的套接字。
最近一直在学习kafka,突然想到以下架构,想咨询S.O是否有意义,如果这样做有什么弊端:
创建一个单一的网络套接字服务来处理所有网络套接字事件和连接(或几个和使用 nginx 的负载平衡)
然后将相关服务将使用的事件发布到 kafka。如果服务需要向客户端发送事件以触发通知或类似的东西,它将向 kafka 发布一个事件,Web 套接字服务将使用该事件,然后将其发送给客户端。
这种架构有意义吗?这样做有什么缺点吗?
这是我解释问题的视频: https://www.loom.com/share/57cf8a542f434a85ab638c4b2ffd9999
【问题讨论】:
标签: node.js apache-kafka socket.io architecture