微服务、Socket IO和Kafka架构问题

Microservice, Socket IO and Kafka architecture question

我有一个包含 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

您正在使用您的单个网络套接字服务有效地创建 BFF pattern。没什么问题,这种模式一直被用来简化复杂的后端服务架构(尤其是当人们过度分解他们的微服务时)。