Telegram Group & Telegram Channel
🚀 Как Duolingo ускорил микросервисы на 40% с помощью асинхронного Python 🐍

Duolingo рассказали, как им удалось значительно повысить производительность своих Python-сервисов, переведя их на async/await, и сделали это не ради хайпа, а ради экономии.

💸 Мотивация: производительность и снижение затрат
Duolingo работает с большим количеством микросервисов, обрабатывающих огромные объёмы трафика. Несмотря на высокую нагрузку, многие их Python-сервисы простаивали в ожидании I/O — например, сетевых запросов или операций с базой данных. Это означало неэффективное использование CPU, а значит — деньги на облачный хостинг тратились зря.

Асинхронный код — способ “переключаться” между задачами во время ожидания, используя CPU с большей отдачей. Именно это стало главной мотивацией: не “просто быть async”, а снизить расходы.

⚙️ Как проходила миграция
Процесс был постепенным и продуманным. Ниже ключевые шаги:

Переход не “всё или ничего”
Команда не бросалась переписывать весь сервис с нуля. Они начали с конвертации отдельных маршрутов (routes) на async def, добавляя поддержку асинхронности по частям.

Инструменты постепенно адаптировали
Библиотеки и инструменты внутри компании пришлось обновить:
свой HTTP-клиент переписали под aiohttp,
систему аутентификации сделали совместимой с async-контекстами,
логирование, трассировка и метрики обновили под async-архитектуру.

Тесты и инфраструктура
Асинхронные изменения требовали пересмотра тестов. Они внедрили поддержку pytest-asyncio и переосмыслили подход к мокам и фикстурам.

Запуск в проде — поэтапно
Сначала маршруты работали в синхронном режиме. Потом их перевели в async-режим и замерили разницу. Так удалось отловить “узкие места” до массового внедрения.

📈 Результаты: +40% производительности на инстанс
У каждого экземпляра микросервиса CPU начал использоваться эффективнее.
Снизилось среднее время ответа (latency).
Уменьшилось количество необходимых инстансов — экономия в $$$.
Код стал удобнее масштабировать и поддерживать в I/O-интенсивной среде.

Пока один запрос “ждёт”, процессор может выполнять другие задачи.

🔍 Выводы
Duolingo подчёркивает:
асинхронность не нужна “просто потому что модно”.
Но если у вас сервис с большим числом I/O-операций и важна производительность — async Python может дать реальный прирост и экономию.

Оригинальный пост

@pythonl



tg-me.com/pythonl/4731
Create:
Last Update:

🚀 Как Duolingo ускорил микросервисы на 40% с помощью асинхронного Python 🐍

Duolingo рассказали, как им удалось значительно повысить производительность своих Python-сервисов, переведя их на async/await, и сделали это не ради хайпа, а ради экономии.

💸 Мотивация: производительность и снижение затрат
Duolingo работает с большим количеством микросервисов, обрабатывающих огромные объёмы трафика. Несмотря на высокую нагрузку, многие их Python-сервисы простаивали в ожидании I/O — например, сетевых запросов или операций с базой данных. Это означало неэффективное использование CPU, а значит — деньги на облачный хостинг тратились зря.

Асинхронный код — способ “переключаться” между задачами во время ожидания, используя CPU с большей отдачей. Именно это стало главной мотивацией: не “просто быть async”, а снизить расходы.

⚙️ Как проходила миграция
Процесс был постепенным и продуманным. Ниже ключевые шаги:

Переход не “всё или ничего”
Команда не бросалась переписывать весь сервис с нуля. Они начали с конвертации отдельных маршрутов (routes) на async def, добавляя поддержку асинхронности по частям.

Инструменты постепенно адаптировали
Библиотеки и инструменты внутри компании пришлось обновить:
свой HTTP-клиент переписали под aiohttp,
систему аутентификации сделали совместимой с async-контекстами,
логирование, трассировка и метрики обновили под async-архитектуру.

Тесты и инфраструктура
Асинхронные изменения требовали пересмотра тестов. Они внедрили поддержку pytest-asyncio и переосмыслили подход к мокам и фикстурам.

Запуск в проде — поэтапно
Сначала маршруты работали в синхронном режиме. Потом их перевели в async-режим и замерили разницу. Так удалось отловить “узкие места” до массового внедрения.

📈 Результаты: +40% производительности на инстанс
У каждого экземпляра микросервиса CPU начал использоваться эффективнее.
Снизилось среднее время ответа (latency).
Уменьшилось количество необходимых инстансов — экономия в $$$.
Код стал удобнее масштабировать и поддерживать в I/O-интенсивной среде.

Пока один запрос “ждёт”, процессор может выполнять другие задачи.

🔍 Выводы
Duolingo подчёркивает:
асинхронность не нужна “просто потому что модно”.
Но если у вас сервис с большим числом I/O-операций и важна производительность — async Python может дать реальный прирост и экономию.

Оригинальный пост

@pythonl

BY Python/ django









Share with your friend now:
tg-me.com/pythonl/4731

View MORE
Open in Telegram


Python django Telegram | DID YOU KNOW?

Date: |

What is Telegram Possible Future Strategies?

Cryptoassets enthusiasts use this application for their trade activities, and they may make donations for this cause.If somehow Telegram do run out of money to sustain themselves they will probably introduce some features that will not hinder the rudimentary principle of Telegram but provide users with enhanced and enriched experience. This could be similar to features where characters can be customized in a game which directly do not affect the in-game strategies but add to the experience.

However, analysts are positive on the stock now. “We have seen a huge downside movement in the stock due to the central electricity regulatory commission’s (CERC) order that seems to be negative from 2014-15 onwards but we cannot take a linear negative view on the stock and further downside movement on the stock is unlikely. Currently stock is underpriced. Investors can bet on it for a longer horizon," said Vivek Gupta, director research at CapitalVia Global Research.

Python django from tr


Telegram Python/ django
FROM USA