node.js - NodeJS 监控网站(工作线程?/多进程?)
问题描述
我正在做一个小的应用程序项目,它将监控一些服务器。它将基于 telnet 端口检查、ping,并且还将使用库直接连接到数据库(MSSQL、Oracle、MySQL)来检查它们的状态。
我想知道这个想法的最佳有效解决方案是什么,目前大约有 30 台服务器,它工作得非常顺利,大约需要 2.5 秒来检查所有服务器的状态(运行异步)。但是我担心将来有更多服务器可能会变得更糟。因此考虑使用诸如 Worker Threads 之类的替代方案?或一些多处理?有任何想法吗?一切都发生在内部网络中,所以我预计不会有很大的延迟。
先感谢您。
解决方案
telnet 的东西是 TCP,Node.js 在使用操作系统级别的网络事件时做得很好。与数据库的连接可能会有所不同。对于 Oracle,您可能会使用 node-oracledb。这些是依赖于 OCI 库和 Node.js 线程池的 SQL*Net 连接。线程池默认为四个线程,但您可以将它增加到每个 Node.js 进程 128 个。有关信息,请参阅此文档: https ://oracle.github.io/node-oracledb/doc/api.html#-143-connections-threads-and-parallelism
说了这么多,除了增加线程池的大小,我不建议你做任何改变。为什么要在燃烧之前扑灭大火?无需过度设计事物。鉴于您拥有的当前服务器数量,您将获得可接受的性能。
您计划在 5 年内增加多少台服务器?如果您对一半服务器和所有服务器运行状态检查,时间上有什么区别?也许您可以使用此类数据对事情的发展方向做出有根据的猜测。
添加新的时,请跟踪检查状态的总时间。是不是在滑倒?如果是这样,请查看花费时间的地方并编写有用的解决方案。
推荐阅读
- google-bigquery - 将气流与 BigQuery 和云 sdk 一起使用会出现错误“提供用户项目时必须对用户进行身份验证”
- apache-beam - 用于 SOAP 和/或 REST 的 Beam I/O 连接器 (python)
- memory - NetLogo:最后两个刻度的全局变量的值可以存储在列表中并在过程中调用吗?
- ios - 使用 CoreML 时的 DSPGraph
- reactjs - 使用动态对象创建上下文
- python - 'reticulate' r-package 导入 python 脚本时出错
- javascript - 邪恶的 PDF 不进行 AJAX / JS 调用
- php - Laravel where 子句在多个 orWhere 子句之后没有返回数据?
- android - 我创建了小部件,但它们在重新启动后加载不正确
- php - 迁移到docker desktop 2.2 生成acl错误