SlideShare ist ein Scribd-Unternehmen logo
1 von 48
OTIMIZAÇÃO EESCALABILIDADE
Para quem não me conhece Graduando 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;
Otimização é.. obter o máximo de resultados com a mesma quantidade de recursos.
Escalabilidade é.. habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.
Demanda de processamento Volume de dados
Casos famosos Twitter – instabilidade devido a falha na estratégia de escalabilidade Digg – teve de mudar toda a arquitetura da aplicação para manter-se online World ofWarcraft – durante o lançamento, foi sobrecarregado e ficou fora do ar Youtube, LiveJournal, Facebook....
Como otimizar e ser escalável?
Não existe receita de bolo.
Código-fonte Dicas Profiling Infra-estrutura Usando cache opcode memcache Banco de dados Otimização de consultas Distribuindo banco de dados Distribuindo tarefas Arquiteturas escaláveis Computação em nuvem
Código-fonte
Dicas echoé mais rápido que print(); utilize aspas 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; ...
1%
Dicas Evite funções pesadas nas condições dos loops for($i=0; $i < count($obj->metodoLento()); $i++) {    // faça alguma coisa }
Dicas Evite funções pesadas nas condições dos loops $total = count($obj->metodoLento()); for($i=0; $i < $total; $i++) {    // faça alguma coisa }
Dicas Lembre-se de executar exit() depois dos redirecionamentos  if($redirect) {    header("Location: index.php"); } // algum código aqui
Dicas Lembre-se de executar exit() depois dos redirecionamentos  if($redirect) {    header("Location: index.php"); exit(); } // algum código aqui
Dicas Evite SQLs dentro de loops foreach($usuarios as $u) { mysql_query("       INSERT INTO usuario (nome, email)       VALUES('".$u->nome."','".$u->email."')    ", $conn); }
Dicas Evite SQLs dentro de loops  $sql = "INSERT INTO usuario (nome, email) VALUES"; $values = array() foreach($usuarios as $u) {     $values[] = "('".$u->nome."','".$u->email."')"; } mysql_query($sql.implode("," , $values), $conn);
Dicas Evite SQLs dentro de loops  INSERT INTO usuario (nome, email) VALUES    ('Leo Hackin','leo@hackin.com'),    ('Almir Mendes','almir@mendes.com'),    ('Reinaldo Junior','reinaldo@junior.com')
Dicas Utilize páginas estáticas Requisições a 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 dados A ausência de índices nas colunas que aparecem em cláusulas WHERE ou JOIN pode 'destruir' a performance da sua aplicação.
Dicas Utilize curto-circuito nas consultas SQL
Profiling É a investigação do 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
Profiling Encontrar os gargalos Como analisar seu código? XDebug XHProf
Profiling - XDebug Instalação $peclinstallxdebug Configuração php.ini zend_extension=/path/to/extensions/xdebug.so xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /var/log/xdebug/ xdebug.trace_format = 1 Ferramentas para analisar os dados KCacheGrind (Linux) WinCacheGrind (Windows)
Infra-estrutura
Caches Banco de dados Computação em nuvem
Opcodecache PHP compila o script O opcode é executado HTML enviado ao navegador
Opcodecache CacheOpcode PHP compila o script O opcode é executado HTML enviado ao navegador
Opcodecache Opções disponíveis APC eAccelerator ZendOptimizer ionCubeEncoder ...
Cliente Apache + MySQL
Cliente Apache MySQL
Cliente ? Apache Apache Apache MySQL
Cliente Apache Apache Apache MySQL Sessionserver
Memcache O que é? Como funciona? Como utilizar em sua aplicação?
Memcache - Session $host = “memcache.exemple.com”; $port = 11211; $session_path = "tcp://$host:$port"; ini_set('session.save_handler', 'memcache'); ini_set('session.save_path', $session_path);
Memcache - Session $sess_serv = array( array('host' => 'memcache1.exemple.com',          'port' => 11211), array('host' => 'memcache2.exemple.com',          'port' => 11211), ); $path = array(); foreach($sess_serv as $s) 	$path[] = 'tcp://'.$s['host'].':'.$s['port'] ini_set('session.save_handler', 'memcache'); ini_set('session.save_path', implode(',', $path));
Memcache - Dados $memcache = new Memcache; $memcache->connect('localhost', 11211); $object = new stdClass; $object->str_attr = 'test'; $object->int_attr = 123; $memcache->set('key', $object, false, 10); $result = $memcache->get('key');
Memcache - SQL functionquery_with_cache($sql, $timeout = 1800) {     global $memcache;     $key = md5($sql); if (($result = $memcache->get($key)) === false)     {        $result = query_and_fetch($sql);        $memcache->set($key, $result , false, $timeout);     } return $result; }
Banco de dados Master-slave Um (e apenas um) master Um ou mais slaves Todas as escritas são enviadas ao master Leituras são distribuídas entre todos os nós Falhas Único ponto de falha Gargalo
Banco de dados Servidores de Aplicação Master Slave Slave Slave Escrita Leitura
Banco de dados Master-master Um ou mais masters Escritas e leituras vão para todos os masters Escritas são replicadas entre si Falhas Alta complexidade Introduz altas latências de comunicação
Banco de dados Servidores  de Aplicação Master Master Master Escrita Leitura
Banco de dados Particionamento vertical Colocar as tabelas em servidores diferentes agrupadas por área funcional Escalona seus dados por funcionalidade Joins são realizados na aplicação Falhas Perde os relacionamentos reais do banco de dados Escalabilidade limitada
Banco de dados Servidores  de Aplicação Clients Comments Products
Banco de dados Particionamento horizontal Separe os dados por chaves e coloque em servidores diferentes (sharding) Escalona seus dados por chave Joins são realizados na aplicação Necessita de um “roteamento” das consultas na aplicação Falha Perde os relacionamentos reais do banco de dados
Banco de dados Servidores  de Aplicação Clients  (i – q) Clients (r – z) Clients (a – h)
CloudHosting O que é? Flexibilidade Baixo custo?

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (17)

Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Introdução ao PHP - Criação de sites II
Introdução ao PHP - Criação de sites IIIntrodução ao PHP - Criação de sites II
Introdução ao PHP - Criação de sites II
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
PHP 5.3 - Arrays
PHP 5.3 - ArraysPHP 5.3 - Arrays
PHP 5.3 - Arrays
 
NotORM
NotORMNotORM
NotORM
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
Api usando Silex
Api usando SilexApi usando Silex
Api usando Silex
 
SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Less
LessLess
Less
 
Php
PhpPhp
Php
 
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
Java 8 - Afinal onde usamos no dia a dia? GOJava 15 anos!
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 

Andere mochten auch

RubyMastersConf - Escalabilidade do S.O. ao Rails
RubyMastersConf - Escalabilidade do S.O. ao Rails RubyMastersConf - Escalabilidade do S.O. ao Rails
RubyMastersConf - Escalabilidade do S.O. ao Rails brunoaalves
 
Guia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeGuia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeAugusto Pascutti
 
Técnicas para ser escalável com PHP
Técnicas para ser escalável com PHPTécnicas para ser escalável com PHP
Técnicas para ser escalável com PHPFilipe La Ruina
 
Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)
Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)
Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)alexandre ribeiro
 
Aula 1 módulo 1 (tec emergentes)-ok
Aula 1   módulo 1 (tec emergentes)-okAula 1   módulo 1 (tec emergentes)-ok
Aula 1 módulo 1 (tec emergentes)-okLia Gonsales
 
Apresentação cdi+curso
Apresentação cdi+cursoApresentação cdi+curso
Apresentação cdi+cursoLia Gonsales
 
Aula 5 mídias digitais e sociais
Aula 5   mídias digitais e sociaisAula 5   mídias digitais e sociais
Aula 5 mídias digitais e sociaisLia Gonsales
 
Escalabilidade e Disponibilidade em Arquiteturas Web
Escalabilidade e Disponibilidade em Arquiteturas WebEscalabilidade e Disponibilidade em Arquiteturas Web
Escalabilidade e Disponibilidade em Arquiteturas WebRenato Lucindo
 
Apresentação cdi+curso12
Apresentação cdi+curso12Apresentação cdi+curso12
Apresentação cdi+curso12Lia Gonsales
 
Aula 5 mídias digitais e sociais
Aula 5   mídias digitais e sociaisAula 5   mídias digitais e sociais
Aula 5 mídias digitais e sociaisLia Gonsales
 
Aula 1 módulo 1 (tec emergentes)-ok
Aula 1   módulo 1 (tec emergentes)-okAula 1   módulo 1 (tec emergentes)-ok
Aula 1 módulo 1 (tec emergentes)-okLia Gonsales
 
Palestra inovação tecnológica e desenvolvimento econômico e social
Palestra inovação tecnológica e desenvolvimento econômico e socialPalestra inovação tecnológica e desenvolvimento econômico e social
Palestra inovação tecnológica e desenvolvimento econômico e socialClaudio Seixas
 
Fábrica de Aplicativos - Demo Day Artemisia
Fábrica de Aplicativos - Demo Day ArtemisiaFábrica de Aplicativos - Demo Day Artemisia
Fábrica de Aplicativos - Demo Day ArtemisiaBernardo Nunes Mazzini
 
Gerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisGerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisLeandro Júnior
 
Escalabilidade de Aplicações Web
Escalabilidade de Aplicações WebEscalabilidade de Aplicações Web
Escalabilidade de Aplicações WebRenato Lucindo
 

Andere mochten auch (20)

RubyMastersConf - Escalabilidade do S.O. ao Rails
RubyMastersConf - Escalabilidade do S.O. ao Rails RubyMastersConf - Escalabilidade do S.O. ao Rails
RubyMastersConf - Escalabilidade do S.O. ao Rails
 
Guia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeGuia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidade
 
Técnicas para ser escalável com PHP
Técnicas para ser escalável com PHPTécnicas para ser escalável com PHP
Técnicas para ser escalável com PHP
 
Segurança em sistemas distribuidos
Segurança em sistemas distribuidosSegurança em sistemas distribuidos
Segurança em sistemas distribuidos
 
Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)
Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)
Manual de Introdução ao Autocad R14 - Aula 04 - O Windows Explorer (W95)
 
Aula 1 módulo 1 (tec emergentes)-ok
Aula 1   módulo 1 (tec emergentes)-okAula 1   módulo 1 (tec emergentes)-ok
Aula 1 módulo 1 (tec emergentes)-ok
 
Apresentação cdi+curso
Apresentação cdi+cursoApresentação cdi+curso
Apresentação cdi+curso
 
Aula 5 mídias digitais e sociais
Aula 5   mídias digitais e sociaisAula 5   mídias digitais e sociais
Aula 5 mídias digitais e sociais
 
Escalabilidade e Disponibilidade em Arquiteturas Web
Escalabilidade e Disponibilidade em Arquiteturas WebEscalabilidade e Disponibilidade em Arquiteturas Web
Escalabilidade e Disponibilidade em Arquiteturas Web
 
Aula 2 mob social
Aula 2   mob socialAula 2   mob social
Aula 2 mob social
 
Aula 2 apps
Aula 2   appsAula 2   apps
Aula 2 apps
 
Aula 3 ideias
Aula 3   ideiasAula 3   ideias
Aula 3 ideias
 
Apresentação cdi+curso12
Apresentação cdi+curso12Apresentação cdi+curso12
Apresentação cdi+curso12
 
Aula 5 mídias digitais e sociais
Aula 5   mídias digitais e sociaisAula 5   mídias digitais e sociais
Aula 5 mídias digitais e sociais
 
Aula 1 módulo 1 (tec emergentes)-ok
Aula 1   módulo 1 (tec emergentes)-okAula 1   módulo 1 (tec emergentes)-ok
Aula 1 módulo 1 (tec emergentes)-ok
 
Aula 3 fabricas
Aula 3   fabricasAula 3   fabricas
Aula 3 fabricas
 
Palestra inovação tecnológica e desenvolvimento econômico e social
Palestra inovação tecnológica e desenvolvimento econômico e socialPalestra inovação tecnológica e desenvolvimento econômico e social
Palestra inovação tecnológica e desenvolvimento econômico e social
 
Fábrica de Aplicativos - Demo Day Artemisia
Fábrica de Aplicativos - Demo Day ArtemisiaFábrica de Aplicativos - Demo Day Artemisia
Fábrica de Aplicativos - Demo Day Artemisia
 
Gerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisGerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas Operacionais
 
Escalabilidade de Aplicações Web
Escalabilidade de Aplicações WebEscalabilidade de Aplicações Web
Escalabilidade de Aplicações Web
 

Ähnlich wie Otimização e Escalabilidade

Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroMichael Castillo Granados
 
Apresentacao codeigniter
Apresentacao codeigniterApresentacao codeigniter
Apresentacao codeigniterAndré Tagliati
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanosCaike Souza
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosRegis Magalhães
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage apiSuissa
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template EngineDiego Tremper
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para issoJunior Conte
 
Pgads42
Pgads42Pgads42
Pgads42csmp
 
Pg2
Pg2Pg2
Pg2csmp
 
Introdução ao framework CakePHP
Introdução ao framework CakePHPIntrodução ao framework CakePHP
Introdução ao framework CakePHPigorpimentel
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesAlmir Mendes
 

Ähnlich wie Otimização e Escalabilidade (20)

Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 
Apresentacao codeigniter
Apresentacao codeigniterApresentacao codeigniter
Apresentacao codeigniter
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
MongoDB
MongoDBMongoDB
MongoDB
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template Engine
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Palestra de PDO
Palestra de PDOPalestra de PDO
Palestra de PDO
 
Você não deveria escrever uma API para isso
Você não deveria escrever uma API para issoVocê não deveria escrever uma API para isso
Você não deveria escrever uma API para isso
 
Pgads42
Pgads42Pgads42
Pgads42
 
Pg2
Pg2Pg2
Pg2
 
Introdução ao framework CakePHP
Introdução ao framework CakePHPIntrodução ao framework CakePHP
Introdução ao framework CakePHP
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 

Otimização e Escalabilidade

  • 2. Para quem não me conhece Graduando 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;
  • 3. Otimização é.. obter o máximo de resultados com a mesma quantidade de recursos.
  • 4. Escalabilidade é.. habilidade de manipular uma porção crescente de trabalho de forma uniforme, ou estar preparado para crescer.
  • 5. Demanda de processamento Volume de dados
  • 6. Casos famosos Twitter – instabilidade devido a falha na estratégia de escalabilidade Digg – teve de mudar toda a arquitetura da aplicação para manter-se online World ofWarcraft – durante o lançamento, foi sobrecarregado e ficou fora do ar Youtube, LiveJournal, Facebook....
  • 7. Como otimizar e ser escalável?
  • 9. Código-fonte Dicas Profiling Infra-estrutura Usando cache opcode memcache Banco de dados Otimização de consultas Distribuindo banco de dados Distribuindo tarefas Arquiteturas escaláveis Computação em nuvem
  • 11. Dicas echoé mais rápido que print(); utilize aspas 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; ...
  • 12. 1%
  • 13. Dicas Evite funções pesadas nas condições dos loops for($i=0; $i < count($obj->metodoLento()); $i++) { // faça alguma coisa }
  • 14. Dicas Evite funções pesadas nas condições dos loops $total = count($obj->metodoLento()); for($i=0; $i < $total; $i++) { // faça alguma coisa }
  • 15. Dicas Lembre-se de executar exit() depois dos redirecionamentos if($redirect) { header("Location: index.php"); } // algum código aqui
  • 16. Dicas Lembre-se de executar exit() depois dos redirecionamentos if($redirect) { header("Location: index.php"); exit(); } // algum código aqui
  • 17. Dicas Evite SQLs dentro de loops foreach($usuarios as $u) { mysql_query(" INSERT INTO usuario (nome, email) VALUES('".$u->nome."','".$u->email."') ", $conn); }
  • 18. Dicas Evite SQLs dentro de loops $sql = "INSERT INTO usuario (nome, email) VALUES"; $values = array() foreach($usuarios as $u) { $values[] = "('".$u->nome."','".$u->email."')"; } mysql_query($sql.implode("," , $values), $conn);
  • 19. Dicas Evite SQLs dentro de loops INSERT INTO usuario (nome, email) VALUES ('Leo Hackin','leo@hackin.com'), ('Almir Mendes','almir@mendes.com'), ('Reinaldo Junior','reinaldo@junior.com')
  • 20. Dicas Utilize páginas estáticas Requisições a 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 dados A ausência de índices nas colunas que aparecem em cláusulas WHERE ou JOIN pode 'destruir' a performance da sua aplicação.
  • 21. Dicas Utilize curto-circuito nas consultas SQL
  • 22. Profiling É a investigação do 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
  • 23. Profiling Encontrar os gargalos Como analisar seu código? XDebug XHProf
  • 24. Profiling - XDebug Instalação $peclinstallxdebug Configuração php.ini zend_extension=/path/to/extensions/xdebug.so xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /var/log/xdebug/ xdebug.trace_format = 1 Ferramentas para analisar os dados KCacheGrind (Linux) WinCacheGrind (Windows)
  • 25.
  • 27. Caches Banco de dados Computação em nuvem
  • 28. Opcodecache PHP compila o script O opcode é executado HTML enviado ao navegador
  • 29. Opcodecache CacheOpcode PHP compila o script O opcode é executado HTML enviado ao navegador
  • 30. Opcodecache Opções disponíveis APC eAccelerator ZendOptimizer ionCubeEncoder ...
  • 33. Cliente ? Apache Apache Apache MySQL
  • 34. Cliente Apache Apache Apache MySQL Sessionserver
  • 35. Memcache O que é? Como funciona? Como utilizar em sua aplicação?
  • 36. Memcache - Session $host = “memcache.exemple.com”; $port = 11211; $session_path = "tcp://$host:$port"; ini_set('session.save_handler', 'memcache'); ini_set('session.save_path', $session_path);
  • 37. Memcache - Session $sess_serv = array( array('host' => 'memcache1.exemple.com', 'port' => 11211), array('host' => 'memcache2.exemple.com', 'port' => 11211), ); $path = array(); foreach($sess_serv as $s) $path[] = 'tcp://'.$s['host'].':'.$s['port'] ini_set('session.save_handler', 'memcache'); ini_set('session.save_path', implode(',', $path));
  • 38. Memcache - Dados $memcache = new Memcache; $memcache->connect('localhost', 11211); $object = new stdClass; $object->str_attr = 'test'; $object->int_attr = 123; $memcache->set('key', $object, false, 10); $result = $memcache->get('key');
  • 39. Memcache - SQL functionquery_with_cache($sql, $timeout = 1800) { global $memcache; $key = md5($sql); if (($result = $memcache->get($key)) === false) { $result = query_and_fetch($sql); $memcache->set($key, $result , false, $timeout); } return $result; }
  • 40. Banco de dados Master-slave Um (e apenas um) master Um ou mais slaves Todas as escritas são enviadas ao master Leituras são distribuídas entre todos os nós Falhas Único ponto de falha Gargalo
  • 41. Banco de dados Servidores de Aplicação Master Slave Slave Slave Escrita Leitura
  • 42. Banco de dados Master-master Um ou mais masters Escritas e leituras vão para todos os masters Escritas são replicadas entre si Falhas Alta complexidade Introduz altas latências de comunicação
  • 43. Banco de dados Servidores de Aplicação Master Master Master Escrita Leitura
  • 44. Banco de dados Particionamento vertical Colocar as tabelas em servidores diferentes agrupadas por área funcional Escalona seus dados por funcionalidade Joins são realizados na aplicação Falhas Perde os relacionamentos reais do banco de dados Escalabilidade limitada
  • 45. Banco de dados Servidores de Aplicação Clients Comments Products
  • 46. Banco de dados Particionamento horizontal Separe os dados por chaves e coloque em servidores diferentes (sharding) Escalona seus dados por chave Joins são realizados na aplicação Necessita de um “roteamento” das consultas na aplicação Falha Perde os relacionamentos reais do banco de dados
  • 47. Banco de dados Servidores de Aplicação Clients (i – q) Clients (r – z) Clients (a – h)
  • 48. CloudHosting O que é? Flexibilidade Baixo custo?
  • 51. ?
  • 52. Obrigado! Andre Metzen metzen@imasters.com.br @metzen