Миграция с Python на Go: эйфория и три часа отладки race condition
Мы долго откладывали этот рефакторинг. Наш микросервис обработки заказов, написанный на Python, начал захлёбываться под нагрузкой в чёрную пятницу. GIL делал своё чёрное дело, и масштабирование через gunicorn становилось слишком дорогим. Мы решили переписать ядро на Go.
Первые две недели были чистым восторгом. Типизация, скорость компиляции, элегантность горутин. Казалось, мы нашли серебряную пулю. Но потом наступила реальность. Нагрузка в 10k RPS выявила то, что не ловили тесты: гонку данных (race condition) при обновлении кэша сессий.
Три часа ночи. Я сижу, вглядываюсь в дампы памяти, проклинаю всё на свете. Оказалось, я забыл про мьютекс в одном, казалось бы, безобидном методе. Урок, который я вынес: Go не делает тебя автоматически хорошим программистом. Он просто даёт тебе более быстрые инструменты, чтобы выстрелить себе в ногу. Но когда ты всё же починил это и увидел, как график задержек упал с 200мс до 15мс — это чувство бесценно.
Вернуться ко всем постам
Комментарии 0
Будьте первым, кто оставит комментарий!