Post #100
1.48K
🎁 1000 и один способ угробить продакшн из-за гонок данных в Go
Наткнулись и перевели большую и очень интересную статью про гонки данных в Go от человека, который годами находит и чинит их в реальных системах.
Автор показывает не учебные примеры, а живые кейсы из продакшена:
• Неявный захват внешних переменных в замыканиях, где один пропущенный
•
• Мьютексы, которые формально используются корректно, но живут меньше, чем данные, которые должны защищать
• И стандартная библиотека, где
Race detector сильно помогает, но он не всесилен: часть гонок проходит мимо, а симптомы могут проявляться только под нагрузкой или в CI.
Интересна и более общая мысль статьи: если такие ошибки регулярно допускают опытные инженеры, значит проблема не только в внимательности. Неявные замыкания, мелкое копирование структур с ссылочными полями, отсутствие встроенного
@go_for_devs
Наткнулись и перевели большую и очень интересную статью про гонки данных в Go от человека, который годами находит и чинит их в реальных системах.
Автор показывает не учебные примеры, а живые кейсы из продакшена:
• Неявный захват внешних переменных в замыканиях, где один пропущенный
: превращает локальную переменную в общую•
http.Client, который в документации объявлен потокобезопасным, но внезапно ломается, если конкурентно менять его поля• Мьютексы, которые формально используются корректно, но живут меньше, чем данные, которые должны защищать
• И стандартная библиотека, где
map, bytes.Buffer и другие типы вовсе не рассчитаны на конкурентный доступ, хотя это не всегда очевидно из APIRace detector сильно помогает, но он не всесилен: часть гонок проходит мимо, а симптомы могут проявляться только под нагрузкой или в CI.
Интересна и более общая мысль статьи: если такие ошибки регулярно допускают опытные инженеры, значит проблема не только в внимательности. Неявные замыкания, мелкое копирование структур с ссылочными полями, отсутствие встроенного
Clone(), слабая документация по потокобезопасности — всё это увеличивает вероятность гонок, даже в аккуратно написанном коде.Если язык и экосистема делают гонки данных слишком лёгкими, рано или поздно за это заплатит продакшн.
@go_for_devs
- 👍 8
- ❤ 3
- 🔥 3
- 🤔 1
- 🤬 1
- 😢 1












