问题描述
我有一个单一的 REST API 和一个单独的 WebSocket 服务器,用于实时更新。它们都是分开的,所以我可以独立地缩放它们。 API 从数据库中获取数据并将其发送给请求它的用户,但我也想从我的 WebSocket 服务器中的数据库中获取数据,我不确定我应该如何以一致的方式进行。
选项:(我想到的)
- 使用我的数据库的架构和模型创建一个共享数据库模块,并在两台服务器上使用它。
- 在 WebSocket 服务器上,我可以使用用户令牌请求 API 来代表他们获取数据。
- 我可以将我的 API 逻辑拆分成一个微服务架构,并让 API 充当具有身份验证逻辑和代理对微服务请求的网关,而 WebSocket 服务器可以直接请求微服务而无需通过网关,因此它不会不必进行身份验证。
- 使用 RPC over RabbitMQ 从 API 获取数据。
- 将需要查询数据库的逻辑移到我的 API 中(不是很理想)
顾虑:
- 对于选项 #1,这样做显然是糟糕的设计,而且平心而论,我不需要在我的 WebSocket 服务器中获取大量数据,只需要某些字段(可以缓存),如果我决定实现某种形式的数据库缓存将有两个单独的缓存(更不用说两个服务器都应该扩展以便有多个实例)。我可以在我的共享模块中实现缓存,但这听起来是个坏主意。
- 选项#2 对我来说似乎很合理。虽然我不需要像您在请求 API 时那样获取所有数据,但也许这有点矫枉过正?
- 选项 #3 似乎是一个不错的主意,但我不确定如何使用 Node/TypeScript 设计它,它没有很多资源,而且我还担心如何设置我的防火墙以防止外部用户无法访问私有微服务,ufw 在单个节点上已经足够好了,但是如果我有多个节点呢?如果我决定开始使用 Kubernetes 怎么办?设置起来似乎很麻烦,而且容易出现问题。
- 我喜欢选项 #4,但我不确定它的速度有多快。由于这是一个 WebSocket 服务器,我需要尽可能快地实时发生事情。
- 对于选项 #5,需要数据的 WebSocket“请求”基于套接字的会话,因此如果我将它们移动到 API,我将不得不使用 RabbitMQ 或发布/订阅将请求发送到我的无论如何,WebSocket 服务器。似乎是一个缓慢的迂回过程。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)