nginx / node.js / postgres是一个非常可扩展的架构吗?

时间:2011-11-17 13:20:28

标签: postgresql node.js nginx scalability

我有一个运行的应用程序:

  • nginx的一个实例作为前端(提供静态文件)
  • 后端的node.js应用程序集群(使用cluster和expressjs模块)
  • Postgres的一个实例作为DB

如果应用程序需要可扩展性(这仅适用于HTTP / REST请求),此架构是否足够:

  • 每秒500个请求(每个请求只从DB中获取数据,这些数据可能是几个ko,并且在获取后不需要大量计算)。

  • 同时连接20000个用户

哪里可能成为瓶颈?

2 个答案:

答案 0 :(得分:4)

对于指定的负载(500个简单请求/秒),我不会认为这会是一个太大的问题。我的猜测是,甚至不需要一组节点实例。

但是,由于您只有一个实例,因此在扩展时,这很可能是您的瓶颈。您还遇到了额外的问题,这将是您的单点故障(我不熟悉Postgres,这里正在使用Oracle集群和数据保护,这意味着我们有一个备份数据库集群来缓解这种情况)

如果您不需要关系数据模型,那么MongoDB可能是一个更具伸缩性的选择。

要记住的另一件事是您的网络基础设施。如果要添加群集/节点,请确保网络可以处理分布式负载。

最后一件事:通常,无法确定架构上的应用程序是否可以在没有性能/音量/压力测试的情况下处理特定负载,因此答案是响亮的“可能”。

答案 1 :(得分:0)

你应该可以500 ops / sec。重新设计,如果你期望进入千分之一秒/秒。

在不了解您的更多数据的情况下,磁盘I / O最有可能成为您的瓶颈。如果你是来自库存硬件硬盘上的I / O'ing,那么你的PostgreSQL数据库会以大约10k ops / sec的速度出现,如果你在SQL命令上进行JOIN,速度会慢下来。这也会减慢您尝试访问单个驱动器的并发用户数量。你的驱动器寻找时间会变得很糟糕,因为你会经常随机访问驱动器。

您应该研究数据的结构以及是否需要关系数据库(您是否需要进行JOIN?)。可能是一种noSQL解决方案。始终尝试使您的磁盘I / O尽可能分布式和顺序化。