Один запрос за раз проходит тесты. Под нагрузкой меняется порядок операций, и код, который годами работал, внезапно падает. Например, общую
map в Go безопасно читать из нескольких горутин, но запись без синхронизации может вызвать гонку данных или ошибку во время выполнения.В разборе Бенджамина Кейна есть другой сценарий: сообщения приходят по порядку, но разные обработчики завершают второе раньше первого. Если операции зависят друг от друга, их нужно обрабатывать последовательно.
Практический набор для Go: запускать тесты с
-race, подключить статический анализ и нагружать систему множеством одновременных запросов. С детектором гонок цифрам производительности доверять нельзя, зато редкий сбой проще поймать. Такие проверки стоит встроить в сборку, чтобы они не зависели от памяти разработчика.
