Equipamentos de telecomunicações precisam funcionar por anos sem parar, mesmo durante atualizações. Em 1986, Joe Armstrong e colegas na Ericsson começaram a construir uma linguagem para esse mundo: Erlang, com processos leves, passagem de mensagens e substituição de código a quente em vez de memória compartilhada e threads.

A prova principal foi o comutador ATM AXD301, anunciado em 1998. Ele executa Erlang distribuído em hardware duplicado, escala de 10 a 160 Gbit/s e foi projetado para que hardware e software possam ser alterados sem interromper o tráfego. Em 2001, continha 1,13 milhão de linhas de Erlang em 2.248 módulos e alcançou confiabilidade observada de nove noves, 99,9999999%.

A filosofia de deixar falhar (let-it-crash) do Erlang, com árvores de supervisores que reiniciam processos com falha, também foi um ganho de produtividade: o histórico do HOPL relata um aumento de quatro vezes na produtividade dos desenvolvedores no projeto. No mesmo ano em que o AXD301 foi lançado, o Erlang foi proibido para novos produtos da Ericsson; em dezembro de 1998, foi lançado como código aberto.

Deixar pequenos processos falharem; supervisores os reiniciam

O isolamento de processos impede que uma falha derrube o sistema

Supervisores reiniciam falhas automaticamente, sem intervenção humana

A atualização de código a quente elimina o tempo de inatividade como restrição de implantação

O modelo de pequenos processos acomoda milhares de chamadas simultâneas a baixo custo

Para sistemas que nunca podem parar, inverta a estratégia de erros: espere falhas, isole-as em pequenos processos e torne a recuperação automática, de modo que o sistema seja construído para sobreviver em vez de ser perfeito.

A abertura do código do Erlang em 1998 o espalhou muito além da Ericsson: o mesmo modelo hoje executa o RabbitMQ, o WhatsApp da Meta e sistemas Elixir/Discord. Dentro da Ericsson, o AXD301 se tornou um dos novos produtos mais bem-sucedidos da empresa, e a tese o documentou como um dos produtos mais confiáveis que a Ericsson já fez.

CONFIRA AS EVIDÊNCIAS

As fontes

  1. Making Reliable Distributed Systems in the Presence of Software Errors (PhD thesis) Royal Institute of Technology, via erlang.org · erlang.org
  2. A History of Erlang (HOPL III) ACM SIGPLAN, mirror at labouseur.com · labouseur.com
  3. A (Very) Brief History of Erlang Vonage Developer Blog · developer.vonage.com ·