SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Desenvolvendo aplicações Web
escaláveis!

Elton Luís Minetto
Quem?


  Graduado e pós-graduado em Ciência da
   Computação. Cursando MBA em Gerenciamento de
   Projetos
  Trabalha com PHP desde 2000
  Autor do livro Frameworks para Desenvolvimento
   em PHP - Editora Novatec
  Membro do PHPSC
  Arquiteto de Software da empresa Network Vox
Terminologia


  Performance: a habilidade que uma aplicação tem
   de atingir um objetivo, como por exemplo responder
   no menor tempo possível
  Capacidade: a carga total que uma aplicação pode
   suportar
  Escalabilidade: a habilidade de uma aplicação
   manter a performance quando a carga de trabalho
   aumenta. É a junção da capacidade e da
   performance
Ou…
Ou...


  Performance: a velocidade máxima do carro
  Capacidade: o limite de velocidade e o número de
   pistas da estrada
  Escalabilidade: quantos carros e pistas eu posso
   adicionar sem diminuir a velocidade do tráfego
     “Performance is a problem. Scaling your performance is a
      bigger problem”
Camadas
Web Servers


  Apache: Prefork X Worker
  Prefork
     Usa fork(). Cada processo filho trata uma conexão
     Grande uso de memória
     Rápido
     Bom para até duas CPUs
  Worker
     Apache 2.0 e superior
     Múltiplas threads dentro de cada filho (poucos filhos)
     Diminui o uso de memória
     Mais escalável
     Melhor com múltiplos processadores
Web Servers


  “Usar servidores dedicados para conteúdo
   estático“ (Flickr)
  Apache pode ser substituído por outro mais leve:
   lighttpd, tux, thttpd
  Usar domínios diferentes para conteúdo estático e
   dinâmico. Exemplo:
     http://www.eltonminetto.net (Servidor Apache)
     http://static.eltonminetto.net (Servidor thttpd)
     Usa a possibilidade dos navegadores acessarem múltiplos
      domínios ao mesmo tempo. Não sobrecarrega o servidor de
      conteúdo dinâmico
MySQL


  “Nenhum dos problemas de escalabilidade que
   enfrentaram era relacionado com PHP. Os maiores
   problemas encontrados eram relacionados com
   base de dados” (Digg)
  “Sharding é usado para quebrar a base de dados em
   várias porções menores” (Digg)
  “Fazer o tunning do MySQL durante a escolha da
   engine de armazenamento das tabelas. Usar InnoDB
   quando precisa de transações e MyISAM quando
   não precisa” (Digg)
MySQL


  “Desnormalização ou cacheamento são as únicas
   formas de gerar uma tag cloud em milissegundos
   para milhões de tags” (Flickr)
  “Não usar conexões persistentes ao banco de dados
   “ (Friendster)
MySQL


  Usar replicação Master-Slave.
  Dividir a carga entre servidores. As requisições de
   modificação (INSERT, UPDATE,DELETE) podem ser
   enviadas para o Master. Os dados são replicados
   para os Slaves. As requisições de leitura (SELECT)
   são enviadas direto para os Slave
  Usar o tipo correto de dados na tabela: 
     INT x SMALLINT x TINYINT
     CHAR x VARCHAR
MySQL


  Master-Slave tem o problema do tempo de
   sincronização. Resposta: sharding.
    “Uma base de dados pode ser sharded por tabelas, dados
     ou faixas (ranges). É similar ao particionamento, mas possui
     algumas diferenças. Sharding envolve separar os dados em
     máquinas fisicamente distintas, enquanto que
     particionamento geralmente ocorre em mesmo hardware.
     MySQL não suporta nativamente sharding, mas sim tabelas
     particionadas, tabelas federadas (federated) e clusters.”
PHP


  Usar “boas práticas de programação”
     echo é mais rápido que print
     require_once() é lento
     etc,etc
     http://reinholdweber.com/?p=3
     http://www.devolio.com/blog/archives/314-Practical-and-
      impractical-PHP-Optimizations.html
PHP


  PHP tem um compilador JIT que gera um código
   intermedário chamado opcode que é então
   interpretado. Por default essa compilação ocorre em
   todas as execuções do script. Para otimização e
   caching desse opcode, existem algumas soluções: 
     Pacote APC do PECL 
     XCache 
     Zend Platform ($$$)
Cache


  Memcached: é um sistema de cache de objetos em
   memória distribuída de alta performance.Ele foi
   desenvolvido de maneira que se consiga armazenar
   qualquer tipo de informação mas é largamente
   usado em aplicações web para armazenar
   conteúdos como resultados de queries SQL,
   sessões de usuários, arquivos CSS, etc.
  É possível criar “memcached farms”, aumentando a
   escalabilidade
Cache


<?php //exemplo usando cliente PECL
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die (quot;Could not connectquot;);
$version = $memcache->getVersion();
echo quot;Server's version: quot;.$version.quot;<br/>nquot;;
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) ;
echo quot;Store data in the cache (data will expire in 10 seconds)<br/>nquot;;
$get_result = $memcache->get('key');
echo quot;Data from the cache:<br/>nquot;;
var_dump($get_result);
?>
80-90% of the end-user response time is spent on
  the frontend.
Javascript


  “Algumas pessoas reclamam que o Digg é lento.
   Mas isso é mais devido ao uso de grandes
   bibliotecas javascript e não da arquitetura de
   backend (Digg)
  JavaScript pode ser comprimido 
     http://developer.yahoo.com/yui/compressor/ 
    Usar compresão no Apache.
Bibliotecas Javascript
Bibliotecas Javascript
Imagens


  Editores de imagens possuem grandes ferramentas
   para otimizar o tamanho do arquivo sem perder
   qualidade visual. Mesmo assim elas adicionam
   informações extra no documento, como nome da
   ferramenta, data de criação, etc.
  O site Smushit.com permite fazer upload de uma
   imagem ou indicar uma URL com a imagem a ser
   otimizada. Lançado em 10/2008 por pesquisadores
   do Yahoo! Exceptional Performance Team.
Métricas
Métricas
Métricas
Ferramentas


  Apache ab (aplicação)
  Ganglia (S.O. e serviços)
  Firebug e YSlow (javascript, aplicação)
  Xdebug (profiling do PHP)
  Outras...
Arquitetura


  Load Balancers
  Cache servers
  Bancos de dados Master/Slave, Sharding
  Scale‐Out Wins Over Scale‐
   Up  (escalar horizontalmente adicionando mais máq
   uinas é melhor do que verticalmente adicionando
   mais memória/CPU) 
Arquitetura


  Sobre o Youtube:
    “Eles seguiram uma evolução comum:
     servidor único, único master e múltiplos
     slaves para leitura, depois particionaram a
     base de dados e finalmente usaram uma
     abordagem baseada em sharding.”
Arquitetura
Arquitetura – Observações


  Como agora um cliente pode ser atendido por
   diversos servidores Web durante o uso, as sessões
   dos usuários devem ser salvas no banco de dados
   ou nos servidores de cache (Memcached)
  O MySQL Master é um SPOF( Single Point of Failure)
   – adicionar mais Masters em um esquema de
   replicação Master/Master. Ou usar sharding
  Diversos servidores de cache podem ser
   adicionados
Lições Aprendidas 


  Dividir a carga 
  Usar servidores dedicados para conteúdo estático
  Ao invés de comprar máquinas grandes e
   centralizadas, é melhor comprar um monte de
   pequenas e baratas. 
  Base de dados é um gargalo. Atacar e corrigir
   consultas lentas 
  Coletar várias estatísticas de performance
  Usar InnoDB quando precisa de transações e
   MyISAM quando não precisa
Lições Aprendidas 


  Fazer medições realísticas. Capacity planning deve
   ser feito baseado em dados reais e não abstratos.
  Começar lentamente. Não comprar muito
   equipamento apenas porque está apavorado/feliz
   com o fato de que o seu site vai explodir. 
  Descobrir o máximo de cada servidor para poder
   saber se está perto do limite
Receita para tratar crescimento rápido 


while (true) 	
{ 	
 identify_and_fix_bottlenecks(); 	
 drink(); 	
 sleep(); 	
 notice_new_bottleneck(); 	
} 	



Fonte: YouTube Team
Referências


  http://developer.yahoo.com/performance/
  http://highscalability.com/unorthodox-approach-
   database-design-coming-shard
  http://blog.feliperibeiro.com/2008/04/slides-da-palestra-
   php-para-desenvolvimento-de-aplicacoes-de-grande-
   porte.html
  http://www.xdebug.org
  http://devzone.zend.com/content/zendcon_07_slides/
   White_Eli_zendcon-2007-high-perf.pdf
  http://jst.pbwiki.com/
  http://www.slideshare.net/jallspaw/velocity2008-
   capacity-management1-484676
Perguntas?
Contato


<?php	
$card = array(	
 	‘nome’ => ‘Elton Luís Minetto’,	
 	‘site’ => ‘http://www.eltonminetto.net’, 	
 	‘e-mail’ => ‘eminetto@gmail.com’,	
 	‘fone’ => ‘(47) 9189 6359’	
);	
var_dump($card);	
?>
Estamos contratando!!
Envie currículos para!
elton.minetto@networkvox.com.br

Mais conteúdo relacionado

Mais procurados

Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...Bravo Tecnologia
 
Cloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceCloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceSaveincloud
 
Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019
Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019
Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019CLEYSSON LIMA
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Claudio Miranda
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)Aryel Tupinambá
 
Cloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceCloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceSaveincloud
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...Aryel Tupinambá
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 
Java Escalável e com Alta Disponibilidade na Nuvem
Java Escalável e com Alta Disponibilidade na NuvemJava Escalável e com Alta Disponibilidade na Nuvem
Java Escalável e com Alta Disponibilidade na NuvemSaveincloud
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Performance (Web&PHP)
Performance (Web&PHP)Performance (Web&PHP)
Performance (Web&PHP)Nuno Loureiro
 

Mais procurados (20)

De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Wordpress Instalação
Wordpress InstalaçãoWordpress Instalação
Wordpress Instalação
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
 
Cloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceCloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performance
 
Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019
Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019
Gerenciamento de Backup e Recovery com Barman PGConfBrasil2019
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Mysql Replication
Mysql ReplicationMysql Replication
Mysql Replication
 
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
FrontInVale 2016: Webpack - A evolução do asset pipeline (Lightning Talk)
 
Cloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performanceCloud PostgreSQL em alta performance
Cloud PostgreSQL em alta performance
 
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
PHP Conference 2014: Uma string em dez milhões de documentos em menos de um s...
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
Java Escalável e com Alta Disponibilidade na Nuvem
Java Escalável e com Alta Disponibilidade na NuvemJava Escalável e com Alta Disponibilidade na Nuvem
Java Escalável e com Alta Disponibilidade na Nuvem
 
Slides nginx
Slides nginxSlides nginx
Slides nginx
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Performance (Web&PHP)
Performance (Web&PHP)Performance (Web&PHP)
Performance (Web&PHP)
 
Dreamweaver m18
Dreamweaver m18Dreamweaver m18
Dreamweaver m18
 

Semelhante a Desenvolvendo aplicativos web escaláveis

Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheElton Minetto
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Bruno Pedro
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpCampus Party Brasil
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesFernando Ike
 
Instalando Drupal, Começando do Começo
Instalando Drupal, Começando do ComeçoInstalando Drupal, Começando do Começo
Instalando Drupal, Começando do Começosauloamui
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanosCaike Souza
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
MySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL Brasil
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04Carlos Santos
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheDell Technologies
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuningDell Technologies
 

Semelhante a Desenvolvendo aplicativos web escaláveis (20)

Melhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCacheMelhorando a performance de aplicações com o uso do MemCache
Melhorando a performance de aplicações com o uso do MemCache
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
PostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicaçõesPostgreSQL: Conceitos e aplicações
PostgreSQL: Conceitos e aplicações
 
Instalando Drupal, Começando do Começo
Instalando Drupal, Começando do ComeçoInstalando Drupal, Começando do Começo
Instalando Drupal, Começando do Começo
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Plone na nuvem
Plone na nuvemPlone na nuvem
Plone na nuvem
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Conceitoseaplicaes
ConceitoseaplicaesConceitoseaplicaes
Conceitoseaplicaes
 
MySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI Tecnologia
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Web Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+ApacheWeb Seminário sobre Varnish+Nginx+Apache
Web Seminário sobre Varnish+Nginx+Apache
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuning
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 

Desenvolvendo aplicativos web escaláveis

  • 2.
  • 3. Quem?   Graduado e pós-graduado em Ciência da Computação. Cursando MBA em Gerenciamento de Projetos   Trabalha com PHP desde 2000   Autor do livro Frameworks para Desenvolvimento em PHP - Editora Novatec   Membro do PHPSC   Arquiteto de Software da empresa Network Vox
  • 4. Terminologia   Performance: a habilidade que uma aplicação tem de atingir um objetivo, como por exemplo responder no menor tempo possível   Capacidade: a carga total que uma aplicação pode suportar   Escalabilidade: a habilidade de uma aplicação manter a performance quando a carga de trabalho aumenta. É a junção da capacidade e da performance
  • 6. Ou...   Performance: a velocidade máxima do carro   Capacidade: o limite de velocidade e o número de pistas da estrada   Escalabilidade: quantos carros e pistas eu posso adicionar sem diminuir a velocidade do tráfego   “Performance is a problem. Scaling your performance is a bigger problem”
  • 8. Web Servers   Apache: Prefork X Worker   Prefork   Usa fork(). Cada processo filho trata uma conexão   Grande uso de memória   Rápido   Bom para até duas CPUs   Worker   Apache 2.0 e superior   Múltiplas threads dentro de cada filho (poucos filhos)   Diminui o uso de memória   Mais escalável   Melhor com múltiplos processadores
  • 9. Web Servers   “Usar servidores dedicados para conteúdo estático“ (Flickr)   Apache pode ser substituído por outro mais leve: lighttpd, tux, thttpd   Usar domínios diferentes para conteúdo estático e dinâmico. Exemplo:   http://www.eltonminetto.net (Servidor Apache)   http://static.eltonminetto.net (Servidor thttpd)   Usa a possibilidade dos navegadores acessarem múltiplos domínios ao mesmo tempo. Não sobrecarrega o servidor de conteúdo dinâmico
  • 10. MySQL   “Nenhum dos problemas de escalabilidade que enfrentaram era relacionado com PHP. Os maiores problemas encontrados eram relacionados com base de dados” (Digg)   “Sharding é usado para quebrar a base de dados em várias porções menores” (Digg)   “Fazer o tunning do MySQL durante a escolha da engine de armazenamento das tabelas. Usar InnoDB quando precisa de transações e MyISAM quando não precisa” (Digg)
  • 11. MySQL   “Desnormalização ou cacheamento são as únicas formas de gerar uma tag cloud em milissegundos para milhões de tags” (Flickr)   “Não usar conexões persistentes ao banco de dados “ (Friendster)
  • 12. MySQL   Usar replicação Master-Slave.   Dividir a carga entre servidores. As requisições de modificação (INSERT, UPDATE,DELETE) podem ser enviadas para o Master. Os dados são replicados para os Slaves. As requisições de leitura (SELECT) são enviadas direto para os Slave   Usar o tipo correto de dados na tabela:   INT x SMALLINT x TINYINT   CHAR x VARCHAR
  • 13. MySQL   Master-Slave tem o problema do tempo de sincronização. Resposta: sharding.   “Uma base de dados pode ser sharded por tabelas, dados ou faixas (ranges). É similar ao particionamento, mas possui algumas diferenças. Sharding envolve separar os dados em máquinas fisicamente distintas, enquanto que particionamento geralmente ocorre em mesmo hardware. MySQL não suporta nativamente sharding, mas sim tabelas particionadas, tabelas federadas (federated) e clusters.”
  • 14.
  • 15. PHP   Usar “boas práticas de programação”   echo é mais rápido que print   require_once() é lento   etc,etc   http://reinholdweber.com/?p=3   http://www.devolio.com/blog/archives/314-Practical-and- impractical-PHP-Optimizations.html
  • 16. PHP   PHP tem um compilador JIT que gera um código intermedário chamado opcode que é então interpretado. Por default essa compilação ocorre em todas as execuções do script. Para otimização e caching desse opcode, existem algumas soluções:   Pacote APC do PECL   XCache   Zend Platform ($$$)
  • 17. Cache   Memcached: é um sistema de cache de objetos em memória distribuída de alta performance.Ele foi desenvolvido de maneira que se consiga armazenar qualquer tipo de informação mas é largamente usado em aplicações web para armazenar conteúdos como resultados de queries SQL, sessões de usuários, arquivos CSS, etc.   É possível criar “memcached farms”, aumentando a escalabilidade
  • 18. Cache <?php //exemplo usando cliente PECL $memcache = new Memcache; $memcache->connect('localhost', 11211) or die (quot;Could not connectquot;); $version = $memcache->getVersion(); echo quot;Server's version: quot;.$version.quot;<br/>nquot;; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) ; echo quot;Store data in the cache (data will expire in 10 seconds)<br/>nquot;; $get_result = $memcache->get('key'); echo quot;Data from the cache:<br/>nquot;; var_dump($get_result); ?>
  • 19. 80-90% of the end-user response time is spent on the frontend.
  • 20. Javascript   “Algumas pessoas reclamam que o Digg é lento. Mas isso é mais devido ao uso de grandes bibliotecas javascript e não da arquitetura de backend (Digg)   JavaScript pode ser comprimido   http://developer.yahoo.com/yui/compressor/  Usar compresão no Apache.
  • 23. Imagens   Editores de imagens possuem grandes ferramentas para otimizar o tamanho do arquivo sem perder qualidade visual. Mesmo assim elas adicionam informações extra no documento, como nome da ferramenta, data de criação, etc.   O site Smushit.com permite fazer upload de uma imagem ou indicar uma URL com a imagem a ser otimizada. Lançado em 10/2008 por pesquisadores do Yahoo! Exceptional Performance Team.
  • 27. Ferramentas   Apache ab (aplicação)   Ganglia (S.O. e serviços)   Firebug e YSlow (javascript, aplicação)   Xdebug (profiling do PHP)   Outras...
  • 28. Arquitetura   Load Balancers   Cache servers   Bancos de dados Master/Slave, Sharding   Scale‐Out Wins Over Scale‐ Up  (escalar horizontalmente adicionando mais máq uinas é melhor do que verticalmente adicionando mais memória/CPU) 
  • 29. Arquitetura   Sobre o Youtube:  “Eles seguiram uma evolução comum: servidor único, único master e múltiplos slaves para leitura, depois particionaram a base de dados e finalmente usaram uma abordagem baseada em sharding.”
  • 31. Arquitetura – Observações   Como agora um cliente pode ser atendido por diversos servidores Web durante o uso, as sessões dos usuários devem ser salvas no banco de dados ou nos servidores de cache (Memcached)   O MySQL Master é um SPOF( Single Point of Failure) – adicionar mais Masters em um esquema de replicação Master/Master. Ou usar sharding   Diversos servidores de cache podem ser adicionados
  • 32. Lições Aprendidas   Dividir a carga   Usar servidores dedicados para conteúdo estático   Ao invés de comprar máquinas grandes e centralizadas, é melhor comprar um monte de pequenas e baratas.   Base de dados é um gargalo. Atacar e corrigir consultas lentas   Coletar várias estatísticas de performance   Usar InnoDB quando precisa de transações e MyISAM quando não precisa
  • 33. Lições Aprendidas   Fazer medições realísticas. Capacity planning deve ser feito baseado em dados reais e não abstratos.   Começar lentamente. Não comprar muito equipamento apenas porque está apavorado/feliz com o fato de que o seu site vai explodir.   Descobrir o máximo de cada servidor para poder saber se está perto do limite
  • 34. Receita para tratar crescimento rápido while (true) { identify_and_fix_bottlenecks(); drink(); sleep(); notice_new_bottleneck(); } Fonte: YouTube Team
  • 35. Referências   http://developer.yahoo.com/performance/   http://highscalability.com/unorthodox-approach- database-design-coming-shard   http://blog.feliperibeiro.com/2008/04/slides-da-palestra- php-para-desenvolvimento-de-aplicacoes-de-grande- porte.html   http://www.xdebug.org   http://devzone.zend.com/content/zendcon_07_slides/ White_Eli_zendcon-2007-high-perf.pdf   http://jst.pbwiki.com/   http://www.slideshare.net/jallspaw/velocity2008- capacity-management1-484676
  • 37. Contato <?php $card = array( ‘nome’ => ‘Elton Luís Minetto’, ‘site’ => ‘http://www.eltonminetto.net’, ‘e-mail’ => ‘eminetto@gmail.com’, ‘fone’ => ‘(47) 9189 6359’ ); var_dump($card); ?>
  • 38. Estamos contratando!! Envie currículos para! elton.minetto@networkvox.com.br