Arquitetura do Facebook [fechada]

169

Tenho procurado artigos / informações sobre a arquitetura no Facebook, os desafios e as formas como eles os enfrentam. O que eles usam e por que eles usam. Como eles escalam e quais são as decisões de design para o que fazem, etc. O conhecimento de sites que lidam com um tráfego tão grande dá muitas dicas para arquitetos etc., para manter em mente certas coisas ao criar novos sites. Estou compartilhando o que encontrei.

  1. Facebook Ciência e Gráfico Social (Vídeo)
  2. Escala no Facebook
  3. Arquitetura de bate-papo do Facebook
  4. Blog do Facebook
  5. Facebook Cassandra Arquitetura e Design
  6. Notas de engenharia do Facebook
  7. Quora - Arquitetura do Facebook
  8. Facebook para 600 milhões de usuários
  9. Hadoop e seu uso no Facebook
  10. Erlang no Facebook: arquitetura de bate-papo
  11. Cache de desempenho do Facebook
  12. Arquitetura do Facebook Connect

Tenho mais 2 links, mas não posso postar devido a restrições neste site. Além disso, compartilhe se alguém tiver algo melhor (não precisa estar relacionado apenas ao Facebook).

PS - Não consegui encontrar bons lugares para compartilhar essa pesquisa e, portanto, essa iniciativa. Espero que isso ajude alguém.

Srikar Appalaraju
fonte
2
2. Escala no Facebook (vídeo) - infoq.com/presentations/Scale-at-Facebook 3. Chat no Facebook - infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju
2
Também highscalability.com parece ser um ótimo lugar para aprender sobre arquiteturas para muitos sites populares. Não faço ideia o quanto isso é verdade e quanto especulativo, mas é lá fora e apenas algo para mastigar ...
Srikar Appalaraju
1
O blog de engenharia facebook ocasionalmente tem insights significativos em seus desafios de arquitetura e de escala.
Colin Pickard
Como tecnicamente essa não é uma pergunta real, recomendamos que você mova as informações para a tag FB tag wiki para preservar as informações, caso essa pergunta seja excluída. Obrigado.
18713 Gordon
@Gordon como adicionar tag FB Wiki? A tag 'Facebook' já não está lá? Isso não é suficiente?
Srikar Appalaraju 21/03

Respostas:

33

Bem, o Facebook passou por muitas mudanças e não foi originalmente projetado para ser eficiente. Foi projetado para fazer seu trabalho. Não tenho absolutamente nenhuma idéia de como o código se parece e você provavelmente não encontrará muitas informações sobre ele (por razões óbvias de segurança e direitos autorais), mas dê uma olhada na API. Veja com que frequência ela muda e quanto dela não funciona mais, de maneira alguma ou de maneira alguma.

Eu acho que o maior ás na manga é o Hiphop. http://developers.facebook.com/blog/post/358 Você pode usar o HipHop: https://github.com/facebook/hiphop-php/wiki

Mas, se você me perguntar, é uma tarefa muito ambiciosa e provavelmente demorada. O Hiphop suporta apenas tanto, que não pode simplesmente converter tudo em C ++. Então, o que isso nos diz? Bem, isso nos diz que o Facebook NÃO está aproveitando totalmente a linguagem PHP. Não está usando a versão 5.3 mais recente e estou disposto a apostar que ainda há muito compatível com o PHP 4. Caso contrário, eles não poderiam usar o HipHop. O HipHop É UMA BOA IDEIA e precisa crescer e expandir, mas no estado atual não é realmente útil para muitas pessoas que estão criando NOVOS aplicativos PHP.

Há também PHP para JAVA através de coisas como Resin / Quercus. Novamente, ele não suporta tudo ...

Outra coisa a notar é que, se você usar qualquer módulo PHP não padrão, não poderá converter esse código em C ++ ou Java. No entanto ... Vamos dar uma olhada nos módulos PHP. Eles são compilados em C ++. Portanto, se você pode construir módulos PHP que fazem coisas (como analisar XML, etc.), basicamente você está (menos alguma interação) trabalhando na mesma velocidade. Claro que você não pode simplesmente criar um módulo PHP para todas as necessidades possíveis e todo o seu aplicativo, porque você teria que recompilar e seria muito mais difícil codificar etc.

No entanto ... Existem alguns módulos PHP úteis que podem ajudar com questões de velocidade. Embora no final do dia, tenhamos essa coisa incrível conhecida como "a nuvem" e, com ela, possamos escalar nossos aplicativos (incluindo o PHP) para que isso não importe mais. O hardware está se tornando cada vez mais barato. Amazon apenas abaixou seus preços (novamente) falando.

Então, desde que você codifique seu aplicativo PHP com base na idéia de que ele precisará ser escalado um dia ... Então eu acho que você está bem e não tenho muita certeza de olhar para o Facebook e o que eles fizeram porque quando eles fizeram isso, era um mundo completamente diferente e agora tentando sustentar essa infraestrutura e mantê-la ... Bem, você entende coisas como HipHop.

Agora, como o HipHop vai ajudá-lo? Não vai. Não pode. Você está começando do zero, pode usar o PHP 5.3. Eu recomendo examinar as estruturas do PHP 5.3 e todos os novos benefícios que o PHP 5.3 traz para a mesa, juntamente com as bibliotecas SPL, e também pensar no seu banco de dados. É provável que você esteja fornecendo conteúdo de um banco de dados, portanto, verifique o MongoDB e outros tipos de bancos de dados que não possuem esquema e são orientados a documentos. Eles são muito mais rápidos e melhores para o tipo mais "comum" de site / aplicativo.

Veja NOVAS empresas como Foursquare e Smugmug e algumas outras empresas que utilizam a NOVA tecnologia e COMO estão usando. Por mais bem-sucedido que seja o Facebook, eu sinceramente não os consideraria "como" criar um site / aplicativo eficiente. Não estou dizendo que eles não têm pessoas muito (muito) talentosas que trabalham lá e estão resolvendo (seus) problemas de forma criativa ... Também não estou dizendo que o Facebook não é uma ótima idéia em geral e que não é bem-sucedido e que você não deve obter idéias dele ... Estou apenas dizendo que se você pudesse ver todo o código-fonte, provavelmente não se beneficiaria.

Tom
fonte
1
concordou com a maior parte do que você disse. Esses links são apenas por curiosidade. Às vezes você olha para uma peça de tecnologia e dizer "hey isso é legal!" ...
Srikar Appalaraju
Revisitando aleatoriamente minha resposta aqui duas coisas. # 1, acredito que C e não C ++ são meus problemas técnicos ... Mas o mais importante é que o Phalcon é um framework PHP mais novo que converte muito em extensão PHP para velocidade. Embora grande parte do seu próprio código não esteja sendo executado em C, é claro, e qualquer outra biblioteca usada provavelmente também não. No entanto, é uma idéia inteligente, como o HipHop, extrair um desempenho extra.
Tom
... e aqui vamos nós de novo com esse ás na manga. Olhando para trás, anos depois, temos essa linguagem Hack (nascida do material HipHop com seu próprio IDE). Cresceu para ser algo melhor? Veremos. Isso pode ajudá-lo? Talvez, mas agora parece que você também poderá construir como o Facebook. Levou apenas cerca de 4 anos =) Embora, pessoalmente, eu não fosse tão rápido para beber o kool-aid.
Tom
1
Olhando para a resposta agora, estou impressionado com o resultado das coisas no mundo da tecnologia. O HipHop não apenas suportou as versões mais recentes do PHP, como o Facebook também desenvolveu o HHVM, que é ainda mais rápido.
Gopi Krishna
Sim, às vezes recebo notificações que me trazem de volta a isso. É realmente incrível ver como as coisas mudaram e como o HipHop evoluiu para o HHVM (e provavelmente como o Facebook está se reinventando debaixo das cobertas - veja todos os incríveis avanços da JS também). Faz sentido para mim. Se você tem uma empresa de grande sucesso, com toneladas de dinheiro e funcionários ... Por que não reinvestir em P&D em algum momento, certo?
Tom
18

O Facebook está usando a estrutura LAMP . Os serviços de back-end do Facebook são escritos em uma variedade de linguagens de programação diferentes, incluindo C ++, Java, Python e Erlang, e são usados ​​de acordo com os requisitos. Com o LAMP, o Facebook usa algumas tecnologias, para suportar um grande número de solicitações, como

  1. Memcache - É um sistema de armazenamento em cache de memória usado para acelerar sites dinâmicos direcionados a bancos de dados (como o Facebook), armazenando em cache dados e objetos na RAM para reduzir o tempo de leitura. Memcache é a principal forma de cache do Facebook e ajuda a aliviar a carga do banco de dados. Ter um sistema de cache permite que o Facebook seja tão rápido quanto na recuperação de seus dados.

  2. Thrift (protocolo) - É uma estrutura leve de chamada de procedimento remoto para desenvolvimento de serviços escaláveis ​​em vários idiomas. O Thrift suporta C ++, PHP, Python, Perl, Java, Ruby, Erlang e outros.

  3. Cassandra (banco de dados) - É um sistema de gerenciamento de banco de dados projetado para lidar com grandes quantidades de dados espalhados por muitos servidores.

  4. HipHop para PHP - É um transformador de código fonte para código de script PHP e foi criado para economizar recursos do servidor. O HipHop transforma o código-fonte PHP em C ++ otimizado. Depois de fazer isso, ele usa o g ++ para compilá-lo no código da máquina.

Se entrarmos em mais detalhes, responda a essa pergunta por mais tempo. Podemos entender mais nas seguintes postagens:

  1. Como funciona o Facebook?
  2. Gerenciamento de dados, estilo Facebook
  3. Design de banco de dados do Facebook?
  4. Estrutura de banco de dados do mural do Facebook
  5. Estrutura de dados "like" do Facebook
Somnath Muluk
fonte
7

"Saber sobre sites que lidam com um tráfego tão grande dá muitas dicas para arquitetos, etc., para manter em mente certas coisas ao criar novos sites"

Acho que você provavelmente pode aprender muito com o design do Facebook, assim como com o design de qualquer sistema de software grande e bem-sucedido. No entanto, parece-me que você não deve ter em mente o design atual do Facebook ao criar novos sistemas.

Por que você quer ser capaz de lidar com o tráfego que o Facebook tem que lidar? As probabilidades são de que você nunca precisará, por mais talentoso que seja um programador. O próprio Facebook não foi projetado desde o início para uma escalabilidade tão grande, que talvez seja a lição mais importante a ser aprendida.

Se você quiser aprender sobre um sistema de software não trivial, recomendo o livro "Dissecando um Aplicativo C #" sobre o desenvolvimento do IDE SharpDevelop. Está esgotado, mas está disponível gratuitamente online . O livro oferece uma visão geral de um aplicativo real e fornece informações sobre IDEs que são úteis para um programador.

Jørgen Fogh
fonte
1
sim, provavelmente muitas pessoas não precisam lidar com um tráfego tão pesado. mas é sempre bom entender a escalabilidade e como uma grande empresa como o Facebook lida com um tráfego tão pesado. Pode haver alguns méritos bom design pode ser aprendido com :)
trilhões
@ nanshi: Concordo que é útil aprender. Meu argumento é que você deve ter em mente o que está projetando. O design para escalabilidade a partir do dia 1 torna mais difícil alterar o que o programa faz. Na maioria das situações, a simplicidade é mais importante. Além disso, o Facebook é mantido por muitas pessoas. Cada uma dessas pessoas só precisa ser especialista em parte do sistema.
Jørgen Fogh
Eu entendo o seu ponto. concordar :)
trilhões