Otimizando aplicações Zend Framework - Tchelinux
Upcoming SlideShare
Loading in...5
×
 

Otimizando aplicações Zend Framework - Tchelinux

on

  • 1,980 views

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

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

Statistics

Views

Total Views
1,980
Views on SlideShare
1,977
Embed Views
3

Actions

Likes
3
Downloads
28
Comments
0

2 Embeds 3

http://coderwall.com 2
http://us-w1.rockmelt.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Otimizando aplicações Zend Framework - Tchelinux Otimizando aplicações Zend Framework - Tchelinux Presentation Transcript

    • Otimizando aplicações com Zend Framework elton luís minetto @eminettosegunda-feira, 15 de agosto de 11
    • 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
    • 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?” 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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 Sem APC Com APC Transações/segsegunda-feira, 15 de agosto de 11
    • 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
    • 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
    • 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
    • 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
    • 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 { 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
    • 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 { 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
    • Banco de dados usando cache em Memcache Transações por segundo: 102,85segunda-feira, 15 de agosto de 11
    • 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
    • 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
    • Cache do HTML Transações por segundo: 109,11segunda-feira, 15 de agosto de 11
    • 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
    • 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
    • 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
    • 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
    • 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 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
    • 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 Inclusão Gearman Transações/segsegunda-feira, 15 de agosto de 11
    • 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
    • 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
    • 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