SlideShare a Scribd company logo
1 of 31
Download to read offline
Melhorando a performance de aplicações com o
uso do MemCache




                             Osdeni José Sadzinski
                                Elton Luís Minetto
Osdeni José Sadzinski

  Graduado e pós-graduado em Sistemas de
   Informação. Cursando MBA em Gerenciamento de
   Projetos
  Trabalha com PHP desde 2004
  Membro do PHPSC
  Desenvolvedor Web da Drimio
Elton Luís Minetto

  Graduado e pós-graduado em Ciência da Computação.
   Cursando MBA em Gerenciamento de Projetos
  Trabalha com PHP desde 2000
  Autor dos livros Frameworks para Desenvolvimento
   em PHP - Editora Novatec e Grid Computing in
   Research and Education – IBM RedBooks
  Membro do PHPSC
  Gerente de Desenvolvimento da Drimio e professor
   na Sociesc (Joinville)/Unochapecó(Chapecó)
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 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
Memcached

  Sistema distribuído e de alta performance para fazer
   cache de objetos em memória RAM. É genério por
   natureza mas muito usado para acelerar aplicações
   web dinâmicas, reduzindo a carga de bases de dados,
   sessões de usuários, arquivos CSS.
  Foi desenvolvido pela Danga Interactive para
   aumentar a performance do site LiveJournal.com,
   que possui mais de 20 milhões de page views por dia
   e atende 1 milhão de usuários. memcached reduziu a
   carga dos servidores de banco de dados forncecendo
   páginas mais rápidas e melhor utilização de recursos.
Porque usar?

  Escalável: fácil adicionar máquinas e instâncias
  RAM é muito mais rápido que I/O em disco
  Alivia a carga do banco de dados
  Muito flexível: pode armazenar qualquer dado, desde
   que não ultrapasse 1 MB
  Bibliotecas client disponíveis em diversas linguagens
   (PHP, C, Java, Ruby, Python)
Como funciona?

  Armazena qualquer coisa que pode ser serializado
  Armazena com uma chave única (255 caracteres) e
   tempo de validade
  O programador usa da seguinte forma :
     Encontrou no cache? Retorna os dados
     Não encontrou no cache? Processa, armazena no cache e
      retorna o dado
Como funciona?
O que armazenar?

  Resultados de consultas SQL
  Páginas inteiras
  Sessões de usuários
  Fragmentos de HTML gerados
  Imagens (thumbnails?)
  Arquivos css
  Arquivos js
  etc
Memcached – Como instalar ( Linux)

  Baixar código em http://www.danga.com/memcached/
  Seguir o procedimento:
     tar -xvzf memcached-1.2.8.tar.gz
     cd memcached-1.2.8
     ./configure
     make
     make install (executar como root)
  No exemplo abaixo iniciamos o daemon com 128MB
   RAM, ouvindo na porta 11211 no ip 127.0.0.1
     /usr/local/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211
  Pode-se criar quantas instâncias forem necessárias,
   mudando a porta. Assim aumenta-se o espaço total
   do cache
PHP e Memcached (em Linux)

  Download do módulo em http://pecl.php.net/package/
   memcache.
  Executar:
     tar -xvzf memcache-2.2.5.tgz
     cd memcache-2.2.5
     phpize
     ./configure
     make
     make install (executar como root)
  Adicionar a linha abaixo no php.ini e reiniciar o
   Apache
     extension=/usr/local/lib/php/extensions/memcache.so (o
      caminho é indicado no make install)
API

  Comandos de armazenamento:
    set, add, replace, append
  Comandos de recuperação:
    get
  Comandos de exclusão:
    delete
  Outros comandos:
    stats, flush_all, version, verbosity, quit
Como usar com PHP

<?php //exemplo usando cliente PECL	
$memcache = new Memcache;	
$memcache->connect('localhost', 11211) or die (quot;Could not connectquot;);	
$version = $memcache->getVersion();	
echo quot;Server's version: quot;.$version.quot;<br/>nquot;;	
$tmp_object = new stdClass;	
$tmp_object->str_attr = 'test';	
$tmp_object->int_attr = 123;	
//params: chave, objeto, comprimimir ou não, tempo em segundos	
$memcache->set('key', $tmp_object, false, 10) ;	
$get_result = $memcache->get('key');	
echo quot;Data from the cache:<br/>nquot;;	
var_dump($get_result);	
?>
Como usar com PHP

<?php	
$memcache = new Memcache;	
$memcache->connect('localhost', 11211);	
$memcache->connect('localhost', 11212);	
$memcache->connect(’192.168.0.10', 11212);	
$conteudo = $memcache->get('estados');	
if($conteudo === false) {	
  	$uf = array('SC','RS','SP');	
  	$memcache->set('estados', $uf, false, 100) ;	
  	$conteudo = $uf;	
}	
var_dump($conteudo);	
?>
Como usar com Zend Framework

$frontendOptions = array('lifetime' => 72000,'automatic_serial
   ization' => false );	
$backendOptions = array('servers' => array(	
array('host' => 'localhost', 'port' => 11211, 'persistent' =>
   true )));	
$cache = Zend_Cache::factory('Core', 'Memcached’ ,
   $frontendOptions , $backendOptions);	
if(!$result = $cache->load('myresult')) {	
  	$db = Zend_Db::factory( [...] );	
  	$result = $db->fetchAll('SELECT * FROM huge_table');	
  	$cache->save($result, 'myresult');	
} else {	
  	// cache hit! shout so that we know	
  	echo quot;This one is from cache!nn”;	
}	
print_r($result);
Como monitorar

  Plugin para o Nagios
     http://search.cpan.org/~zigorou/Nagios-Plugins-
      Memcached-0.02/lib/Nagios/Plugins/Memcached.pm
  memcache.php
       http://livebookmark.net/journal/2008/05/21/
        memcachephp-stats-like-apcphp/
Quem usa?

  Facebook
     805 servidores 8-core. 28TB de RAM. 300K req/seg (Set.
      2008)
     Desenvolveu fork com suporte a UDP
   http://github.com/fbmarc/facebook-memcached/tree/master
  Flickr
     38K req/seg. 12 milhões de objetos (Set. 2008)
  Digg
  Inphonex – 6 servidores armazenando sessões de
   usuários
  Doctrine (sim! coloquei isso durante a palestra do
   Guilherme Blanco)
Drimio: Uma Rede Social focada em MARCAS
Drimio: Uma Rede Social focada em MARCAS

  O Drimio é uma Rede Social que catalisa e amplia o
   relacionamento entre consumidor e marca,permitindo
   que cada vez mais o

  usuário e consumidor SEJA e FAÇA a MARCA!!
Conteúdo: Co-criação e COLABORAÇÃO

  Manutenção participativa de um hub de CONTEÚDO,
   uma coleção de:
    Vídeos, fotos, artigos, blogs, outras redes sociais
    Fóruns, entrevistas com especialistas e representantes da
     MARCA, “hotsites”
    Lançamentos, propagandas e campanhas, exclusividades
    Eventos culturais e esportivos patrocinados pela MARCA
    Notícias genéricas, notícias oficiais de interesse público
     geradas pela própria MARCA (news release, media release,
     press release)
    Tudo sobre a Marca
Quem são MARCAS na Drimio ?

  Extrapolamos o conceito limitante de MARCAS de
   produtos e anunciantes tradicionais
  Na Drimio as 5.564 cidades brasileiras são MARCAS
     Procuram ampliar sua visibilidade no mercado para tornarem-se
      destino do turismo de lazer e de negócios
  Universidades, Associações, Festas regionais, Times de
   Futebol, Escolas de Samba, Praias, Concursos Nacionais,
   Casas noturnas, Feiras e Eventos, e inclusive
   Celebridades são MARCAS
     Todas estas entidades estão sujeitas aos mesmos princípios
      que governam a existência e desenvolvimento de qualquer
      MARCA no mercado
Case - Drimio

  Usuários podem compartilhar vídeos, links, imagens,
   notícias, enviar mensagens e participar de fórum
   sobre suas marcas de maior afinidade.
  Integração com Youtube, Twitter, Google Search,
   Yahoo Search, Flickr, leitura e geração de RSS/Atom.
  Versão mobile com suporte a iPhone, Nokia N95,
   Blackberry e outros dispositivos
  Crescimento de 300% no número de usuários nas
   primeiras 24 horas depois do lançamento
  Triplicou o número de pageviews nas primeiras 24
   horas depois do lançamento
Exemplo

                      Requisicões
90
                                    84,66666667

80


70


60           57


50

                                                  Requisicões
40


30


20


10


 0
          Sem cache                 Memcache
Referências

  http://www.slideshare.net/FordAntiTrust/php-
   performance-with-apc-memcached
  http://www.slideshare.net/TheMarco/memcached-ftw
  http://www.slideshare.net/benramsey/give-your-site-
   a-boost-with-memcache
  http://www.slideshare.net/cb1kenobi/memcached-
   and-mysql
  http://www.danga.com/memcached/
  http://www.danga.com/memcached/users.bml
Perguntas?
Contato

Osdeni José Sadzinski
http://www.osdeni.net/
osdeni.sadzinski@drimio.com

Elton Luís Minetto
http://www.eltonminetto.net
elton.minetto@drimio.com
http://www.twitter.com/eminetto
Melhorando a performance de aplicações com o uso do MemCache

More Related Content

Similar to Melhorando a performance de aplicações com o uso do MemCache

Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisManuel Lemos
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoIgor Sobreira
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Rodrigo Kono
 
PHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiências
PHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiênciasPHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiências
PHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiênciasManuel Lemos
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanosCaike Souza
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Giovanni Bassi
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net MvcGiovanni Bassi
 
Netbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java DesktopNetbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java Desktopelliando dias
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaBreno Vitorino
 
Asp.Net Mvc - Desenvolvendo em N Camadas
Asp.Net Mvc - Desenvolvendo em N CamadasAsp.Net Mvc - Desenvolvendo em N Camadas
Asp.Net Mvc - Desenvolvendo em N CamadasGiovanni Bassi
 
Desenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e PloneDesenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e PloneJacson Tiola
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)elliando dias
 
Projetos Web Por Maike Robert
Projetos Web   Por Maike RobertProjetos Web   Por Maike Robert
Projetos Web Por Maike Robertguest4d3fce
 
Projetos Web Por Maike Robert
Projetos Web   Por Maike RobertProjetos Web   Por Maike Robert
Projetos Web Por Maike RobertVictor Vasques
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínuaguesta433a8
 
Aplicações Web TV no Meo
Aplicações Web TV no MeoAplicações Web TV no Meo
Aplicações Web TV no Meocodebits
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScriptCarlos Eduardo Kadu
 
Portlets: Let them make your virtual world
Portlets: Let them make your virtual worldPortlets: Let them make your virtual world
Portlets: Let them make your virtual worldelliando dias
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 

Similar to Melhorando a performance de aplicações com o uso do MemCache (20)

Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveis
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com Django
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3
 
PHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiências
PHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiênciasPHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiências
PHP Classes - Desenvolvimento de sites de Web 2 0 em PHP para grandes audiências
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Netbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java DesktopNetbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java Desktop
 
Arquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em JavaArquitetura de aplicações Web 2.0 em Java
Arquitetura de aplicações Web 2.0 em Java
 
Asp.Net Mvc - Desenvolvendo em N Camadas
Asp.Net Mvc - Desenvolvendo em N CamadasAsp.Net Mvc - Desenvolvendo em N Camadas
Asp.Net Mvc - Desenvolvendo em N Camadas
 
Desenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e PloneDesenvolvimento web com Python, Zope e Plone
Desenvolvimento web com Python, Zope e Plone
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
 
Projetos Web Por Maike Robert
Projetos Web   Por Maike RobertProjetos Web   Por Maike Robert
Projetos Web Por Maike Robert
 
Projetos Web Por Maike Robert
Projetos Web   Por Maike RobertProjetos Web   Por Maike Robert
Projetos Web Por Maike Robert
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Aplicações Web TV no Meo
Aplicações Web TV no MeoAplicações Web TV no Meo
Aplicações Web TV no Meo
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Portlets: Let them make your virtual world
Portlets: Let them make your virtual worldPortlets: Let them make your virtual world
Portlets: Let them make your virtual world
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 

More from Elton Minetto

Go e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroElton Minetto
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em GoElton Minetto
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Elton Minetto
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsElton Minetto
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2Elton Minetto
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver softwareElton Minetto
 
Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHPElton Minetto
 
Clean Architecture in Golang
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in GolangElton Minetto
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedorElton Minetto
 
Product and Technology
Product and TechnologyProduct and Technology
Product and TechnologyElton Minetto
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech StackElton Minetto
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIsElton Minetto
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP worldElton Minetto
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using GoElton Minetto
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWSElton Minetto
 

More from Elton Minetto (20)

Go e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outro
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Serverless em Go
Serverless em GoServerless em Go
Serverless em Go
 
JAMstack
JAMstackJAMstack
JAMstack
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
 
Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
 
Clean Architecture in Golang
Clean Architecture in GolangClean Architecture in Golang
Clean Architecture in Golang
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
 
Product and Technology
Product and TechnologyProduct and Technology
Product and Technology
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using Go
 
Start you
Start youStart you
Start you
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
 

Melhorando a performance de aplicações com o uso do MemCache

  • 1. Melhorando a performance de aplicações com o uso do MemCache Osdeni José Sadzinski Elton Luís Minetto
  • 2.
  • 3. Osdeni José Sadzinski   Graduado e pós-graduado em Sistemas de Informação. Cursando MBA em Gerenciamento de Projetos   Trabalha com PHP desde 2004   Membro do PHPSC   Desenvolvedor Web da Drimio
  • 4. Elton Luís Minetto   Graduado e pós-graduado em Ciência da Computação. Cursando MBA em Gerenciamento de Projetos   Trabalha com PHP desde 2000   Autor dos livros Frameworks para Desenvolvimento em PHP - Editora Novatec e Grid Computing in Research and Education – IBM RedBooks   Membro do PHPSC   Gerente de Desenvolvimento da Drimio e professor na Sociesc (Joinville)/Unochapecó(Chapecó)
  • 5. 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
  • 7. Ou...   Performance: a velocidade 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”
  • 9. Memcached   Sistema distribuído e de alta performance para fazer cache de objetos em memória RAM. É genério por natureza mas muito usado para acelerar aplicações web dinâmicas, reduzindo a carga de bases de dados, sessões de usuários, arquivos CSS.   Foi desenvolvido pela Danga Interactive para aumentar a performance do site LiveJournal.com, que possui mais de 20 milhões de page views por dia e atende 1 milhão de usuários. memcached reduziu a carga dos servidores de banco de dados forncecendo páginas mais rápidas e melhor utilização de recursos.
  • 10. Porque usar?   Escalável: fácil adicionar máquinas e instâncias   RAM é muito mais rápido que I/O em disco   Alivia a carga do banco de dados   Muito flexível: pode armazenar qualquer dado, desde que não ultrapasse 1 MB   Bibliotecas client disponíveis em diversas linguagens (PHP, C, Java, Ruby, Python)
  • 11. Como funciona?   Armazena qualquer coisa que pode ser serializado   Armazena com uma chave única (255 caracteres) e tempo de validade   O programador usa da seguinte forma :   Encontrou no cache? Retorna os dados   Não encontrou no cache? Processa, armazena no cache e retorna o dado
  • 13. O que armazenar?   Resultados de consultas SQL   Páginas inteiras   Sessões de usuários   Fragmentos de HTML gerados   Imagens (thumbnails?)   Arquivos css   Arquivos js   etc
  • 14. Memcached – Como instalar ( Linux)   Baixar código em http://www.danga.com/memcached/   Seguir o procedimento:   tar -xvzf memcached-1.2.8.tar.gz   cd memcached-1.2.8   ./configure   make   make install (executar como root)   No exemplo abaixo iniciamos o daemon com 128MB RAM, ouvindo na porta 11211 no ip 127.0.0.1   /usr/local/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211   Pode-se criar quantas instâncias forem necessárias, mudando a porta. Assim aumenta-se o espaço total do cache
  • 15. PHP e Memcached (em Linux)   Download do módulo em http://pecl.php.net/package/ memcache.   Executar:   tar -xvzf memcache-2.2.5.tgz   cd memcache-2.2.5   phpize   ./configure   make   make install (executar como root)   Adicionar a linha abaixo no php.ini e reiniciar o Apache   extension=/usr/local/lib/php/extensions/memcache.so (o caminho é indicado no make install)
  • 16. API   Comandos de armazenamento:   set, add, replace, append   Comandos de recuperação:   get   Comandos de exclusão:   delete   Outros comandos:   stats, flush_all, version, verbosity, quit
  • 17. Como usar com PHP <?php //exemplo usando cliente PECL $memcache = new Memcache; $memcache->connect('localhost', 11211) or die (quot;Could not connectquot;); $version = $memcache->getVersion(); echo quot;Server's version: quot;.$version.quot;<br/>nquot;; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; //params: chave, objeto, comprimimir ou não, tempo em segundos $memcache->set('key', $tmp_object, false, 10) ; $get_result = $memcache->get('key'); echo quot;Data from the cache:<br/>nquot;; var_dump($get_result); ?>
  • 18. Como usar com PHP <?php $memcache = new Memcache; $memcache->connect('localhost', 11211); $memcache->connect('localhost', 11212); $memcache->connect(’192.168.0.10', 11212); $conteudo = $memcache->get('estados'); if($conteudo === false) { $uf = array('SC','RS','SP'); $memcache->set('estados', $uf, false, 100) ; $conteudo = $uf; } var_dump($conteudo); ?>
  • 19. Como usar com Zend Framework $frontendOptions = array('lifetime' => 72000,'automatic_serial ization' => false ); $backendOptions = array('servers' => array( array('host' => 'localhost', 'port' => 11211, 'persistent' => true ))); $cache = Zend_Cache::factory('Core', 'Memcached’ , $frontendOptions , $backendOptions); if(!$result = $cache->load('myresult')) { $db = Zend_Db::factory( [...] ); $result = $db->fetchAll('SELECT * FROM huge_table'); $cache->save($result, 'myresult'); } else { // cache hit! shout so that we know echo quot;This one is from cache!nn”; } print_r($result);
  • 20. Como monitorar   Plugin para o Nagios   http://search.cpan.org/~zigorou/Nagios-Plugins- Memcached-0.02/lib/Nagios/Plugins/Memcached.pm   memcache.php  http://livebookmark.net/journal/2008/05/21/ memcachephp-stats-like-apcphp/
  • 21. Quem usa?   Facebook   805 servidores 8-core. 28TB de RAM. 300K req/seg (Set. 2008)   Desenvolveu fork com suporte a UDP http://github.com/fbmarc/facebook-memcached/tree/master   Flickr   38K req/seg. 12 milhões de objetos (Set. 2008)   Digg   Inphonex – 6 servidores armazenando sessões de usuários   Doctrine (sim! coloquei isso durante a palestra do Guilherme Blanco)
  • 22. Drimio: Uma Rede Social focada em MARCAS
  • 23. Drimio: Uma Rede Social focada em MARCAS   O Drimio é uma Rede Social que catalisa e amplia o relacionamento entre consumidor e marca,permitindo que cada vez mais o usuário e consumidor SEJA e FAÇA a MARCA!!
  • 24. Conteúdo: Co-criação e COLABORAÇÃO   Manutenção participativa de um hub de CONTEÚDO, uma coleção de:   Vídeos, fotos, artigos, blogs, outras redes sociais   Fóruns, entrevistas com especialistas e representantes da MARCA, “hotsites”   Lançamentos, propagandas e campanhas, exclusividades   Eventos culturais e esportivos patrocinados pela MARCA   Notícias genéricas, notícias oficiais de interesse público geradas pela própria MARCA (news release, media release, press release)   Tudo sobre a Marca
  • 25. Quem são MARCAS na Drimio ?   Extrapolamos o conceito limitante de MARCAS de produtos e anunciantes tradicionais   Na Drimio as 5.564 cidades brasileiras são MARCAS   Procuram ampliar sua visibilidade no mercado para tornarem-se destino do turismo de lazer e de negócios   Universidades, Associações, Festas regionais, Times de Futebol, Escolas de Samba, Praias, Concursos Nacionais, Casas noturnas, Feiras e Eventos, e inclusive Celebridades são MARCAS   Todas estas entidades estão sujeitas aos mesmos princípios que governam a existência e desenvolvimento de qualquer MARCA no mercado
  • 26. Case - Drimio   Usuários podem compartilhar vídeos, links, imagens, notícias, enviar mensagens e participar de fórum sobre suas marcas de maior afinidade.   Integração com Youtube, Twitter, Google Search, Yahoo Search, Flickr, leitura e geração de RSS/Atom.   Versão mobile com suporte a iPhone, Nokia N95, Blackberry e outros dispositivos   Crescimento de 300% no número de usuários nas primeiras 24 horas depois do lançamento   Triplicou o número de pageviews nas primeiras 24 horas depois do lançamento
  • 27. Exemplo Requisicões 90 84,66666667 80 70 60 57 50 Requisicões 40 30 20 10 0 Sem cache Memcache
  • 28. Referências   http://www.slideshare.net/FordAntiTrust/php- performance-with-apc-memcached   http://www.slideshare.net/TheMarco/memcached-ftw   http://www.slideshare.net/benramsey/give-your-site- a-boost-with-memcache   http://www.slideshare.net/cb1kenobi/memcached- and-mysql   http://www.danga.com/memcached/   http://www.danga.com/memcached/users.bml
  • 30. Contato Osdeni José Sadzinski http://www.osdeni.net/ osdeni.sadzinski@drimio.com Elton Luís Minetto http://www.eltonminetto.net elton.minetto@drimio.com http://www.twitter.com/eminetto