我有一个运行的应用程序:
如果应用程序需要可扩展性(这仅适用于HTTP / REST请求),此架构是否足够:
每秒500个请求(每个请求只从DB中获取数据,这些数据可能是几个ko,并且在获取后不需要大量计算)。
同时连接20000个用户
哪里可能成为瓶颈?
答案 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尽可能分布式和顺序化。