Explorando o software por trás do Facebook, a maior rede social do mundo
Na escala em que o Facebook opera, muitas abordagens tradicionais para servir conteúdo web falham ou não são práticas. O desafio para os engenheiros do Facebook tem sido manter o site no ar com mais de meio bilhão de usuários ativos.
Este artigo analisa técnicas e softwares que o Facebook usa para funcionar nesse nível.
Facebook: desafio de escalabilidade
Antes de entrar em detalhes, aqui estão alguns factóides para dar uma idéia do desafio de escalabilidade com o qual o Facebook tem que lidar:
-
O Facebook serve mais de 550 bilhões de visualizações de páginas por mês;
-
Há mais fotos no Facebook do que em todos os outros sites de fotos juntos (incluindo sites como o Flickr);
-
Mais de 3 bilhões de fotos são visualizadas por dia;
-
Mais de 25 bilhões de tipos de conteúdo (atualizações de status, comentários, etc) são compartilhados todo mês;
-
O Facebook tem mais de 60 mil servidores.
Softwares para escalar
A infraestrutura de software que o Facebook usa pode ser vista como a de um site LAMP, mas com melhorias e extensões de vários serviços. Por exemplo:
-
O Facebook usa PHP, mas tem um compilador que permite que o sistema execute código nativo nos servidores web, aumentando significativamente seu desempenho;
-
O Facebook usa Linux, mas é um Linux otimizado para garantir alta vazão de rede;
-
O Facebook usa MySQL, mas principalmente para persistência de chaves-valores (Hashes), movendo lógicas de consultas e JOINS para a camada de aplicação dos servidores web em que otimizações são mais fáceis de implementar, usando por exemplo caches em memória;
-
Por fim, há sistemas customizados, como o Haystack, um objeto de armazenamento altamente escalável usado para servir a imensa quantidade de fotos do Facebook, e o Scribe, um sistema de logging (registro de ações) que consegue operar na escala do Facebook (nada trivial).
Vamos ao que interessa. Abaixo são apresentados os softwares (alguns) que o Facebook usa para fornecer a todos nós a maior rede social do mundo.
Memcached
O Memcached é no momento um dos softwares mais famosos na Internet. É um sistema de cache em memória distribuído que o Facebook (e vários outros sites) usam como uma camada de cache entre aplicação web e banco de dados (já que acesso a disco rígido é relativamente lento). Ao longo dos anos, o Facebook realizou diversas otimizações no Memcached e nos softwares que rodam em conjunto com ele.
O Facebook roda milhares de servidores Memcached com dezenas de tearabytes de dados em cache a todo momento. É provavelmente a maior instalação de Memcached do mundo.
HipHop for PHP
PHP é uma linguagem interpretada e por isso seu código quando executado é relativamente lento quando comparado com código que executa nativamente. O HipHop converte PHP em código C++ que pode ser então compilado e apresentar um desempenho melhor. Isso permite que o Facebook aproveite muito melhor seus servidores web já que dependem demais de PHP para servir conteúdo.
Uma pequena equipe de engenheiros no Facebook (inicialmente, apenas três) passou 18 meses desenvolvendo o HipHop, que agora é usado em produção.
Haystack
Haystack é o sistema de armazenamento e recuperação de fotos de alto desempenho do Facebook (a rigor, o Haystack é um armazenador de objetos, então ele não armazena apenas fotos). Existem mais de 20 bilhões de fotos no Facebook e cada uma é armazenada em quatro diferentes resoluções, resultando em mais 80 bilhões de fotos.
O desafio do Haystack não é apenas armazenar bilhões de fotos, mas também executar tarefas com elas em que o desempenho é crítico, como por exemplo remoção, atualização ou acesso.
BigPipe
O BigPipe é um sistema dinâmico para servir páginas web que o Facebook desenvolveu. Ele é capaz de dividir uma página em seções (chamadas “pagelets“) e servi-las em paralelo com desempenho ideal.
Por exemplo, a janela de chat é carregada separadamente, o feed de notícias é carregado separadamente, e assim por diante. Esses “pagelets” podem ser carregados em paralelo, que é de onde vem o ganho de desempenho, e os usuários recebem um site que funciona mesmo se uma parte dele for desativada ou estiver com defeitos.
Cassandra
Cassandra é um sistema de armazenamento distribuído baseado no projeto do BigTable. Ele é um dos filhos de destaque do movimento NoSQL e se tornou open source (virou um projeto Apache). O Facebook o usa na pesquisa Inbox.
Além do Facebook, uma série de outros sites também o usam, como o Twitter e o Digg. É um sistema capaz de armazenar uma quantidade imensa de dados sem comprometer o tempo de busca e acesso a eles.
Scribe
Scribe é um sistema de logging flexível e escalável que o Facebook usa para uma infinidade de propósitos internos. Ele foi criado para ser capaz de registrar todas as ações ocorridas no Facebook, e automaticamente lida com novas categorias de ações registradas conforme aparecem (o Facebook tem centenas).
Hadoop e Hive
O Hadoop é uma implementação open source de MapReduce que permite a execução de cálculos em uma quantidade massiva de dados. O Facebook o usa para análise de dados de sua rede. O Hive é uma interface de acesso ao Hadoop através de consultas SQL, facilitando seu uso, e teve origem dentro do Facebook.
Tanto o Hadoop quanto o Hive são open source (projetos Apache) e são usados por uma série de grandes sites, como o Yahoo e o Twitter.
Thrift
O Facebook usa diferentes linguagens para os seus diferentes serviços. PHP é usada para front-end, Erlang é usada para Chat, Java e C++ são usados em diversas áreas. Thrift é um framework cross-language desenvolvido internamente que junta todas as diferentes linguagens, permitindo que elas conversem entre si. Isso facilita enormemente o desenvolvimento cross-language no Facebook.
O Facebook tornou o Thrift open source e adicionou suporte a mais linguagens de programação.
Varnish
O Varnish é um acelerador HTTP, que pode agir como um balanceador de carga e também realiza cache de conteúdo para servi-lo rapidamente.
O Facebook usa o Varnish para servir fotos, lidando com bilhões de requisições todos os dias. Como quase tudo que o Facebook usa, o Varnish também é open source.
Outras coisas que ajudam o Facebook a funcionar bem
Foram mencionados os softwares que constituem o Facebook e o ajudam a escalar. Mas operar um sistema tão grande é uma tarefa complexa, por isso serão listadas outras coisas que ajudam o Facebook a funcionar sem problemas:
Lançamento gradual de novas funcionalidades e execuções no escuro
O Facebook tem um sistema chamado de “Gatekeeper” (porteiro) que permite que eles rodem diferentes versões do sistema para diferentes conjuntos de usuários. Ele permite que o Facebook lance novas funcionalidades gradualmente e que testes A/B sejam realizados com usuários.
O “Gatekeeper” também é responsável por realizar o que é chamado de “dark launches” (lançamentos no escuro), que é a ativação de elementos de uma nova funcionalidade antes de ela ir pro ar. É uma maneira de realizar testes de carga do sistema antes de uma funcionalidade ser oficialmente lançada. Normalmente os “dark launches” são realizados duas semanas antes do lançamento oficial da funcionalidade.
Monitoramento do sistema em produção
O Facebook cuidadosamente monitora seu sistema e o desempenho de cada função PHP executada em ambiente de produção. Com isso é possível projetar um perfil do sistema que está no ar com a ajuda de uma ferramenta chamada XHProf e identificar gargá-los ou áreas que estão operando incorretamente.
Desativação gradual de recursos para aumento de desempenho
Se o Facebook tiver algum problema de desempenho, existe um grande número de recursos não-críticos que podem ser desativados para aumentar o desempenho de funcionalidades vitais da rede social. Desta forma, em uma situação de emergência, o núcleo da rede social poderá continuar funcionando normalmente.
Coisas que não foram mencionadas
O hardware usado pelo Facebook não entrou em discussão neste artigo, mas é um aspecto importante de analisar quando se pensa em escalabilidade. Por exemplo, o Facebook usa a rede CDN para servir conteúdo estático e possui enormes data centers que hospedam milhares de servidores.
E além do que foi mencionado, existem diversos outros softwares envolvidos na operação do Facebook. Neste artigo foram destacadas as escolhas mais interessantes que o Facebook fez.
Facebook e projetos open source
Antes de encerrar o artigo, é importante mencionar o quanto o Facebook, assim como outras grandes empresas de Internet, apoia projetos open source. O Facebook não apenas usa e contribui com software open source como Linux, Memcached, MySQL e Hadoop, como também desenvolve internamente diversas ferramentas que são disponibilizadas como projetos open source.
Uma lista com todos os projetos open source em que o Facebook atua pode ser encontrada na página Open Source – Desenvolvedores do Facebook.
Mais desafios de escalabilidade por vir
O Facebook cresce a passos incríveis. Sua base de usuários aumenta quase que exponencialmente e já superou 500 milhões de usuários. Ele tem mantido uma taxa de cerca de 100 milhões de novos usuários a cada 6 meses.
O rápido crescimento significa que o Facebook vai ter problemas e diversos desafios de desempenho para apresentar cada vez mais páginas, buscas, imagens, mensagens e todos os outros recursos com os quais os usuários interagem. Para um site como o Facebook, este sempre será um fato com o qual ele terá que viver, e seus engenheiros estarão sempre atentos e criando novas maneiras de fazer o sistema escalar.
Vamos acompanhar o que os engenheiros do Facebook estão desenvolvendo! Com certeza surgirão coisas interessantes, afinal de contas, eles estão escalando uma montanha que muitos de nós podemos apenas sonhar; um site com mais pessoas do que a maioria dos países. Quando isso acontece, é preciso ser criativo.
Este artigo é uma adaptação/atualização para o português do artigo em inglês Exploring the software behind Facebook, the world’s largest site.




“O Facebook cresce a passos incríveis. Sua base de usuários aumenta quase que exponencialmente e já superou 500 milhões de usuários. Ele tem mantido uma taxa de cerca de 100 milhões de novos usuários a cada 6 meses.”
Não seria 500 bilhoes de usuarios?
Tobias,
Não entendi a inconsistência.
Não tem como uma rede social ter 500 bilhões de usuários reais. É impossível por causa do número de pessoas no planeta, concorda?
O Facebook atingiu a marca de 500 milhões de usuários recentemente e nos últimos tempos tem mantido um crescimento de 100 milhões de usuários a cada 6 meses.
Sinta-se à vontade para explicar melhor sua dúvida.
Tobias, o planeta terra tem 7 bilhoes de habitantes.
Metade deles nunca usou internet na vida.
O blog High Scalability postou um link para um artigo do diretor de Engenharia do Facebook, que comenta como eles conseguiram escalar a aplicação para funcionar com 500 milhões de usuários:
http://www.facebook.com/note.php?note_id=409881258919
Muito bom! Torcendo pra precisar a começar a usar essas coisas para escalar
Triste ver que até hj o Twitter, muito mais simples e com uma quantidade muito menor de usuários não consegue ser estável até hj.
Conclusão:
PHP >>> Ruby on Rails
Não concordo com sua afirmação. Não acho que o Twitter é muito mais simples e também não acho que RoR é um problema de escalabilidade.
Os últimos artigos que li sobre o Twitter explicam alguns pontos que eles usaram para escalar. Eles começaram com um sistema Ruby on Rails completo, depois migraram o backend para Java e C. Ainda assim, não conseguiam dar conta dos tweets, e migraram quase tudo para Scala. O Frontend continua em RoR.
Eles usam Memcached como “banco de dados” e MySQL como backup. Inclusive o Engenheiro responsável por infraestrutura, Evan Weaver, é commiter do memcached e desenvolveu a lib com melhor desempenho para acesso ao memcached via Ruby, a memcache-client.
O Twitter parece simples, mas foi o primeiro sistema que conseguiu implementar busca de conteúdo em tempo real (na verdade, com atraso de até 10 segundos) com bom desempenho. E o problema deles são os picos, pois não são picos altos, mas picos EXTREMAMENTE ALTOS.
O Facebook tem operação mais estável. Como detalhado no artigo, o Facebook possui cerca de 30 bilhões de tipos de conteúdo armazenados (entre fotos, atualizações, mensagens etc…). O Twitter recentemente anunciou que possui mais de 20 bilhões de Tweets, sendo que a maior parte desse número foi conquistada no último ano.
Enfim, o desafio de escalar o Twitter é tão grande quanto o do Facebook.
Muita coisa mudou desde esse comentário. Cerca de 3 bilhões de “curtir” são feitos diariamente. O que está escrito acima não vale mais.
Entendo pouco, porem acredito que um “curtir” é equivalente a pouca informação.Enquanto 1 post do Twitter é 140 Caracteres.
Ainda assim acredito que é um trabalho extremamente engenhoso manter um site desse, se é tão fácil por que não se candidata e revoluciona aposto que eles pagam bem -.-”
Concordo com a afirmação plenamente (ambas), pois a estrutura do Twitter, uso diário e estabilidade estão abaixo das marcas conseguidas e conquistadas pelo Facebook. Não podemos cometer a injustiça de dizer que o Twitter está MUITO abaixo do Facebook, porém não podemos ser medíocres em querer nos enganar pela mídia televisiva paga em tentar nos tendenciar a dar crédito de margens próximas de popularidade, usuabilidade e dinamismo entre Twitter e Facebook. Todos sabemos que essa diferença é, no mínimo em números mais plausíveis, média.
Ótimo Post! Podemos Perceber o quão complexo pode ser “um site” como a maioria dos leigos falam, achando que é tudo a mesma coisa. Mas ficou claro o alto nível de engenharia para desenhar e executar os processos.
Muito bom o post Barbolo! Parabéns!
Muitas informações importantes para quem trabalha na área. E claro, uma fantástico exemplo de como o mundo do FreeSoftware é “TOP END”.
Abraços
“E claro, uma fantástico exemplo de como o mundo do FreeSoftware é “TOP END”.”
POis é, queri ver se num tivesse uma grande empresa por traz,,,, Nada contra o software livre, muito pelo contrário, mas pra chegar a nivel empresárial só da quando tem uma grande empresa ou dando suporte ou ditanto as regras, porque qualquer briga é fork atraz de fork. Mesmo assim viva o software livre, ao linux e ao c++ que ainda tem utilidade.
Quite interesting article. Your web pages is rapidly becoming one of my favorites.
Eu achando q o FACE usava ORACLE!
Belíssimo post. Parabéns!
Obrigado, Mauricio.
Ótimo post. Parabéns!
Rafael Barbolo, se hoje eu fosse criar uma rede social, o que inicialmente iria precisar?
Vinicius, é muito difícil responder sua questão. Vou deixar o ex-chefe de tecnologia do Facebook responder:
http://www.quora.com/Facebook-1/How-long-would-it-take-to-build-Facebook-as-of-July-2011
Gostei imensamente da pergunta, pois meu objetivo a que estou trabalhando a 2anos e meio é criar isso (só que como o projeto inicial, somente interno estilo intranet mas com uma “cara de face” {fechada}), acho que meu inglês instrumental dá para ler o link que o Rafael Barbolo deixou e vou ver o que posso aproveitar.
Ah, comentei acima e esqueci de parabenizá-lo Rafael pelo post. Ao mesmo tempo aproveito para desejar sucessos na sua carreira, pois você merece! Vinícius, valeu pela pergunta!
Olá! Não consigo acessar meu facebook! Quando abro ele, a página fica em branco e diz que o BigPipe é nulo ou não existe! Como faço para resolver isso? É virus?
Um belissimo artigo… Alguem sabe as tecnologias por tras do google ou do orkut?
Boa noite Rafael,estou tendo probemas com o Facebook abro a pagina e la aparece uma msm ,BIGPIPE é nulo ou não é um objeto,como faço pr corrigir isto,desde já agradeço,abrç
Olá Edgard! Provavelmente, seu computador esta com vírus, e por isso, terá que formatá-lo! Mas, se não quiser, poderá utilizar o google chrome que essa mensagem não aparecerá!
Se estiver usando o Internet Explorer 8, atualize para o 9 ou o 10.
Rafael muito obrigado,so consegui abrir com firefox,valeu a dica,abrçs
ola tenho os navegadoresa ie e o chrome e em nenhum dos dois estou conseguindo entrar no face.no ie dis que o bigpipe é nulo ou não é um objeto .o que faço?
Facebook usando MySql? Tem certeza?
Hoch, talvez a questão não seja porque o Facebook utiliza ou não utiliza o MySql, mas como eles trabalham com grande volumes de dados.
É uma decisão estratégica que deve ser tomadas em um colegiado, pois pode afetar todo seu eco sistema.
O link abaixo fala um pouco do conceito CQRS, espero que te ajude.
http://www.codeproject.com/Articles/555855/Introduction-to-CQRS
Ola Rafael,
Qual tecnologia de ponta para hoje se construir um sistema web que podera ter muitos acessos simultaneos?
Um sistema que seja estavel, usando ferramentas baratas ou de graca e estrategias de utilizacao de multiplos servidores para o servico nao correr o risco de queda dos mesmos.
abs,
Jr
O NodeJS será a solução de todos os problemas
É muita pretensão sua dizer isso.
Olá Rafael, o que está descrito acima sobre o Facebook, ainda está valendo? “Explorando o software por trás do Facebook, a maior rede social do mundo”
Você sabe qual o banco de dados utilizado pelo Google??
Daiana, veja o link abaixo e espero que lhe ajude. Lembre-se que independente do banco de dados (Oracle, DB2, Sql Server, MySQL, etc…), as informações são sempre gravadas em arquivo.
http://en.wikipedia.org/wiki/BigTable
Leia também sobre NoSQL.
https://en.wikipedia.org/wiki/NoSQL
Em tempo, não importa qual a tecnologia que você irá utilizar. Pesquise, estude e depois trabalhe nas suas idéias e necessidades. Todas funcionam se bem aplicadas.
Ola.
Sabe me informar que linguagem ou é utilizado nos jogos do facebook ?
OI tira uma duvida minha,eu entro no face e so aparece o cabeçario mais o resto da pagina fica em branco, ta dizendo que o big pipe nao esta funcionando, e so no micro,pois no tablet ta funcionando normal. me ajuda
Obrigado
boa noite RAFAEL
gostaria de saber qual o melhor software para criação de interface de uma rede social(no caso do facebook qual ele utilizou)?
obrigado