otimizando aplicações zend framework - tchelinux
DESCRIPTION
Apresentação sobre otimizações em aplicações Zend Framework. Apresentado no Tchelinux Bento GonçalvesTRANSCRIPT
![Page 1: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/1.jpg)
Otimizando aplicações com Zend Framework
elton luís minetto@eminetto
segunda-feira, 15 de agosto de 11
![Page 2: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/2.jpg)
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 Coderockr
segunda-feira, 15 de agosto de 11
![Page 3: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/3.jpg)
Métricas
segunda-feira, 15 de agosto de 11
![Page 4: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/4.jpg)
segunda-feira, 15 de agosto de 11
![Page 5: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/5.jpg)
segunda-feira, 15 de agosto de 11
![Page 6: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/6.jpg)
segunda-feira, 15 de agosto de 11
![Page 7: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/7.jpg)
segunda-feira, 15 de agosto de 11
![Page 8: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/8.jpg)
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 recurso
segunda-feira, 15 de agosto de 11
![Page 9: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/9.jpg)
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
![Page 10: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/10.jpg)
Conceitos
O que medir
Transações por unidade de tempo
Tempo de resposta ou latência
Escalonamento
Concorrência
segunda-feira, 15 de agosto de 11
![Page 11: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/11.jpg)
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.9
segunda-feira, 15 de agosto de 11
![Page 12: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/12.jpg)
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
![Page 13: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/13.jpg)
Criando o projeto
Criado um virtual host no apache
Adicionar no /etc/hosts:
<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>
zf create project blog
127.0.0.1 blog.local
segunda-feira, 15 de agosto de 11
![Page 14: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/14.jpg)
O primeiro teste(sem APC)
Transações por segundo: 51,55
segunda-feira, 15 de agosto de 11
![Page 15: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/15.jpg)
APC
Transações por segundo: 110,94
segunda-feira, 15 de agosto de 11
![Page 16: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/16.jpg)
0
30
60
90
120
Sem APC Com APC
Transações/seg
segunda-feira, 15 de agosto de 11
![Page 17: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/17.jpg)
Banco de dados
mysql -uroot -prootcreate 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')"done
segunda-feira, 15 de agosto de 11
![Page 18: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/18.jpg)
Banco de dados
zf configure dbadapter "adapter=Pdo_Mysql&host=localhost&username=root&password=root&dbname=performance"zf create db-table Post postzf create controller Post
segunda-feira, 15 de agosto de 11
![Page 19: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/19.jpg)
Banco de dados
<?phpclass 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
![Page 20: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/20.jpg)
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
![Page 21: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/21.jpg)
Banco de dados
Transações por segundo: 85,25
segunda-feira, 15 de agosto de 11
![Page 22: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/22.jpg)
Banco de dados usando cache em disco
<?phpclass 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
![Page 23: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/23.jpg)
Banco de dados usando cache em disco
Transações por segundo: 100,70
segunda-feira, 15 de agosto de 11
![Page 24: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/24.jpg)
Banco de dados usando cache em MEMCACHE
<?phpclass 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
![Page 25: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/25.jpg)
Banco de dados usando cache em Memcache
Transações por segundo: 102,85
segunda-feira, 15 de agosto de 11
![Page 26: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/26.jpg)
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
![Page 27: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/27.jpg)
Cache do html
<?phpclass 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
![Page 28: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/28.jpg)
Cache do HTML
Transações por segundo: 109,11
segunda-feira, 15 de agosto de 11
![Page 29: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/29.jpg)
0
27,5
55,0
82,5
110,0
BD Cache em Disco Cache em Memcache Cache de HTML
Transações/seg
segunda-feira, 15 de agosto de 11
![Page 30: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/30.jpg)
Escalando
0
75
150
225
300
100 200 500 1000
Requisições por segundo/usuários simultâneos
Cache em disco Memcached
segunda-feira, 15 de agosto de 11
![Page 31: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/31.jpg)
Inclusão em banco de dados
mysql -uroot -proot performancecreate table access (id int primary key auto_increment, page varchar(100), time timestamp default current_timestamp);exit;zf create db-table Access access
segunda-feira, 15 de agosto de 11
![Page 32: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/32.jpg)
Inclusão em banco de dados
//novo método no PostControllerpublic 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
![Page 33: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/33.jpg)
Inclusão em banco de dados
Transações por segundo: 108,45
segunda-feira, 15 de agosto de 11
![Page 34: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/34.jpg)
Inclusão em banco de dados - Gearman
//novo método no PostControllerpublic 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
![Page 35: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/35.jpg)
Inclusão em banco de dados - gearman
Transações por segundo: 109,61
segunda-feira, 15 de agosto de 11
![Page 36: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/36.jpg)
108,0
108,5
109,0
109,5
110,0
Inclusão Gearman
Transações/seg
segunda-feira, 15 de agosto de 11
![Page 37: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/37.jpg)
Escalando
0
75
150
225
300
100 200 500 10000
Requisições por segundo/usuários simultâneos
Insert MySQL Gearman
segunda-feira, 15 de agosto de 11
![Page 38: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/38.jpg)
Referências
http://framework.zend.comhttp://talks.php.net/show/oscon06http://talks.php.net/show/digg/http://vimeo.com/20387525http://vimeo.com/20565041http://www.slideshare.net/eminetto/ao-infinito-e-alm-com-php-memcached-e-gearmanhttp://www.slideshare.net/eminetto/desenvolvendo-aplicaes-web-escalveis-com-php
segunda-feira, 15 de agosto de 11
![Page 39: Otimizando aplicações Zend Framework - Tchelinux](https://reader034.vdocuments.com.br/reader034/viewer/2022051413/55394eb9550346f53d8b496a/html5/thumbnails/39.jpg)
Contato
<?php$card = array( 'nome' => 'Elton Luís Minetto', 'site' => 'http://www.eltonminetto.net', 'e-mail' => '[email protected]', 'twitter' => '@eminetto', 'all' => 'http://eminetto.me');var_dump($card);
segunda-feira, 15 de agosto de 11