Estudo de caso · Stack

Como o Duolingo saiu de um back-end em Python para 500 serviços na AWS

O Duolingo ensina idiomas, matemática e música para um público enorme com apps nativos e pelo site. O back-end começou em Python e virou mais de 500 serviços na AWS escritos em Python, Kotlin e Java, enquanto os apps são nativos em Swift e Kotlin e usam IA da OpenAI.
Copiar stackduolingo.com App para aprender idiomas · Estados Unidos · fundada em 2011

A stack da Duolingo

Abrir no montador

Linguagem

  • Pythonblog.duolingo.com

    Linguagem original da maior parte do back-end e ainda central em muitos serviços.

Hospedagem

  • AWSblog.duolingo.com

    Nuvem onde roda o back-end do Duolingo.

  • Kubernetesinfoq.com

    O Amazon EKS está virando a plataforma de todos os serviços de back-end, no lugar do ECS.

    Por quê: Eles queriam deploys blue-green e canary, ambientes por pull request, IPv6 e mais ferramentas abertas.

Banco de dados

  • DynamoDBblog.duolingo.com

    Guarda as notas de cada aluno por curso para o sistema de personalização Birdbrain.

    Por quê: Guardar as notas de cada curso numa linha só reduz ao mínimo a latência da API.

  • Amazon Aurorablog.duolingo.com

    Banco relacional, com um deles passado para o Aurora I/O-Optimized para cortar custos.

Framework de celular

  • Kotlinblog.duolingo.com

    Linguagem do app de Android e linguagem oficial de back-end ao lado de Python e Java.

    Por quê: Ele é bem menos verboso que o Java e a proteção contra valores nulos evita travamentos para os usuários.

  • Swiftcareers.duolingo.com

    Linguagem principal do app nativo para iOS.

Animação

  • Riveblog.duolingo.com

    Animações interativas dos personagens e do curso de matemática em todas as plataformas.

    Por quê: Ele funciona em todas as plataformas e passa parte do trabalho de animação dos engenheiros para os designers.

Busca de dados

Framework de servidor

  • Flaskblog.duolingo.com

    Framework web dos serviços Python síncronos, com Quart nos assíncronos.

  • Scalablog.duolingo.com

    Linguagem do Session Generator, o motor que monta as lições.

    Por quê: O Python era lento demais, não servia bem para cache em memória com threads e a tipagem dinâmica deixava bugs chegarem à produção.

Arquivos

Modelo de IA

  • OpenAIblog.duolingo.com

    O GPT-4 sustenta os recursos do Duolingo Max, como Explain My Answer e Roleplay.

Como montaram

Python primeiro, Scala onde a velocidade importava

Como quase todo o back-end do Duolingo, o Session Generator, o motor que monta cada lição, foi escrito primeiro em Python. Em 2017 o time reescreveu tudo em Scala. Eles apontaram três problemas: o Python era bem mais lento, não lidava bem com threads e por isso limitava o cache em memória, e a tipagem dinâmica deixava muitos bugs chegarem à produção.

A reescrita derrubou a latência média de 750 ms para 14 ms e levou a disponibilidade de 99,9% para 100% nos primeiros meses.

Fontes:blog.duolingo.com

500 serviços e a mudança para Kubernetes

O Duolingo tem hoje mais de 500 serviços de back-end, cuidados por 30 times de produto, todos na AWS. O Python continua no centro, e o Kotlin virou linguagem oficial de back-end ao lado de Python e Java, o que deu pouco trabalho porque o time reaproveitou código Java e as ferramentas de Kotlin do Android.

A maioria dos serviços rodava no AWS ECS, e o time de plataforma está levando tudo para o Amazon EKS. Eles queriam deploys blue-green e canary, um ambiente temporário para cada pull request, suporte a IPv6 e mais ferramentas abertas como Argo CD, Karpenter e KEDA. Em 2026 a mudança ainda estava em andamento, e todo serviço novo já nasce no EKS.

Fontes:infoq.com blog.duolingo.com

Apps nativos, com Rive no que se mexe

O Duolingo faz os apps de forma nativa, Swift no iOS e Kotlin no Android. O app de Android ficou 100% em Kotlin em 2020: código menos verboso, menos travamentos por valor nulo e desenvolvedores bem mais contentes. Converter um arquivo de Java cortava uns 30% do tamanho, e o código ficou do mesmo tamanho por dois anos mesmo com o dobro de gente mexendo.

Para animações o time usa o Rive. Quando o curso de matemática saiu do iOS para o Android, os visuais em Swift não davam para reaproveitar, então o Rive virou a solução para todas as plataformas e passou parte do trabalho dos engenheiros para os designers.

Fontes:blog.duolingo.com blog.duolingo.com

De olho em cada dólar da nuvem

Em 2024 o Duolingo cortou 20% do gasto com nuvem. O time comprou capacidade reservada com base no uso de EC2, RDS e ElastiCache, passou um banco para o Aurora I/O-Optimized e economizou centenas de milhares de dólares por ano, colocou regras de expiração no DynamoDB e no S3 e enxugou logs exagerados no CloudWatch.

Em 2025 eles testaram Python assíncrono em vez de reescrever um serviço em Go. A versão assíncrona aguentou uns 40% mais requisições por máquina, cerca de 30% menos gasto com EC2 por serviço migrado, custando bem menos que uma reescrita.

Fontes:blog.duolingo.com blog.duolingo.com

GPT-4 dentro das lições

Em março de 2023 o Duolingo lançou o Duolingo Max, um plano acima do Super feito com o GPT-4 da OpenAI. Os primeiros recursos, Explain My Answer e Roleplay, saíram depois de meses de trabalho junto com a OpenAI para ajustar a tecnologia.

Fontes:blog.duolingo.com

Também detectado no site

Achado na página inicial com as regras abertas do Wappalyzer (HTML, scripts e cabeçalhos). Mostra o que roda no navegador, não o backend inteiro.

  • Amazon CloudFront
  • Amazon Web Services
  • Envoy
  • Google Tag Manager
  • OneTrust
  • React