我在一个小团队中开发一个单页应用程序,该应用程序严重依赖 WebSockets 上的低延迟查询。后端在 Node.js + Redis 上运行。它需要支持成百上千的同时连接,并且请求需要在 50 - 100 毫秒(在客户端良好的网络条件下)内得到服务。我们对服务器这部分的初始实现相当满意,它按预期执行。
我们还需要通过 HTTP 提供大量静态文件。这些请求对时间不敏感。由于存储需求很大,出于成本原因,我们希望选择 HDD 阵列而不是 SSD。
是否存在磁盘 I/O 缓慢降低 Node.js 应用程序其余部分的性能(WebSocket 部分仅使用内存数据库)的风险,还是会严格影响服务器的 HTTP / 静态文件服务部分? 据我了解,具有异步特性的 Node.js 非常适合这种情况,因为它允许 WebSockets 模块在 HTTP 模块等待磁盘读/写时正常处理查询?
也许大量“等待服务”的 HTTP 请求会以某种方式阻塞服务器(毕竟,它们需要存储在某个地方,如果读/写可用,则可能无法自由轮询),我们需要考虑使用单独的 Node.js 进程来提供静态文件,甚至完全使用单独的专用服务器?
我可以想到以下几点:
- “等待服务”的 HTTP 请求将用完有限数量的并发 TCP 连接可用
- “等待服务”的 HTTP 请求也会消耗一些 RAM
- 系统文件可能应该驻留在不会忙于为静态文件提供服务的磁盘上
我们还不能在现实世界中测试这个场景,所以我会非常感谢任何有类似经历的人的来信。这可能需要我们重新考虑架构,这是我们最好早日发现的东西。