
Почему ваш Go‑сервис ломается под 1000 RPS и как найти узкое место за полчаса
badcasedaily1 32 минуты назад Почему ваш Go‑сервис ломается под 1000 RPS и как найти узкое место за полчаса Средний 6 мин 1.1K Блог компании OTUS Go * Программирование * Туториал Go‑сервис на малых нагрузках работает...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. badcasedaily1 32 минуты назад Почему ваш Go‑сервис ломается под 1000 RPS и как найти узкое место за полчаса Средний 6 мин 1. 1K Блог компании OTUS Go * Программирование * Туториал Go‑сервис на малых нагрузках работает идеально. Горутины дешёвые, GC быстрый, net/http из коробки тянет приличный трафик.
Разработчик прогоняет функциональные тесты, видит зелёное, деплоит. Приходят 1000 RPS, и latency p99 взлетает с 50ms до 5 секунд, в логах начинают мелькать таймауты, а в Grafana рисуется красивая кривая деградации. Инструменты: vegeta и wrk2Для нагрузочного тестирования Go‑сервисов используем два инструмента.
Технические детали
vegeta написан на Go, понимает гошные паттерны, выводит результаты в удобном формате:go install github. com/tsenart/vegeta@latest echo "GET | \ vegeta attack -rate=500/s -duration=30s | \ vegeta reportwrk2 — форк wrk с фиксированной частотой запросов. Обычный wrk отправляет запросы настолько быстро, насколько может: если сервер замедлился, wrk тоже замедляется, и вы не видите реальную деградацию.
wrk2 продолжает слать с заданной частотой, и если сервер не успевает, это видно по latency:wrk2 -t2 -c10 -d30s -R1000 с малого: 100 RPS, потом 300, потом 500, потом 1000. На каждом шаге смотрите на три вещи. Что смотреть в результатахПосле прогона vegeta выдаёт что‑то такое:Requests 30000, 1000.
7ms Status Codes 200:29847 503:112 0:41p50 vs p99. p50 = 12ms, p99 = 2134ms. Медианный запрос быстрый, но каждый сотый обрабатывается в 175 раз дольше.
Отраслевые последствия
При 1000 RPS это 10 человек в секунду, которые ждут по две секунды. Просили 1000 RPS, throughput 987. 13 запросов в секунду теряются.
112 ошибок 503, 41 ошибка с кодом 0 (таймаут, сервер не ответил). 5% ошибок за 30 секунд — тысячи в час на реальном трафике. Разрыв между p50 и p99 — главный индикатор.
Если p50 и p99 близки, сервис стабилен. Если p99 в десятки раз больше, где‑то есть ресурс, который при конкурентном доступе деградирует. Причина 1: пул коннектов к базе данныхПо дефолту sql.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





