擅长:python、mysql、java
<p>请运行比一分钟(至少5-10分钟)长得多的基准测试,这样短的测试不会给你带来太多信息。使用uWSGI的carbon插件将统计信息推送到carbon/graphite服务器(您需要一个),您将有更多的调试信息。</p>
<p>当您向应用程序发送500个并发请求,但它无法处理这样的负载时,每个后端上的侦听队列将很快被填满(默认情况下是100个请求),您可能希望增加该值,但如果工作人员无法处理如此快的请求,并且侦听队列(也称为backlog)已满,则linux网络堆栈将丢弃请求并你会开始犯错误。</p>
<p>第一个基准测试表明,您可以在~42ms内处理单个请求,因此单个工作进程最多可以处理1000ms/42ms=~23个请求/秒(如果数据库和应用程序堆栈的其他部分没有随着并发性的增加而减慢)。因此,要处理500个并发请求,您至少需要500/23=21个工人(但实际上至少需要40个),您只有16个,难怪在这样的负载下它会崩溃。</p>
<p>编辑:我已经混合了并发率-至少21个工人将允许您每秒处理500个请求,而不是500个并发请求。如果你真的想处理500个并发请求,你只需要500个工人。除非你将在异步模式下运行你的应用程序,请检查uWSGI文档中的“Gevent”部分。</p>
<p>uWSGI配有强大的负载均衡器和后端自动配置(阅读“订阅服务器”和“快速路由器”下的文档)。您可以设置它,允许您根据需要热插拔新的后端,您只需在新节点上启动工作人员,他们将订阅FastRouter并开始获取请求。这是水平缩放的最佳方式。有了AWS上的后端,您可以将其自动化,以便在需要时快速启动新的后端。</p>