首页 > 解决方案 > 如何编排我的 3 个 Nodejs 服务器以与共享的 MongoDB 模型一起工作

问题描述

标题可能有点误导,但我无法正确表达。我会尽量解释清楚,如有必要,我什至会画一些东西。我知道这是 Web 开发/云开发/后端的一个巨大主题,我现在主要是寻找我面临的这个问题的直接答案,以及一些关于如果我扩大规模可以期待的高级介绍。到时候我会开始更深入地阅读这些主题。

我的设置如下。3 个使用 Nodejs+Express 和 Typescript 的后端服务器。两个用于服务两种不同的客户和一个管理服务器。我将它们命名为服务器 A、B 和管理员。我使用 MongoDB 作为数据库,现在确定我是否会使用 Azure 或 AWS 来托管这些。

我的要求如下:

  1. 所有 3 个服务器都应访问名为 Thing1、Thing2 的共享模型。管理员主要与它们交互并创建它们,但服务器 A/B 需要访问它们才能将它们发送给客户。Thing1 由 ServerA 访问,而 Thing2 由 A 和 B 访问

  2. 我需要一种在服务器之间进行通信的方法,因为 ServerA 中发生的事情也应该更新 ServerB 中包含的模型。一种解决方案可能是将交互的这一部分拆分为一个全新的服务,并让它通过事件队列或套接字连接来处理服务器之间的通信。还是我应该只从 ServerA 向 ServerB 发出 HTTP 请求?

问题:

  1. Typescript 要求所有的 src 都在同一个根目录下,所以我不知道如何共享 MongoDB 模型。

  2. 我正在考虑使用套接字连接,也许还有第四台服务器作为交互的桥梁,但如果我有多个实例等等,我对在云中如何工作感到困惑。(在这种情况下,HTTP 请求也是如何工作的?可能是一个将流量引导到不同实例的负载均衡器)

所以一个流程是,

  1. 管理员创建 Thing1 ->
  2. ServerA 与之交互(管理员应该以某种方式从 ServerA 访问模型并更新它以反映正在创建的新事物,例如将事物 ID 添加到模型中)->
  3. ServerA 模型得到更新(我们已经在 ServerA 中如此简单)并且来自 ServerB 的模型也应该得到更新,删除 Thing1 并创建 Thing2。这一步推动我使用第四个服务来处理这个问题,因为它必须与其他两个服务进行通信。ServiceA/B 都需要访问 Thing2。

我很抱歉的解释,但我也有点困惑如何处理这个问题。我会进一步解释需要什么。我当前的问题是如何从这些不同的服务访问不同的 MongoDB 集合,以及如何将更改/事件传播到所有服务。

标签: node.jsmongodbmongooseservercloud

解决方案


我们可以将大问题分解为:

  1. 建筑学
  2. 部署
  3. 工具

建筑学

我建议您遵循 DDD 和 Mediator Pattern 之类的模式,最后一个在您的情况下非常有效(事物之间的通信)检查此页面以获取有关 Typescript 的介绍,但最好阅读DDD的发明者Eric Evans DDD。

部署

如果您不确定在哪里托管您的应用程序,我建议您使用Docker。使用它,您可以构建可在 AWS 或 Azure 上部署的映像。

工具/框架

我建议您阅读以下内容:


推荐阅读