Skip to content
15 / 15

Поведение Go-сервиса на пределе нагрузки: как распознать приближение стены

Сервис не деградирует линейно: до какого-то момента рост нагрузки увеличивает задержку понемногу, а затем система срывается в состояние, из которого сама не выходит. У Go-сервисов это выглядит узнаваемо и складывается из трёх усиливающих друг друга петель. Очередь работы: запросы приходят быстрее, чем обрабатываются, число горутин растёт, каждая держит память и место в планировщике. Давление на сборщик: больше живых объектов означает более частые циклы, больше процессорного времени уходит сборщику, обработка замедляется, очередь растёт ещё быстрее. Насыщение зависимостей: пул соединений исчерпан, запросы ждут, соединения держатся дольше, свободных становится меньше. Общее свойство всех трёх — положительная обратная связь, поэтому после срыва снижение нагрузки помогает не сразу. Распознаётся приближение по опережающим показателям: рост числа горутин, рост WaitCount пула и рост доли процессорного времени на сборку — все три растут до того, как вырастет задержка.

Поведение Go-сервиса на пределе нагрузки: как распознать приближение стены | JScriptiser