505просмотров
24 октября 2025 г.
Score: 556
Сегодня поговорим про закон Литтла (Little’s Law).
И совсем немножко про математику. Формула простая: L = λ × W
L — среднее количество элементов в системе (например запросов в обработке или элементов в очереди)
λ — средняя скорость поступления элементов (запросов в секунду)
W — среднее время, которое элемент проводит в системе
Формула — проще некуда, но очень полезная. Сколько запросов обрабатывается одновременно?
Дано: λ = 100 req/s, W = 200ms
L = 100 × 0.2 = 20 запросов в системе одновременно
Теперь вы можете посчитать сколько к примеру на сервере будет съедено памяти и сколько используется коннектов к БД Какая средняя задержка при заданной нагрузке?
Дано: λ = 50 req/s, L = 5 (лимит воркеров/соединений)
W = L/λ = 5/50 = 0.1s = 100ms - средняя задержка. При условии что воркеры справляются можете писать в SLA 100ms. (но сначала дочитайте) Какая пропускная способность у системы?
Дано: W = 300ms, L = 10 (лимит воркеров/соединений)
λ = L/W = 10/0.3 = 33.3 req/s максимум. Всего за минуту мы с вами насчитали вон сколько полезного, но закон Литтла сам по себе не учитывает насколько загружена система. Если поверх него добавить простейшую модель очереди (M/M/1), получится интересная зависимость. Детали опущу, много математики, сразу дам выводы.
При утилизации в 50% средняя задержка вырастет в 2 раза от базовой.
75% — в 4 раза.
90% — в 10 раз.
99% — в 100 раз.
При 100% загрузке — очередь неограниченно растет.
И это при условии идеализированной модели. В реальности и средняя и p95/p99 растет сильно быстрее. Теперь вы знаете как посчитать нагрузку и почему нужно оставлять запас по утилизации серверов. (и заложите правильный запас для SLA)