2 pontos por GN⁺ 2023-07-07 | 1 comentários | Compartilhar no WhatsApp

"Você sabia que o backend do #MetaThreads foi construído em #Python 3.10?

Ele está rodando no fork #Cinder do Instagram, e esse fork inclui vários recursos interessantes que diferem do Python 3.10 padrão, como compilador JIT, módulos de carregamento tardio e módulos estáticos pré-compilados."

1 comentários

 
GN⁺ 2023-07-07
Comentários do Hacker News
  • É bem irônico para quem diz que “Python não é rápido o suficiente para backends de produção”. Afinal, a mesma empresa opera a maior rede social do mundo feita com PHP + MySQL

    • Tecnicamente isso é verdade, mas faz muito tempo que eles não rodam PHP puro. Eles convertiam para código x86 com o HHVM JIT e executavam nativamente na máquina, além de terem colocado muita otimização
      A máquina virtual que faz o JIT também é toda em C++, e a distribuição de MySQL deles é um fork interno fortemente modificado para escalabilidade. Há separação entre armazenamento e computação, sharding, mecanismo de armazenamento baseado em RocksDB em vez de InnoDB, coisas como Raft para replicação síncrona
      Houve realmente muito excelente trabalho de engenharia para tornar a infraestrutura de backend escalável
      Materiais de referência:
      [1] https://engineering.fb.com/2016/08/31/core-data/myrocks-a-sp...
      [2] https://research.facebook.com/file/529018501538081/hhvm-jit-...
      [3] https://research.facebook.com/file/700800348487709/HHVM_ICPE...
    • Fui engenheiro no Facebook no começo, e o PHP do Facebook naquela época era totalmente diferente do PHP usado em templates de sites. Havia bibliotecas dedicadas de todo tipo que permitiam um estilo de programação muito mais sofisticado
      Pense em helpers funcionais, execução assíncrona em milhares de núcleos, árvores de expansão atravessando datacenters via SSH. Como nota lateral, boa parte das ótimas coisas que eu usava foi feita por Evan Priestley, que também criou o Phabricator e vários outros sistemas poderosos
    • Sim. Python puro não era rápido o suficiente, então foi preciso mais trabalho
      “Está rodando no fork Cinder do Instagram, que inclui JIT, módulos com lazy loading, módulos estáticos pré-compilados e várias outras mudanças interessantes em relação ao Python 3.10 puro”
      Isso veio do tweet
      Pessoalmente, não me importo com a linguagem que as pessoas usam. Todo mundo sabe que, se houver dinheiro, é só colocar mais servidores. Pelo menos até CFO e CTO definirem “redução de custos” como o próximo grande objetivo por causa da recessão
      É surpreendente que em 2023 ainda se discuta a “prontidão para produção” de linguagens de programação mainstream. Parece competição para ver quem são os “descolados”
    • Você está falando daquela empresa que, para realmente escalar, teve de criar duas implementações de PHP e um tradutor para C++, certo?
    • Escolha de linguagem muitas vezes é perder a visão do todo por focar demais nos detalhes. Economizar nanossegundos ou ciclos escolhendo C++ em vez de Python empalidece quando você gasta milissegundos na fronteira de rede lendo de um serviço de cache ou de um banco de dados
  • As partes que realmente exigem muito desempenho estão em vários serviços de agregação e recomendação baseados em C++. Mas o servidor web, corretamente, é Django

    • Tenho muito interesse nesse tema. Fiquei curioso sobre como você sabe que o servidor web é Django. Procurei, mas não encontrei
      Por que usariam Django? Já usei em projetos pequenos, mas não achei tão rápido e imaginava que não serviria para um app grande assim. Queria entender os prós e contras
      Por que não fizeram em C++ ou Rust? Mesmo que as partes pesadas estejam em linguagens compiladas, o Python não limitaria a latência de resposta? Posso estar fazendo uma pergunta ingênua, sou amador
    • Acho interessante e legal que tenham decidido usar Django, mas queria uma fonte
    • Django não é um servidor web, e sim um framework WSGI/ASGI. Fico curioso para saber o que eles usam de fato para terminar HTTP
    • Fico curioso sobre quanto usam anotações de tipo e verificação de tipos no codebase
    • Se eu estiver errado, podem me corrigir, mas Django não é um servidor web. É um framework usado junto com um servidor de aplicação como gunicorn e um servidor web como nginx
  • “Está rodando no fork Cinder do Instagram, que inclui JIT, módulos com lazy loading, módulos estáticos pré-compilados e várias outras mudanças interessantes em relação ao Python 3.10 puro”
    Ou seja, não é simplesmente Python 3.10 puro

    • Já portei código de Cinder para CPython. Esse fork tem algumas otimizações que poderiam entrar com facilidade no CPython, e o Facebook também está aberto a portar funcionalidades
      Não sei se o Facebook quer continuar mantendo o fork, mas o pessoal do CPython está aberto a incorporar esses recursos se fizer sentido
    • Também vale lembrar que Python 3.10 está 9 versões principais à frente do 3.1
    • Em certo sentido, Python é uma especificação, não uma implementação
  • É irônico que o post sobre o backend do Threads tenha sido publicado no Twitter

    • Se for para procurar a ironia de verdade, é esta: um app chamado Threads rodando em Python, que tem o bloqueio global do interpretador e dificulta threading
      Entendeu? Threads, threading...? Tudo bem, já estou indo
    • Threads, como o Instagram, é um app só para celular. Não dá para usar Threads de fato no navegador de desktop, então talvez por isso tenha sido compartilhado em um post do Twitter
      Mesmo que tivesse sido um post no Threads, não daria para enviar ao HN
    • Ainda não há app web. Parece que dá para linkar direto para um thread, mas ele só mostra aquilo e não exibe árvore de discussão nem nada assim
      Ainda não está aberto para a web. Dizem que vai estar em algum momento
    • Por que estão dando downvote nisso? É uma observação justa
    • O Threads tem uma versão web agora ou ainda é só app?
  • É claro que há uma boa sobreposição no backend. https://www.threads.net/t/C é a primeira publicação do Instagram, mas também aparece no Threads e tem exatamente o mesmo número de curtidas que no Instagram
    Mas em https://www.threads.net/@kevin aparece que não há threads

  • Python é só o servidor web. Os componentes realmente sensíveis a desempenho — proxy de borda, balanceador de carga, serviços de backend, banco de dados, cache e serviços de armazenamento — em sua maioria são em C++

    • Eu diria que o servidor web, que processa todas ou a maior parte das requisições, é uma parte sensível a desempenho do sistema. Em muitos casos, só reescrever de Python para Go já traz um ganho de desempenho de 2 a 3 vezes, e em escala FAANG isso pode fazer uma grande diferença no custo de hardware
    • Esse é exatamente o jeito como o Python foi pensado para ser usado, e é assim que ele sempre foi usado
  • Trabalhei com Cinder e com o servidor web. Posso responder perguntas técnicas :)

    • Tenho curiosidade se o Cinder poderia ajudar na otimização de streaming em tempo real. Recebíamos um stream UDP e, passando por várias mágicas de gstreamer e nvidia deepstream, fazíamos inferência de machine learning em tempo real sobre o stream. Pelo que sei, um desenvolvedor sênior implementou isso em Python
      Mas ali a latência era um grande problema e, como sempre, a prioridade de otimização ficou baixa para conseguirmos chegar ao MVP
      Então tenho curiosidade se o Cinder pode ser usado para otimizar streaming de dados em tempo real, ou se essa pergunta em si já mostra que eu não entendi o caso de uso
      Também usávamos Django e agora fico pensando se deveríamos ter migrado para FastAPI. Mas isso é outra pergunta
    • Tenho curiosidade sobre qual funcionalidade vocês gostariam de ver incorporada ao CPython que teria o maior impacto e a maior chance de acontecer
    • Tenho curiosidade se você recomendaria usar Cinder em uma stack com Django, Cython e Numpy
    • Pode explicar com mais detalhes o lado do servidor web? Ele implementa WSGI?
    • Quem pode se beneficiar do Cinder? Para que tipo de carga de trabalho ele é adequado? Só o README parece um pouco insuficiente
  • Quero saber mais detalhes sobre o rollout. Estão entrando bem mais de 1 milhão de novos usuários por hora, o que é bem impressionante

    • Imagino que neste momento eles tenham feito um superprovisionamento enorme para aguentar as primeiras semanas, talvez meses, do crescimento esperado
      Mesmo assim, com certeza deve haver muitos detalhes interessantes que eu gostaria de ouvir
    • O total de usuários ativos mensais de todos os produtos da Meta é de 3,8 bilhões
      Alguns milhões de novos usuários não representam nem 0,1% do total. Está totalmente dentro da variação esperável
    • Isso simplesmente roda sobre a infraestrutura compartilhada da Meta, construída para lidar com essa escala
  • https://github.com/twitter/the-algorithm/pull/447 jamais deve ser esquecido

    • Finalmente surgiu uma diferença entre os dois
  • O Threads reutilizou o backend/API do Instagram. O Instagram foi baseado em Python desde o início, então foi por isso que o Threads acabou usando Python
    Isso não significa que, ao criar um app assim do zero, você deva escolher Python quando existem alternativas que não exigem um fork interno. Lendo o texto completo, isso fica bem fácil de entender, mas a interface “só leem o título” do Hacker News parece estar distorcendo isso

    • Relaxa. Python é uma linguagem boa o bastante