tgoop.com/Python_Community_ru/2550
Last Update:
🚀 Как Duolingo удалось увеличить производительность микросервисов на 40% с помощью асинхронного Python 🐍⚡
Duolingo поделилась тем, как им удалось существенно улучшить эффективность своих Python-сервисов, перейдя на использование async/await, и сделали это не ради моды, а для снижения затрат.
💸 Мотивация: повышение производительности и уменьшение расходов
Duolingo управляет множеством микросервисов, которые обрабатывают большие объемы трафика. Несмотря на высокую нагрузку, многие их Python-сервисы простаивали в ожидании ввода-вывода — например, при сетевых запросах или взаимодействии с базой данных. Это приводило к неэффективному использованию процессора, и, соответственно, деньги на облачный хостинг расходовались впустую.
Асинхронный код — это способ “переключаться” между задачами во время ожидания, что позволяет более эффективно использовать процессор. Именно это и стало главной мотивацией: не просто стать асинхронными, а сократить расходы.
⚙️ Как проходила миграция
Процесс был постепенным и тщательно продуманным. Вот ключевые шаги:
▪ Переход не “всё или ничего”
Команда не начала с переписывания всего сервиса с нуля. Они начали с изменения отдельных маршрутов на async def, добавляя асинхронность по частям.
▪ Постепенная адаптация инструментов
Пришлось обновить библиотеки и инструменты внутри компании:
▪ HTTP-клиент переписали с использованием aiohttp,
▪ систему аутентификации адаптировали к async-контекстам,
▪ обновили логирование, трассировку и метрики для работы с async-архитектурой.
▪ Тестирование и инфраструктура
Асинхронные изменения потребовали пересмотра тестов. Они внедрили поддержку pytest-asyncio и переосмыслили подход к мокам и фикстурам.
▪ Постепенный запуск в продакшене
Сначала маршруты работали в синхронном режиме. Затем их перевели в асинхронный режим и замерили разницу. Это помогло выявить “узкие места” до массового внедрения.
📈 Результаты: +40% производительности на экземпляр
▪ Эффективнее стал использоваться процессор у каждого экземпляра микросервиса.
▪ Уменьшилось среднее время ответа (latency).
▪ Снизилось количество необходимых экземпляров — экономия в деньгах.
▪ Код стал легче масштабировать и поддерживать в среде с высокой интенсивностью ввода-вывода.
Пока один запрос “ждет”, процессор может выполнять другие задачи.
🔍 Выводы
Duolingo подчеркивает:
асинхронность не нужна “просто потому что это модно”.
Но если у вас сервис с большим числом операций ввода-вывода и важна производительность — асинхронный Python может обеспечить реальный прирост и экономию.
➡ Оригинальный пост (https://blog.duolingo.com/async-python-migration/)
@Python_Community_ru
BY Python Community

Share with your friend now:
tgoop.com/Python_Community_ru/2550