Node.js RPC、IPC或其他什么?NodeJS中的多进程体系结构

Node.js RPC、IPC或其他什么?NodeJS中的多进程体系结构,node.js,ipc,rpc,Node.js,Ipc,Rpc,我正在构思一个应用程序,它使用几个较小的程序来支持它。粗略的图像是: 一个进程(可能会创建几个工作进程)处理HTTP和WS 处理通知队列(发送电子邮件、推送等)的过程 通过JSON-RPC或其他方式公开API来处理聊天的另一个过程 我希望分割我的进程,以便更好地分配资源,如果其中一个进程由于错误而退出,那么它可以由主进程重新启动。然而,似乎没有任何库或框架真正做到这一点——然而,我怀疑每个人都只是创建了一个完整的进程来处理所有事情,特别是在多核/线程maschine上 虽然我知道我基本上可以

我正在构思一个应用程序,它使用几个较小的程序来支持它。粗略的图像是:

  • 一个进程(可能会创建几个工作进程)处理HTTP和WS
  • 处理通知队列(发送电子邮件、推送等)的过程
  • 通过JSON-RPC或其他方式公开API来处理聊天的另一个过程
我希望分割我的进程,以便更好地分配资源,如果其中一个进程由于错误而退出,那么它可以由主进程重新启动。然而,似乎没有任何库或框架真正做到这一点——然而,我怀疑每个人都只是创建了一个完整的进程来处理所有事情,特别是在多核/线程maschine上

虽然我知道我基本上可以使用
child\u process
生成子进程,将它们与主进程的RPC端口通信,然后使用JSON-RPC,但我想知道是否有更有效的方法来实现这一点

有什么想法吗?提前谢谢

然而,似乎没有任何库或框架真正做到这一点

它们有很多,只是它们不是Node.JS简单的程序。也就是说,队列需要一些高性能的持久性,这可能会涉及另一个进程

单独的couplig是有意义的,但您需要持久的消息传递体系结构——这在大型系统中是40年左右的完全标准

我建议你考虑一下你想进入哪个平台,然后按照网站规则做一些R&D。在这种情况下,您的平台选择太简单,没有意义。消息传递是必须的(这样,您可以在电子邮件服务关闭时对电子邮件进行排队)

然而,似乎没有任何库或框架真正做到这一点

它们有很多,只是它们不是Node.JS简单的程序。也就是说,队列需要一些高性能的持久性,这可能会涉及另一个进程

单独的couplig是有意义的,但您需要持久的消息传递体系结构——这在大型系统中是40年左右的完全标准


我建议你考虑一下你想进入哪个平台,然后按照网站规则做一些R&D。在这种情况下,您的平台选择太简单,没有意义。消息传递是必须的(这样,您可以在电子邮件服务关闭时对电子邮件进行排队)。

这听起来很像微服务体系结构。虽然js中有构建微服务的框架,比如很多微服务实现都是语言无关的。事实上,亚马逊是最古老的微服务成功案例之一,它没有为亚马逊网站使用单一的编程语言或平台

微服务体系结构的核心是HTTP反向代理前端。这可以是Apache2或Nginx,也可以是更专业的东西,例如。当Web服务器以这种方式配置为代理微服务时,它们通常被称为“应用程序网关”

传统的体系结构是使用前端模板呈现器(例如,一个简单的PHP网站),从其他服务中获取数据,这些服务可以用任何语言编写:

                                                           ┌───────────┐
                                                         .-│ Service 1 │
                         ┌─────────────┐                /  └───────────┘
┌─────────┐              │ Web Server/ │ ┌───────────┐-'   ┌───────────┐
│ Browser │-- internet --│ Load        │-│ Front-end │-----│ Service 2 │
└─────────┘              │ Balancer    │ └───────────┘-.   └───────────┘
                         └─────────────┘                \  ┌───────────┐
                HTTP                                     '-│ Service 3 │
                                  HTTP/FastCGI             └───────────┘
                                                    HTTP/RPC/REST
                                                  Kafka/RabbitMQ etc.
随着CORS的出现,Facebook等服务越来越多地将大量后端服务直接暴露在网页上:

                            ┌───────────────────┐
┌─────────┐              ---│ Static web server │
│ Browser │-- internet -'   └───────────────────┘ ┌───────────┐
└─────────┘            \         ┌─────────────┐  │ Service 1 │ services
                        \        │ Web Server/ │--└───────────┘ on same
React/Angular/Vue        \-------│ Load        │  ┌───────────┐ server
  front-end               \      │ Balancer    │--│ Service 2 │
                           \     └─────────────┘  └───────────┘
                            \                  HTTP
                  HTTP+CORS  \
                   (ajax)     \               ┌───────────┐ service on
                               '--------------│ Service 3 │ separate
                                              └───────────┘ server
为此,网页和服务之间的通信仅限于HTTP和Websocket,因此后端服务需要是HTTP服务(REST/json RPC/SOAP等)

服务监视和重启通常使用专用的服务监视和重启机制来完成。对于node.js来说,一个流行的崩溃检测和重启软件是或是其他通用软件,例如。事实上,并不要求所有服务都使用相同的重启系统(例如,Amazon允许每个功能由不同的团队开发,并在团队认为合适时部署)


如果仔细设计会话系统(粘性会话、JWT令牌等),只需运行更多服务器即可扩展后端。例如,如果聊天占用大量资源,只需运行3或4台聊天服务器,同时只运行一台前端服务器。

这听起来很像微服务架构。虽然js中有构建微服务的框架,比如很多微服务实现都是语言无关的。事实上,亚马逊是最古老的微服务成功案例之一,它没有为亚马逊网站使用单一的编程语言或平台

微服务体系结构的核心是HTTP反向代理前端。这可以是Apache2或Nginx,也可以是更专业的东西,例如。当Web服务器以这种方式配置为代理微服务时,它们通常被称为“应用程序网关”

传统的体系结构是使用前端模板呈现器(例如,一个简单的PHP网站),从其他服务中获取数据,这些服务可以用任何语言编写:

                                                           ┌───────────┐
                                                         .-│ Service 1 │
                         ┌─────────────┐                /  └───────────┘
┌─────────┐              │ Web Server/ │ ┌───────────┐-'   ┌───────────┐
│ Browser │-- internet --│ Load        │-│ Front-end │-----│ Service 2 │
└─────────┘              │ Balancer    │ └───────────┘-.   └───────────┘
                         └─────────────┘                \  ┌───────────┐
                HTTP                                     '-│ Service 3 │
                                  HTTP/FastCGI             └───────────┘
                                                    HTTP/RPC/REST
                                                  Kafka/RabbitMQ etc.
随着CORS的出现,Facebook等服务越来越多地将大量后端服务直接暴露在网页上:

                            ┌───────────────────┐
┌─────────┐              ---│ Static web server │
│ Browser │-- internet -'   └───────────────────┘ ┌───────────┐
└─────────┘            \         ┌─────────────┐  │ Service 1 │ services
                        \        │ Web Server/ │--└───────────┘ on same
React/Angular/Vue        \-------│ Load        │  ┌───────────┐ server
  front-end               \      │ Balancer    │--│ Service 2 │
                           \     └─────────────┘  └───────────┘
                            \                  HTTP
                  HTTP+CORS  \
                   (ajax)     \               ┌───────────┐ service on
                               '--------------│ Service 3 │ separate
                                              └───────────┘ server
为此,网页和服务之间的通信仅限于HTTP和Websocket,因此后端服务需要是HTTP服务(REST/json RPC/SOAP等)

服务监视和重启通常使用专用的服务监视和重启机制来完成。对于node.js来说,一个流行的崩溃检测和重启软件是或是其他通用软件,例如。事实上,并不要求所有服务都使用相同的重启系统(例如,Amazon允许每个功能由不同的团队开发,并在团队认为合适时部署)

<