SYSTEM ATLASЗагрузка материала

Проблема грохочущего стада

Thundering Herd

Одно событие одновременно будит множество ожидающих процессов или клиентов, и они начинают конкурировать за один ресурс.

Простыми словами

Много процессов ждут одно событие - освобождение блокировки, появление соединения или восстановление сервиса. Когда событие наступает, просыпаются все, хотя продолжить работу сможет лишь один или немногие. Это похоже на толпу у одной открывшейся кассы. Лишние пробуждения расходуют процессор, создают всплеск запросов и могут снова перегрузить ресурс.

Формальное определение

Thundering herd - режим конкуренции, при котором единичное изменение готовности пробуждает или активирует существенно больше ожидающих участников, чем ресурс способен обслужить одновременно.

Механизм действия

Общий сигнал распространяется всем ожидающим. Они почти синхронно выполняют проверку, захват или повторный запрос; большинство проигрывает гонку и снова засыпает либо повторяет попытку, создавая дополнительную нагрузку.

Пример в работе

Нерабочий подход

В задаче «Backend» сразу применить привычное решение и назвать происходящее «Проблема грохочущего стада», не проверив, действительно ли работает этот механизм. Так можно улучшить один симптом и пропустить основную причину.

Системный подход

Использовать «Проблема грохочущего стада» как гипотезу: сначала определить границы ситуации и исходное состояние, затем менять только то, что связано с проверяемым механизмом, и смотреть на результат.

Ограничения

Механизм EPOLLEXCLUSIVE уменьшает пробуждение лишних ожидающих потоков, но не устраняет все формы стадного эффекта на других уровнях системы.

Источник

Linux man-pages project, “epoll_ctl(2) — EPOLLEXCLUSIVE”, current.

Первоисточник