如果我的 Django 服务器收到的流量超出我的承受能力怎么办?

What if my Django server receives more traffic than I can afford?

请告诉我当有更多用户时会发生什么。

如果服务器挂了,流量再次下降会自动恢复吗?

环境:一个 server,使用 nginx-gunicorn。但没有使用自动修复服务。(beanstalk, k8s, ...)
交通:不知道。但是我假设服务器可以容纳10个访客,并且有100个访客

我不想覆盖太多用户。但我只想知道当可用的访问者多于服务器时会发生什么。

问题有点抽象,你可以添加更多细节吗,

  • Django 是 运行宁多个实例还是一个?如果有多个,是否有负载均衡器 (ngnix 喜欢)?
  • 流量有多少?
  • 崩溃是什么意思?如果是 'traceback' 然后取决于处理的位置和方式,如果你的意思是 后端需要很多时间来处理解决方案是 运行 他们在 不同的过程。

如果您的意图是 限制 到达 API 的请求,那么这称为节流,您可以使用此处提到的各种方法来限制它们: https://www.django-rest-framework.org/api-guide/throttling/

如果服务器在现场并且您拥有它并且您不介意让它爬行,那么您就可以自己测试一下。您可以使用 "Apache Benchmark"(通常只是 linux 命令行上的 "ab")来执行此操作。使用 ab,您可以访问具有大量并发请求的服务器,并获得有关您的操作情况的报告。您可以发送 GET、POST 等。尝试使用逐渐更严格的测试场景来击中您认为资源密集型端点之一。

您也可以同时在您自己的浏览器中 运行 您的站点,并亲眼看看当服务器负载过重时站点的确切外观。

另一方面,如果您的网站运行在共享硬件上运行,您应该更加小心。如果您对共享主机进行严格的负载测试,他们肯定会认为您是攻击者。他们可能不开心。但是,如果你注意不要太过分,ab 仍然可以对你有用,它可以让你一次模拟 10 或 20 或 200 名用户变得简单,并获得一份关于所有用户的一般体验的漂亮报告(例如平均响应时间、请求失败次数等)

TLDR:使用 Apache Benchmark ("ab") 模拟大量负载。如果使用共享主机,请不要过度。

最后,如果您担心并希望为您的情况添加一点硬件保护,那么请考虑获取一个 Cloudflare 帐户并将您的网站置于其后。它将为您进行缓存,还可以提供节流和其他负载控制功能。它的某些功能是免费的,而其他功能则价格低廉。