1

我相当精通用于异步、事件驱动、非阻塞编程模型的Node.js编程范式。我现在正试图了解在虚拟机的云计算生态系统中我可以将Node.js的使用扩展到多远。

在我的 Web 仪表板的服务器端,我将 Node.js 作为 http 服务器运行并与 Cassandra 数据库进行交互。用户通过浏览器仪表板与我们的云服务进行交互。在客户端和服务器之间打开的 Websocket 将允许服务器端向用户的仪表板发起操作。

用户的部分任务活动将是为工作流活动生成基于云的虚拟机。这些虚拟机将执行需要与系统的主 Cassandra 数据库交互的应用程序。

我非常希望对以下Node.js架构方案有一些反馈:

当用户生成虚拟机时, VM 会使用在 VM 上运行的 Node.js 实例启动。该VM 的 Node.js 实例主动打开一个 Web 套接字,其中系统的主 Node.js 实例正在运行或分配给该 VM(可能有多个 Node.js 实例可用于与 Cassandra 数据库通信),即一个Node- to-Node websocket 是从 VM 的 Node.js 实例建立的。

VM 的 Node.js 实例设置了一系列要在 VM 内部监视的事件。系统的 Node.js 实例还设置了一系列要从 VM 的 Node.js 实例监视的事件。当 VM 的 Node.js 实例事件触发完成时,就会启动并完成所需的 Cassandra DB 操作。系统的 Node.js 实例还监视来自 VM 的某些事件,以启动 Cassandra DB 操作。

实际上,我在这里要问的是:通过 websockets 建立 Node.js-2-Node.js 通信通道并且两个 Node 实例都与同一个后端数据库通信是否有意义?

在这种配置中,我似乎能够设置一个高度灵活的双向 VM 事件系绳,它可以使用来自系统的 Node.js 实例和 VM 的节点的 DB 记录的操作来监视/侦听规定的事件。 js 实例。

我在这里描述的是一个非典型和荒谬的场景吗?在这个用例中是否有更好的方法来使用 Node.js?有没有更合适的组件配置?

亲切的问候,马克

4

2 回答 2

1

不,不是的。

WebSocket 协议仅在它允许支持 WebSocket 的 Web 浏览器与服务器应用程序通信时才有用。否则它不是特别有趣或有用,并且不应用于不涉及 Web 浏览器的通信。

使用普通 TCP 套接字(使用net模块)进行服务器到服务器的通信。

于 2013-11-10T17:52:05.230 回答
0

WebSocket HTTP 扩展的目的是启用与隐藏在防火墙后面的 Web 浏览器的双向通信。WebSocket 取代了在普通 HTTP 请求之上自定义构建的拉取方案。

在您的情况下,通过发送通常的 REST 请求使两个 Node.js 实例相互通信更有意义。

另外,我会考虑只创建一个 Node.js 实例与数据库通信,并让所有其他实例通过它进行通信。这样,您将简化 Node.js 在 VM 上的部署。另外,让所有数据流过一台服务器将使调试复杂的业务逻辑变得更加容易。

使用 WebSocket 的另一个缺点是打开的连接很多。在您的情况下,您的大多数 Node.js 实例似乎大部分时间都处于休眠状态。与他们保持联系是没有意义的。

于 2013-11-10T18:38:27.087 回答