我所在的公司近期将举办一场活动,我们认为该活动产生的流量将是我们过去所处理流量的 3-4 倍,我不知道如何最好地应对如此巨大的流量突然增加。几个月前,我们举办了一场活动,当天产生了大约 15,000 次会话,我们的系统基本上崩溃了,我们的客户服务团队花了两周时间才解决所有被丢弃或未正确完成的订单造成的混乱。
从那时起,我们大幅提高了硬件规格,但如果我们能够毫无问题地处理 25,000 个会话,我会感到很惊喜。我们的云计算主机的 SQL 服务器已经达到极限,我们计划启动大量 Web 服务器。因此,考虑到我们预计会有 45,000-60,000 个会话,我想知道我是否应该开始为最坏的情况做打算。
我的想法是,我想将允许的连接数限制为一个我知道我们可以处理的较低数字,然后从那里开始增加,直到我开始看到裂缝,然后保持稳定。我考虑过通过我们的负载平衡器来做到这一点,但它似乎不支持,这意味着我必须在各个服务器上进行配置。
总结:
以下是基本问题
- 限制流量以防止崩溃是一个有效的想法吗?有哪位优秀的管理员会这样做吗?
- 负载均衡器可以限制每台服务器的连接数吗?如果不能,最好的方法是限制每台 Web 服务器的连接数吗?
- 如果我将每个 Web 服务器的连接数限制为 200,那么当负载均衡器尝试发送第 201 个连接时会发生什么?它会被丢弃,还是重定向到连接数较少的另一台服务器?
答案1
首先,我会准确找出您的服务器限制,以便您有确切的数据可供使用。Apache 制作了一个用于压力测试的基准测试工具(当然,我假设您使用的是 Apache,但其他 Web 服务器也有类似的实用程序)https://httpd.apache.org/docs/2.4/programs/ab.html
为了帮助您的系统整体发展,我建议您尽可能多地使用 CDN。这可以通过将静态元素的重复请求转移到其他服务器来大大减少总连接数。
然后,彻底优化缓存服务器端。Varnish 或许是可行的,但这很大程度上取决于你所使用的堆栈。