这听起来很像微服务架构。虽然 js 中有一些框架可以构建微服务,例如moleculer,但许多微服务实现与语言无关。事实上,亚马逊是最古老的微服务成功案例之一,它并没有为 Amazon.com 网站使用单一的编程语言或平台。 It is a mix of multiple servers in PHP, Java, Perl and even some C++.
微服务架构的核心是 HTTP 反向代理前端。这可以是 Apache2 或 Nginx,也可以是更专业的东西,例如 HAProxy。当网络服务器以这种方式配置为代理微服务时,它们通常被称为“应用程序网关”。
传统上,该架构是拥有前端模板渲染器(例如,一个简单的 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,一个流行的崩溃检测和重启软件是 PM2 或 forever 但是还有其他通用软件,例如 monit。事实上,并不要求所有服务都使用相同的重启系统(例如,亚马逊允许每个功能由不同的团队开发并按照团队认为合适的方式进行部署)。
如果您仔细设计会话系统(粘性会话、JWT 令牌等),您可以通过运行更多服务器来扩展后端。例如,如果聊天占用大量资源,只需运行 3 或 4 个聊天服务器,而只运行一个前端服务器。