A velocidade do site do Facebook é considerada uma das tarefas mais críticas da empresa. Em 2009, triplicamos com sucesso a velocidade do site do Facebook. E são algumas inovações importantes da nossa equipe de engenheiros que tornam isso possível. Neste artigo, apresentarei a você um de nossos molhos secretos, a grande tecnologia subjacente que chamamos de BigPipe .
BigPipe é um sistema de serviço web dinâmico básico redesenhado. A ideia geral é dividir as páginas da web em pequenos pedaços chamados Pagelets e, em seguida, construir pipelines por meio de servidores da web e navegadores para gerenciar sua execução em diferentes estágios. Isso é semelhante ao processo de execução em pipeline da maioria dos microprocessadores modernos: vários pipelines de instruções passam por diferentes unidades de execução do processador para atingir o desempenho ideal. Embora o BigPipe seja uma reformulação do processo de infraestrutura de rede de serviços existente, ele não requer alterações nos navegadores ou servidores existentes e é implementado inteiramente usando PHP e JavaScript.
motivação
Para entender melhor o BigPipe, precisamos dar uma olhada no sistema de serviço web dinâmico existente. Sua história remonta aos primeiros dias da World Wide Web, mas agora ele não mudou muito em comparação com os primeiros dias. Os sites modernos têm muito mais efeitos dinâmicos e interatividade do que há 10 anos, mas os sistemas tradicionais de serviços da Web há muito tempo não conseguem acompanhar os requisitos atuais de velocidade da Internet. No modelo tradicional, o ciclo de vida de uma solicitação do usuário é o seguinte:
O modelo tradicional é muito ineficiente em sites modernos porque as sequências de operação de muitos sistemas não podem se sobrepor. Algumas técnicas de otimização, como carregamento retardado de JavaScript e download paralelo, foram amplamente adotadas pela comunidade online para superar algumas das limitações. No entanto, essas otimizações raramente resolvem o gargalo causado pela ordem de execução do servidor web e do navegador. Enquanto o servidor web está ocupado gerando uma página, o navegador fica ocioso, desperdiçando seus ciclos sem fazer nada. Quando o servidor web termina de gerar a página e a envia ao navegador, o navegador se torna um gargalo de desempenho e o servidor web não pode ajudar. Ao sobrepor o tempo de geração do servidor web e o tempo de renderização do navegador, podemos não apenas reduzir o atraso final, mas também permitir que a página web exiba a área visível do usuário mais cedo, reduzindo significativamente a percepção de atraso do usuário.
Isso é especialmente útil para sites ricos em conteúdo como o Facebook, onde o tempo de geração do servidor web se sobrepõe ao tempo de renderização do navegador. Uma página típica do Facebook contém dados de muitas fontes diferentes: lista de amigos, atualizações de amigos, anúncios, etc. No modo tradicional de renderização de páginas da web, o usuário teria que esperar até que esses dados de consulta fossem retornados e o arquivo final fosse gerado e então enviado ao computador do usuário. Qualquer atraso na consulta retardará toda a geração do arquivo final.
Como funciona o Big Pipe
Para explorar o paralelismo entre o servidor web e o navegador, o BigPipe primeiro divide a página web em vários Pagelets que podem ser chamados. Assim como um microprocessador de pipeline divide o ciclo de vida de uma instrução em vários estágios (como "busca de instrução", "decodificação de instrução", "execução", "escrever de volta para registro", etc.), o processo de geração de página do BigPipe é dividido em as seguintes etapas:
Fonte: isd