В интернетах вращается множество статей из разряда "Top Five Tips for <Твоя технология> in 2024", обещающих повысить, ускорить, оптимизировать.
Подобные гайды передаются из уст в уста и заботливо копируются в инфраструктуры, ведь "на прошлом месте работы это помогло!".
И не важно, что это было в 2012 году, на версии Linux kernel 2.4.x, в другом стеке и вообще не у меня, а у знакомого :)
Такой вот cargo cult.
С другой стороны, чем я хуже? У меня тоже есть парочка советов 😁
—————————————————————————————————
Nginx под капотом использует event‑driven архитектуру. Это когда у воркера есть очередь с ивентами, которую он последовательно "перемалывает".
И чем дольше занимает обработка события (например, чтение с диска), тем дольше ждут остальные в очереди.
Одно из решений — асинхронная обработка событий.
И у Nginx есть что предложить по опциям:
aio threads;
aio_write on;
Теперь вся работа воркера с диском заключается в инициировании запроса, а сам процессинг делегируется отдельным тредам.
Таким образом, воркер способен еще быстрее переключаться между ивентами, ускоряя весь пайплайн!
Пруфы
Измерим latency работы функции
ngx_process_events_and_timers (ссылка) — сколько времени уходит на обработку ивента.1. Без внедрения
aio# funclatency-bpfcc /usr/sbin/nginx:ngx_process_events_and_timers -m -d 100
Function = b'ngx_process_events_and_timers' [147018]
msecs : count distribution
0 -> 1 : 60492 |********************************|
2 -> 3 : 5567 |*** |
4 -> 7 : 3937 |** |
8 -> 15 : 1899 |* |
16 -> 31 : 429 | |
...
avg = 27 msecs, total: 3797767 msecs, count: 136964
2. С
aio:# funclatency-bpfcc /usr/sbin/nginx:ngx_process_events_and_timers -m -d 100
Function = b'ngx_process_events_and_timers' [146165]
msecs : count distribution
0 -> 1 : 103291 |*******************************|
2 -> 3 : 2581 | |
4 -> 7 : 1962 | |
8 -> 15 : 1757 | |
16 -> 31 : 0 | |
32 -> 63 : 374 | |
64 -> 127 : 49 | |
...
avg = 10 msecs, total: 3534364 msecs, count: 342992
Гистограмма показывает значительное сокращение задержек тяжелых операций, а среднее время обработки снизилось почти втрое. Неплохо!
—————————————————————————————————
P.S. Использовать на свой страх и риск, с предварительной проверкой на своей рабочей нагрузке!
Удачи!