Otimizando aplicações com Zend Framework                                    elton luís minetto                            ...
Quem sou Eu?          Graduado e pós-graduado em Ciência da Computação          Trabalha com PHP/MySQL desde 2000. Trabalh...
Métricassegunda-feira, 15 de agosto de 11
segunda-feira, 15 de agosto de 11
segunda-feira, 15 de agosto de 11
segunda-feira, 15 de agosto de 11
segunda-feira, 15 de agosto de 11
Conceitos               Avaliação de desempenho                      “Quão bem isto executa?”                      Determi...
Conceitos               Avaliar a aplicação inteira (full-stack)                      ab; siege; http_load; jMeter        ...
Conceitos               O que medir                      Transações por unidade de tempo                      Tempo de res...
A máquina          Intel(R) Core(TM)2 Duo CPU   E6550 @ 2.33GHz, 2GB RAM          Ubuntu Server; Apache 2.2.16; MySQL 5.1....
Ferramentas               siege                      siege -c 100 -r 10 -d 1 http://URL               Observações:        ...
Criando o projeto                    zf create project blog               Criado um virtual host no apache                ...
O primeiro teste          (sem APC)               Transações por segundo: 51,55segunda-feira, 15 de agosto de 11
APC               Transações por segundo: 110,94segunda-feira, 15 de agosto de 11
120                       90                       60                       30                        0                   ...
Banco de dados          mysql -uroot -proot          create database performance;          use performance;          creat...
Banco de dados          zf configure dbadapter "adapter=Pdo_Mysql&host=localhost&username=root&password=root&dbname=perfor...
Banco de dados          <?php          class PostController extends Zend_Controller_Action          {              public ...
Banco de dados               application/views/scripts/post/index.phtml          Posts: <br />          <dl>              ...
Banco de dados               Transações por segundo: 85,25segunda-feira, 15 de agosto de 11
Banco de dados usando          cache em disco    <?php    class PostController extends Zend_Controller_Action {        pub...
Banco de dados usando          cache em disco               Transações por segundo: 100,70segunda-feira, 15 de agosto de 11
Banco de dados usando          cache em MEMCACHE     <?php     class PostController extends Zend_Controller_Action {      ...
Banco de dados usando          cache em Memcache               Transações por segundo: 102,85segunda-feira, 15 de agosto d...
Cache do html               copiar views/scripts/post/index.phtml para views/scripts/post/_index.phtml               Alter...
Cache do html          <?php          class PostController extends Zend_Controller_Action {              public function i...
Cache do HTML               Transações por segundo: 109,11segunda-feira, 15 de agosto de 11
110,0                       82,5                       55,0                       27,5                          0         ...
Escalando                                        Requisições por segundo/usuários simultâneos                           30...
Inclusão em banco de dados           mysql -uroot -proot performance           create table access (id int primary key aut...
Inclusão em banco de dados          //novo método no PostController          public function insertAction() {             ...
Inclusão em banco de dados               Transações por segundo: 108,45segunda-feira, 15 de agosto de 11
Inclusão em banco de dados          - Gearman           //novo método no PostController           public function insertAc...
Inclusão em banco de dados          - gearman               Transações por segundo: 109,61segunda-feira, 15 de agosto de 11
110,0                    109,5                    109,0                    108,5                    108,0                 ...
Escalando                                    Requisições por segundo/usuários simultâneos                  300            ...
Referências               http://framework.zend.com               http://talks.php.net/show/oscon06               http://t...
Contato          <?php          $card = array(              nome => Elton Luís Minetto,              site => http://www.el...
Upcoming SlideShare
Loading in …5
×

Otimizando aplicações Zend Framework - Tchelinux

2,092 views

Published on

Apresentação sobre otimizações em aplicações Zend Framework. Apresentado no Tchelinux Bento Gonçalves

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,092
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
32
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Otimizando aplicações Zend Framework - Tchelinux

  1. 1. Otimizando aplicações com Zend Framework elton luís minetto @eminettosegunda-feira, 15 de agosto de 11
  2. 2. Quem sou Eu? Graduado e pós-graduado em Ciência da Computação Trabalha com PHP/MySQL desde 2000. Trabalha com Linux desde 1997. Professor desde 2004. Autor do livro Frameworks para Desenvolvimento em PHP - Editora Novatec, co-autor do livro Grid Computing in Research and Education - IBM Redbooks e autor do e-book Zend Framework na prática Membro do PHPSC e sócio da Coderockrsegunda-feira, 15 de agosto de 11
  3. 3. Métricassegunda-feira, 15 de agosto de 11
  4. 4. segunda-feira, 15 de agosto de 11
  5. 5. segunda-feira, 15 de agosto de 11
  6. 6. segunda-feira, 15 de agosto de 11
  7. 7. segunda-feira, 15 de agosto de 11
  8. 8. Conceitos Avaliação de desempenho “Quão bem isto executa?” Determinar a capacidade de um sistema Análise de desempenho “Por que isso executa desta maneira?” Determinar onde a aplicação gasta mais tempo e recursosegunda-feira, 15 de agosto de 11
  9. 9. Conceitos Avaliar a aplicação inteira (full-stack) ab; siege; http_load; jMeter ou somente um componente(single-component) MySQL Benchmark Suite/innotop; (MySQL) ; Xdebug (PHP); ySlow(html+css+js)segunda-feira, 15 de agosto de 11
  10. 10. Conceitos O que medir Transações por unidade de tempo Tempo de resposta ou latência Escalonamento Concorrênciasegunda-feira, 15 de agosto de 11
  11. 11. A máquina Intel(R) Core(TM)2 Duo CPU E6550 @ 2.33GHz, 2GB RAM Ubuntu Server; Apache 2.2.16; MySQL 5.1.49; PHP 5.3.3; Zend Framework 1.11.9segunda-feira, 15 de agosto de 11
  12. 12. Ferramentas siege siege -c 100 -r 10 -d 1 http://URL Observações: Executado 3 vezes e gerada a média A cada execução são reiniciados os serviços (apache, mysql, memcached, nginx, gearman)segunda-feira, 15 de agosto de 11
  13. 13. Criando o projeto zf create project blog Criado um virtual host no apache <VirtualHost *:80> ServerName blog.local DocumentRoot /var/www/blog/public SetEnv APPLICATION_ENV "development" <Directory /var/www/blog/public> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> Adicionar no /etc/hosts: 127.0.0.1 blog.localsegunda-feira, 15 de agosto de 11
  14. 14. O primeiro teste (sem APC) Transações por segundo: 51,55segunda-feira, 15 de agosto de 11
  15. 15. APC Transações por segundo: 110,94segunda-feira, 15 de agosto de 11
  16. 16. 120 90 60 30 0 Sem APC Com APC Transações/segsegunda-feira, 15 de agosto de 11
  17. 17. Banco de dados mysql -uroot -proot create database performance; use performance; create table post (id int primary key auto_increment, title varchar(100), text text); exit; for ((i=1;i<100;i++)) ; do mysql -uroot -proot performance -e "insert into post values (null, Titulo $i, Texto $i)" donesegunda-feira, 15 de agosto de 11
  18. 18. Banco de dados zf configure dbadapter "adapter=Pdo_Mysql&host=localhost&username=root&password=root&dbname=performance" zf create db-table Post post zf create controller Postsegunda-feira, 15 de agosto de 11
  19. 19. Banco de dados <?php class PostController extends Zend_Controller_Action { public function indexAction() { $post = new Application_Model_DbTable_Post(); $this->view->entries = $post->fetchAll(); } }segunda-feira, 15 de agosto de 11
  20. 20. Banco de dados application/views/scripts/post/index.phtml Posts: <br /> <dl> <?php foreach ($this->entries as $entry): ?> <dt><?php echo $this->escape($entry->title) ?></dt> <dd><?php echo $this->escape($entry->text) ?></dd> <?php endforeach ?> </dl>segunda-feira, 15 de agosto de 11
  21. 21. Banco de dados Transações por segundo: 85,25segunda-feira, 15 de agosto de 11
  22. 22. Banco de dados usando cache em disco <?php class PostController extends Zend_Controller_Action { public function indexAction() { $frontendOptions = array( lifetime => 7200, automatic_serialization => true ); $backendOptions = array(cache_dir => /tmp/); $cache = Zend_Cache::factory(Core,File,$frontendOptions,$backendOptions); if( ($result = $cache->load(posts)) === false ) { $post = new Application_Model_DbTable_Post(); $result = $post->fetchAll(); $cache->save($result,posts); } $this->view->entries = $result; } }segunda-feira, 15 de agosto de 11
  23. 23. Banco de dados usando cache em disco Transações por segundo: 100,70segunda-feira, 15 de agosto de 11
  24. 24. Banco de dados usando cache em MEMCACHE <?php class PostController extends Zend_Controller_Action { public function indexAction() { $frontendOptions = array(lifetime => 7200, automatic_serialization => true); $backendOptions = array(servers => array( array(host => localhost,port => 11211,persistent => true) )); $cache = Zend_Cache::factory(Core, Memcached , $frontendOptions ,$backendOptions); if( ($result = $cache->load(posts)) === false ) { $post = new Application_Model_DbTable_Post(); $result = $post->fetchAll(); $cache->save($result,posts); } $this->view->entries = $result; } }segunda-feira, 15 de agosto de 11
  25. 25. Banco de dados usando cache em Memcache Transações por segundo: 102,85segunda-feira, 15 de agosto de 11
  26. 26. Cache do html copiar views/scripts/post/index.phtml para views/scripts/post/_index.phtml Alterar views/scripts/post/index.phtml para: <?php echo $this->page; ?>segunda-feira, 15 de agosto de 11
  27. 27. Cache do html <?php class PostController extends Zend_Controller_Action { public function indexAction() { $frontendOptions = array(lifetime => 7200, automatic_serialization => true); $backendOptions = array(servers => array( array(host => localhost,port => 11211,persistent => true))); $cache = Zend_Cache::factory(Core, Memcached , $frontendOptions , $backendOptions); if( ($page = $cache->load(posts_page)) === false ) { $post = new Application_Model_DbTable_Post(); $this->view->entries = $post->fetchAll(); $page = $this->view->render(post/_index.phtml); $cache->save($page,posts_page); } $this->view->page = $page; } }segunda-feira, 15 de agosto de 11
  28. 28. Cache do HTML Transações por segundo: 109,11segunda-feira, 15 de agosto de 11
  29. 29. 110,0 82,5 55,0 27,5 0 BD Cache em Disco Cache em Memcache Cache de HTML Transações/segsegunda-feira, 15 de agosto de 11
  30. 30. Escalando Requisições por segundo/usuários simultâneos 300 225 150 75 0 100 200 500 1000 Cache em disco Memcachedsegunda-feira, 15 de agosto de 11
  31. 31. Inclusão em banco de dados mysql -uroot -proot performance create table access (id int primary key auto_increment, page varchar(100), time timestamp default current_timestamp); exit; zf create db-table Access accesssegunda-feira, 15 de agosto de 11
  32. 32. Inclusão em banco de dados //novo método no PostController public function insertAction() { $access = new Application_Model_DbTable_Access(); $data = array(page=>/insert); $access->insert($data); echo Inserido; exit; }segunda-feira, 15 de agosto de 11
  33. 33. Inclusão em banco de dados Transações por segundo: 108,45segunda-feira, 15 de agosto de 11
  34. 34. Inclusão em banco de dados - Gearman //novo método no PostController public function insertAction() { $client= new GearmanClient(); $client->addServer(); $data = array(page=>/insert); $client->doBackground("access_queue", serialize($data)); echo Inserido; exit; }segunda-feira, 15 de agosto de 11
  35. 35. Inclusão em banco de dados - gearman Transações por segundo: 109,61segunda-feira, 15 de agosto de 11
  36. 36. 110,0 109,5 109,0 108,5 108,0 Inclusão Gearman Transações/segsegunda-feira, 15 de agosto de 11
  37. 37. Escalando Requisições por segundo/usuários simultâneos 300 225 150 75 0 100 200 500 10000 Insert MySQL Gearmansegunda-feira, 15 de agosto de 11
  38. 38. Referências http://framework.zend.com http://talks.php.net/show/oscon06 http://talks.php.net/show/digg/ http://vimeo.com/20387525 http://vimeo.com/20565041 http://www.slideshare.net/eminetto/ao-infinito-e-alm-com-php-memcached-e-gearman http://www.slideshare.net/eminetto/desenvolvendo-aplicaes-web-escalveis-com-phpsegunda-feira, 15 de agosto de 11
  39. 39. Contato <?php $card = array( nome => Elton Luís Minetto, site => http://www.eltonminetto.net, e-mail => eminetto@coderockr.com, twitter => @eminetto, all => http://eminetto.me ); var_dump($card);segunda-feira, 15 de agosto de 11

×