我有一个正在运行的应用程序:
- 一个 nginx 实例作为前端(提供静态文件)
- 后端的 node.js 应用程序集群(使用 cluster 和 expressjs 模块)
- 一个 Postgres 实例作为数据库
如果应用程序需要可扩展性(这仅适用于 HTTP / REST 请求),那么这种架构是否足够:
每秒 500 个请求(每个请求仅从数据库中获取数据,这些数据可能有几个 ko,并且获取后不需要进行大量计算)。
20000个用户同时连接
瓶颈可能在哪里?
答案1
nginx 的一个实例每秒可以轻松处理数千个小型静态文件。
应用层的可扩展性更多地取决于您的应用程序而不是 node.js - 如果它是在本地存储文件/会话数据/等,事情可能会变得棘手,但如果您将所有存储放在像数据库这样的中心位置(或者可能是像 Redis 这样用于存储会话数据的东西),那么通过添加更多节点来扩展应用层应该很容易。
数据库几乎总是最难扩展的;如果您主要进行读取操作,那么 postgres 9.1 有一些非常好的热备用功能,允许您拥有一个读/写主数据库和几个可以处理大部分读取工作的只读从属数据库。
扩展一个写入密集型数据库系统可能是最难的可扩展性问题;当一个超级强大的数据库服务器无法跟上时,大多数人最终都会完全重新考虑和重写他们的应用程序(除非从一开始就计划好了,但计划多个主数据库将使很多事情变得更难、更慢,而且很少需要——据我所知,stackoverflow 网络都在一个数据库上)