O documento discute estratégias para otimização e escalabilidade de aplicações web, incluindo dicas para código eficiente, uso de caches, bancos de dados distribuídos e computação em nuvem.
Para quem nãome conheceGraduando em ciência da computação pela UFES;Trabalho com internet há 9 anos;Gerente de Tecnologia do iMasters desde 2003;Obtive o ZendCertifiedEngineer para PHP5 em 2008;
Casos famososTwitter –instabilidade devido a falha na estratégia de escalabilidadeDigg – teve de mudar toda a arquitetura da aplicação para manter-se onlineWorld ofWarcraft – durante o lançamento, foi sobrecarregado e ficou fora do arYoutube, LiveJournal, Facebook....
Dicasechoé mais rápido que print();utilizeaspas simples ao invés de aspas duplas quando possível;evite métodos mágicos como __get, __set, __call e etc..prefira require() ao require_once() quando possível;utilize caminhos absolutos sempre que possível;$array['foo'] é até 7x mais rápido do que que$array[foo];evite o operador @ para ocultar erros;...
DicasUtilize páginas estáticasRequisiçõesa páginas estáticas não precisam carregar o engine PHP, economizando memória e diminuindo o tempo de resposta.Preste atenção aos índices do banco de dadosA ausência de índices nas colunas que aparecem em cláusulas WHERE ou JOIN pode 'destruir' a performance da sua aplicação.
ProfilingÉ a investigaçãodo comportamento do script, através dos dados recolhidos durante a sua execução, com o objetivo de determinar quais partes podem ser otimizadas melhorando a velocidade e reduzindo o consumo de memória
Banco de dadosMaster-slaveUm(e apenas um) masterUm ou mais slavesTodas as escritas são enviadas ao masterLeituras são distribuídas entre todos os nósFalhasÚnico ponto de falhaGargalo
Banco de dadosMaster-masterUmou mais mastersEscritas e leituras vão para todos os mastersEscritas são replicadas entre siFalhasAlta complexidadeIntroduz altas latências de comunicação
Banco de dadosParticionamentoverticalColocar as tabelas em servidores diferentes agrupadas por área funcionalEscalona seus dados por funcionalidadeJoins são realizados na aplicaçãoFalhasPerde os relacionamentos reais do banco de dadosEscalabilidade limitada
Banco de dadosParticionamentohorizontalSepare os dados por chaves e coloque em servidores diferentes (sharding)Escalona seus dados por chaveJoins são realizados na aplicaçãoNecessita de um “roteamento” das consultas na aplicaçãoFalhaPerde os relacionamentos reais do banco de dados