【问题标题】:node.js, cluster mode, log aggregation and logrotatenode.js,集群模式,日志聚合和 logrotate
【发布时间】:2014-07-15 20:41:31
【问题描述】:

Node 有一个“集群”模块,使用它可以创建一个父进程来分叉子进程。工作子进程都在同一个套接字上侦听,因此它们之间(以及 CPU 之间)的负载平衡发生在内核中。

这样的过程还必须监控死亡的孩子,然后派生新的孩子,大概有一些指数退避。如果这样的过程将所有孩子的 stdout 聚合到一个文件,将它们的 stderr 聚合到另一个文件,并支持 SIGHUP 重新打开这些文件(用于 logrotate),那也是非常好的。

如果我理解正确的话,pm2 可以做到。不过,除了 pm2 之外,是否有任何经过实战验证的模块/脚本/包可以做到这一点,还是我必须自己编写?

将节点投入生产的公司是做什么的?

【问题讨论】:

  • cluster 模块不是稳定的,它是实验性的。在生产中使用风险自负。此外,这个问题似乎与主题无关,因为这个问题似乎与编程无关
  • @RPM:我考虑先在“Unix & Linux”上发帖,但后来意识到我找到的所有文章和参考资料实际上都是编程。人们一直在构建自己的此类主模块并发布演示代码。至于实验性的:我同意,但再次看到许多提倡使用它的文章。在多核机器上运行服务器节点应用程序有哪些替代方案?

标签: node.js fork logrotate


【解决方案1】:

沃尔玛(至少在最初)决定不使用集群,而是使用单个节点进程运行每台机器。以下是他们设置的要点:https://gist.github.com/hueniverse/7686452

对于那些确实希望将节点应用程序分布在多个 CPU 上的人来说,PM2 似乎是一个受欢迎的选择。

就日志聚合和日志轮换而言,我想基本的 unix logrotate 会得到很多使用。

【讨论】:

  • 在 ec2 上,例如,单核的代价是网络带宽和内存不足。所以我可能没有“选择”并获得多核服务器。如果CPU在那里,不使用它是一种耻辱。至于 logrotate:当然,我的意思是谁编写了处理 SIGHUP 的代码——它是应用程序代码的一部分吗?这混合了业务逻辑和运营问题。
  • 老实说,我已经成功地使用upstart 运行,并让它直接执行节点来启动应用程序(但让它以非 root 用户身份运行该进程)。我可以理解在所有可用进程上运行的愿望,这就是为什么 pm2 被大量使用的原因,看到像沃尔玛这样获得大量流量的公司在单进程 VM 上运行良好,这很有趣。可能会使部署变得不那么复杂。
  • 我认为这在很大程度上还取决于您的应用程序将要做什么,因为大多数时候这些 Node 应用程序并没有做太多事情,而是在等待网络/数据库/文件 IO/等。异步特性确实对此有所帮助,可以减少(在 Node 应用程序上)扩展的需求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多