В разборе сбоя автор сообщает, что после обновления драйвера Go для PostgreSQL каждый запрос из нескольких частей задерживался на лишние 40 мс. Новая версия драйвера перестала задавать TCP_NODELAY, настройку для отправки небольших пакетов без ожидания.

Откат версии сервиса сразу сократил задержку с 4,2 с до 35 мс. Команда вернула настройку при создании соединений и испытала исправление в тестовой среде.

По замерам автора, после исправления 99% запросов укладывались в 18,2 мс вместо 4 120 мс.

Проверка утверждений:

  • Автор разбора связал лишние 40 мс ожидания в запросах к PostgreSQL из нескольких частей с обновлением драйвера Go, который перестал задавать TCP_NODELAY. (подтверждено самой публикацией: доказательство; «In our v2.14.0 release, we upgraded our Go database driver. The new version removed a low-level socket initializer that previously explicitly set TCP_NODELAY (which disables Nagle’s algorithm) on all outgoing connection sockets. Because TCP_NODELAY was no longer set, every multi-part database request (e.g., a prepared statement execution followed by parameters) was incurring a forced 40ms penalty over TCP.»)
  • После отката версии сервиса задержка сразу снизилась с 4,2 с до 35 мс. (подтверждено самой публикацией: доказательство; «*02:14 UTC: PagerDuty fires. P99 latency on /v1/checkout spikes to 4.2s. *02:22 UTC: We roll back to v2.13.9. Latency immediately drops back to 35ms.»)
  • Команда вернула настройку при создании соединений и испытала исправление в тестовой среде. (подтверждено самой публикацией: доказательство; «We added an explicit socket control callback back into the driver’s connection initialization block: Benchmarks: Before vs. After After deploying the socket fix to staging under a simulated load of 5,000 req/sec:»)
  • По замерам автора в тестовой среде после исправления 99% запросов укладывались в 18,2 мс вместо 4 120 мс. (подтверждено самой публикацией: доказательство; «After deploying the socket fix to staging under a simulated load of 5,000 req/sec: *Metric: P50 Latency -v2.14.0 (Nagle Enabled): 42.1 ms -v2.14.1 (TCP_NODELAY Fixed): 2.4 ms *Metric: P99 Latency -v2.14.0 (Nagle Enabled): 4,120.0 ms -v2.14.1 (TCP_NODELAY Fixed): 18.2 ms»)

Публикации:

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

оценка 54,1 из 100 · тип: инцидент