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来处理聊天的另一个过程
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允许每个功能由不同的团队开发,并在团队认为合适时部署)
<