2

我的同事和我想构建一个聊天应用程序(ReactJS <-> NodeJS),我们一直在寻找最好的框架来做到这一点。FeathersJS 无疑是最稳定且功能最丰富的 socket.io 包装器。

但是,由于我们希望允许我们的应用程序扩展,我们决定将此聊天功能拆分到与我们的主节点后端不同的节点进程中。

然而,聊天功能仍然需要身份验证和授权,我们希望避免对这两个服务进行重复身份验证。因此,我们提供的解决方案是使用会话 cookie 查询主节点后端,以在让用户使用聊天服务之前对用户进行身份验证。

FeathersJS 是建立持久的套接字连接还是会为发送/接收的每条消息建立一个套接字连接?在第一种情况下,我们可以继续我们的架构,而在第二种情况下,由于这会在主后端产生高负载,我们必须进行审查。

谢谢!

4

1 回答 1

6

有几种拆分服务的方法,每种方法都有自己的优点和缺点。对于 Feathers 来说,一件通常很重要的事情是没有会话,只有JSON Web 令牌。JWT 是无状态的,可以被任何共享相同密钥的服务器读取,因此不必有中央会话存储。我能想到的两个主要选择是:

  1. 有一个主应用程序来处理授权和管理所有连接的客户端,但不是让服务与数据库对话,而是连接到内部网络中单独的简单 API 服务器。这是更简单的设置,优点是内部 API 服务器可以超级简单,根本不需要身份验证(因为主应用程序可以做所有事情,并且会根据经过身份验证的用户限制进行查询)。缺点是主应用程序仍然是瓶颈(但负载减少,因为它基本上充当内部 API 的代理)。

主服务器配置

  1. 每个客户端都使用 JWT 连接到他们需要的每个 API 服务器。JWT 由单独的身份验证(或用户)API 创建。这是更具可扩展性的解决方案,因为唯一的瓶颈是从公共用户服务中检索最新的用户信息(这甚至可能并不总是必要的)。缺点是在客户端管理更复杂,并且必须在每台服务器上配置身份验证(至少对于 JWT)。然而,由于 JWT 的无状态性,不需要任何共享会话。

分布式服务

于 2016-12-12T07:01:32.203 回答