Gunicorn 如何为 django 处理每秒数十万个请求?

Ben*_*han 14 django multithreading gunicorn

从文档中 -有多少工人

\n

不要根据您期望的客户数量来调整员工数量。Gunicorn 应该只需要 4-12 个工作进程即可每秒处理数百或数千个请求。

\n

一般来说,我们建议 (2 x $num_cores) + 1 作为开始的工作人员数量。

\n

线程中

\n

用于处理请求的工作线程的数量。

\n

使用指定数量的线程运行每个工作线程。

\n

正整数,通常在 2-4 x $(NUM_CORES) 范围内。您\xe2\x80\x99 需要稍微改变一下,以找到最适合您的特定应用程序\xe2\x80\x99s 工作负载的选项。

\n

现在的问题是,没有多少线程和工作线程可以每秒处理数百或数千个请求?

\n

假设我有一台双核机器,我设置了 5 个工作线程和 8 个线程。我可以满足 40 个并发请求吗?

\n

如果我要处理数百或数千个请求,我将需要一百个核心?

\n

这行代码很难理解:

\n
\n

Gunicorn 每秒只需要 4-12 个工作进程即可处理数百或\n数千个请求。

\n
\n

AKX*_*AKX 14

现在的问题是,没有多少线程和工作线程可以每秒处理数百或数千个请求?假设我有一台双核机器,我设置了 5 个工作线程和 8 个线程。我可以满足 40 个并发请求吗?

是的,有 5 个工作进程,每个进程有 8 个线程,可以服务 40 个并发请求。另一个问题是,它们在双核机器上的运行速度有多快。

如果我要处理数百或数千个请求,我将需要一百个核心?

不完全的。每秒请求数与“并发请求数”不同。

如果每个请求恰好需要 1 毫秒来处理,那么单个工作线程可以提供 1000 RPS。如果每个请求需要 10 毫秒,则单个工作人员会发出 100 RPS。

如果某些请求需要 10 毫秒,而其他请求最多需要 5 秒,那么您将需要多个并发工作线程,因此需要 5 秒的一个请求不会“占用”您的所有服务能力。