gpt4 book ai didi

node.js - 如何设计分布式 node.js Web 服务器

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:39 28 4
gpt4 key购买 nike

假设我需要实现一个具有大量并发用户的 Web 应用程序。我决定使用 node.js,因为它的扩展性非常好,它具有良好的性能、开源社区等等。然后,为了避免瓶颈,因为我可以在同一个事件循环中拥有大量用户,我决定使用一个集群进程以利用多核 CPU。此外,我有 3 台机器(主 + 2 台),因为我需要使用 Cassandra 处理大数据。太棒了,这意味着我有 3*n 个 node.js 进程,其中 n 是 cpu 的核心数(机器是相同的)。

好的,然后我开始研究并以以下模式结束:

  • Nginx 监听端口 80,仅用于提供静态内容(img、css、js 等)。
    将动态流量转发到 haproxy。我知道如何配置 nginx,但我仍然需要查看 haproxy,所以我会说 haproxy 正在监听端口 4000。Nginx和haproxy安装在主机(入口点)。
  • Haproxy 在 3 台机器之间进行负载平衡。它将流量转发到端口 4001,即 node.js 进程正在监听 4001。
  • 每个 node.js 都有一个监听 4001 的 n 个进程的集群。

如果我是正确的,单个 http 请求将被转发到单个 node.js 进程。

创建 session 很正常吧? session 只是一个 map ,这个 map 是一个对象,这个对象存在于 node.js 进程中。 Haproxy 将配置循环调度程序,因此可以将同一用户转发到不同的 node.js 进程。如何在所有 node.js 进程之间共享同一个 session 对象?我如何共享一个全局对象(这包括在同一台机器(node.js 集群)和网络中)?我应该如何使用 node.js 设计分布式 Web 应用程序?是否有任何模块可以简化同步任务?

最佳答案

您可以使用 memcache 或 redis 来存储 session 对象。这在重启 Node 进程的情况下非常有用(如果 session 数据存储在进程的内存中,它将丢失)。

您还可以检查 pm2功能列表,也许其中一些对您有用。

构建微服务架构将具有良好的可扩展性。

关于node.js - 如何设计分布式 node.js Web 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354998/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com