SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
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 ("Could not connect");
$version = $memcache->getVersion();
echo "Server's version: ".$version."<br/>n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcache->set('key', $tmp_object, false, 10) ;
echo "Store data in the cache (data will expire in 10 seconds)<br/>n";
$get_result = $memcache->get('key');
echo "Data from the cache:<br/>n";
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

Más contenido relacionado

La actualidad más candente

Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend frameworkMarcos Oliveira
 
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensTDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensLeandro Guimarães
 
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra NovoSoluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra NovoTchelinux
 
Alta Performance com Java
Alta Performance com JavaAlta Performance com Java
Alta Performance com JavaAlisson Pedrina
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioFernando Palma
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaFabio Telles Rodriguez
 
Alta Disponibilidade
Alta DisponibilidadeAlta Disponibilidade
Alta Disponibilidadeelliando dias
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLJohnes Castro
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 
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
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppetRamon Mota
 

La actualidad más candente (20)

Vamos conversar sobre cache
Vamos conversar sobre cacheVamos conversar sobre cache
Vamos conversar sobre cache
 
Tutorial memcached
Tutorial memcachedTutorial memcached
Tutorial memcached
 
Introdução ao zend framework
Introdução ao zend frameworkIntrodução ao zend framework
Introdução ao zend framework
 
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvensTDC2012 - Sua aplicação JAVA flutuando nas nuvens
TDC2012 - Sua aplicação JAVA flutuando nas nuvens
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra NovoSoluções de Web Caching e Web Acceleration - Domingos Parra Novo
Soluções de Web Caching e Web Acceleration - Domingos Parra Novo
 
Alta Performance com Java
Alta Performance com JavaAlta Performance com Java
Alta Performance com Java
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
Cache de dados com PHP
Cache de dados com PHPCache de dados com PHP
Cache de dados com PHP
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Ebook Apache Server: Guia Introdutório
Ebook Apache Server: Guia IntrodutórioEbook Apache Server: Guia Introdutório
Ebook Apache Server: Guia Introdutório
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
PostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manadaPostgreSQL Transformando um elefante numa manada
PostgreSQL Transformando um elefante numa manada
 
Alta Disponibilidade
Alta DisponibilidadeAlta Disponibilidade
Alta Disponibilidade
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQL
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 
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
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppet
 
Mysql Replication
Mysql ReplicationMysql Replication
Mysql Replication
 

Similar a Desenvolvendo aplicações Web escaláveis

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Memcached - Uma alternativa de cache para arquiteturas de alta escalabilidade
Memcached  - Uma alternativa de cache para arquiteturas de alta escalabilidade Memcached  - Uma alternativa de cache para arquiteturas de alta escalabilidade
Memcached - Uma alternativa de cache para arquiteturas de alta escalabilidade Felipe Bergamaschi
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancadoAmazon Web Services LATAM
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsJorge Walendowsky
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuningDell Technologies
 
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
 
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
 
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
 
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
 
App Web Escalaveis Fisl
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis FislElton Minetto
 
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
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações webJean Carlo Emer
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXAlex Hübner
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia J Chaves Silva
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29Juliana Nascimento
 

Similar a Desenvolvendo aplicações Web escaláveis (20)

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Memcached - Uma alternativa de cache para arquiteturas de alta escalabilidade
Memcached  - Uma alternativa de cache para arquiteturas de alta escalabilidade Memcached  - Uma alternativa de cache para arquiteturas de alta escalabilidade
Memcached - Uma alternativa de cache para arquiteturas de alta escalabilidade
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancado
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.js
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Treinamento de Performance and tuning
Treinamento de Performance and tuningTreinamento de Performance and tuning
Treinamento de Performance and tuning
 
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
 
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
 
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
 
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
 
App Web Escalaveis Fisl
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis Fisl
 
Apache
ApacheApache
Apache
 
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
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Cache em aplicações web
Cache em aplicações webCache em aplicações web
Cache em aplicações web
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MX
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 

Más de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Más de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Desenvolvendo aplicações 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 ("Could not connect"); $version = $memcache->getVersion(); echo "Server's version: ".$version."<br/>n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) ; echo "Store data in the cache (data will expire in 10 seconds)<br/>n"; $get_result = $memcache->get('key'); echo "Data from the cache:<br/>n"; 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