SlideShare uma empresa Scribd logo
1 de 55
Baixar para ler offline
Ao infinito e além com PHP, Memcached e Gearman
Elton Luís Minetto
segunda-feira, 29 de novembro de 2010
Quem sou eu?
• Graduado e pós-graduado em Ciência da Computação.
• Trabalha com PHP/MySQL/Linux desde 1998
• Autor do livro Frameworks para Desenvolvimento em
PHP - Editora Novatec e co-autor do livro Grid
Computing in Research and Education - IBM Redbooks
• Membro do PHPSC
• Professor na Unochapecó(Chapecó/SC)
• Sócio da Coderockr
segunda-feira, 29 de novembro de 2010
O problema
segunda-feira, 29 de novembro de 2010
O problema
segunda-feira, 29 de novembro de 2010
O problema
segunda-feira, 29 de novembro de 2010
O problema
segunda-feira, 29 de novembro de 2010
O problema
• 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
• “Performance is a problem. Scaling your performance is a
bigger problem”
segunda-feira, 29 de novembro de 2010
A solução
Distribua!
segunda-feira, 29 de novembro de 2010
Distribua!
Memória
segunda-feira, 29 de novembro de 2010
Distribua!
Trabalho
segunda-feira, 29 de novembro de 2010
Distribua!
segunda-feira, 29 de novembro de 2010
GLAMMP
• Gearman
• Linux
• Apache
• MySQL
• Memcached
• Php (ou Perl ou Python)
segunda-feira, 29 de novembro de 2010
segunda-feira, 29 de novembro de 2010
• Sistema distribuído e de alta performance para fazer
cache de objetos em memória RAM.
• Genérico 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.
• Criado pela
O que é?
segunda-feira, 29 de novembro de 2010
Por que 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)
• Open Source
segunda-feira, 29 de novembro de 2010
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
segunda-feira, 29 de novembro de 2010
Como funciona?
segunda-feira, 29 de novembro de 2010
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
• “Qualquer coisa que demore um pouco para ser gerada”
segunda-feira, 29 de novembro de 2010
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
• Drimio
• Sessões de usuários, imagens, arquivos CSS, arquivos JS,
resultados de consultas SQL
segunda-feira, 29 de novembro de 2010
Como usar?
Baixar código em http://www.danga.com/memcached/
e...
tar -xvzf memcached-X.Y.Z.tar.gz
cd memcached-X.Y.Z
./configure
make
sudo make install
Santíssima Trindade
segunda-feira, 29 de novembro de 2010
Como usar?
• 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
segunda-feira, 29 de novembro de 2010
Como usar com PHP?
• Download do módulo em http://pecl.php.net/package/
memcache.
• e..
tar -xvzf memcache-2.2.5.tgz
cd memcache-2.2.5
phpize
./configure
make
sudo make install (executar como root)
• Adicionar a linha abaixo no php.ini e reiniciar o Apache
extension=memcache.so
segunda-feira, 29 de novembro de 2010
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);
?>
segunda-feira, 29 de novembro de 2010
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
segunda-feira, 29 de novembro de 2010
Monitorando
• Plugin para o Nagios
• memcache.php
segunda-feira, 29 de novembro de 2010
segunda-feira, 29 de novembro de 2010
segunda-feira, 29 de novembro de 2010
segunda-feira, 29 de novembro de 2010
• Framework genérico para distribuir jobs a serem
executados por uma ou mais máquinas
• Permite uma aplicação executar tarefas em paralelo,
com balanceamento da carga de processos, e até
invocar códigos escritos em outras linguagens
• O nome é um anagrama para "Manager"
• Criado pela
O que é?
segunda-feira, 29 de novembro de 2010
Áreas de Aplicação
• Análise de logs
• Redimensionamento de imagens
• Processamento de URLs
• Atualização de cache
• Jobs de banco de dados
• etc
segunda-feira, 29 de novembro de 2010
Por que usar?
• Open Source com interfaces para desenvolver em várias
linguagens (C, PHP, Perl, MySQL UDF, Python, etc).
Clients podem ser em uma linguagem, workers em
outra
• Rápido - possui protocolo e interfaces simples, com um
servidor desenvolvido em C
• Escalável e tolerante a falhas
• Digg: +45 servers, 400mil jobs/dia (em 2009)
• Yahoo: +60 servers, 6milhões jobs/dia
• Síncrono ou assíncrono
segunda-feira, 29 de novembro de 2010
Como funciona?
• Client- Cria um job a ser executado e o envia a um
servidor de jobs
• Worker - Registra-se em um servidor de jobs e pega
jobs para executar
• Job Server - Recebe os jobs e coordena a entrega de um
job para um worker executar
segunda-feira, 29 de novembro de 2010
Como funciona?
Fonte: http://www.gearman.org
segunda-feira, 29 de novembro de 2010
Como funciona?
Fonte: http://www.gearman.org
segunda-feira, 29 de novembro de 2010
Síncrono X Assíncrono
• Síncrono, ou “em primeiro plano”(“foreground”). O
cliente fica parado esperando o fim da execução da
tarefa
• Assíncrono, ou “em segundo plano”(“background”). O
cliente continua sua execução e o trabalho vai ser
realizado por algum Worker. O cliente pode ser avisado
do status por métodos e callbacks
segunda-feira, 29 de novembro de 2010
Instalando
wget http://launchpad.net/gearmand/trunk/0.13/+download/
gearmand-X.Y.tar.gz
tar xfvz gearmand-X.Y.tar.gz
cd gearmand-X.Y
./configure
make
sudo make install
Lembra?
Santíssima Trindade
segunda-feira, 29 de novembro de 2010
Iniciando o server
• Simples:
/usr/local/sbin/gearmand -d
• Completo:
/usr/local/sbin/gearmand -d -u <user> -L <host> -p 70
• Sendo
-d Inicia como um daemon em background
-u <user> Executa como o usuário específico
-L <host> Fica ouvindo neste ip
-p <port> Ouve na porta específica (defaul 4730)
segunda-feira, 29 de novembro de 2010
PHP
• Instalando a extensão do PHP:
wget http://pecl.php.net/get/gearman-X.Y.Z.tgz
tar xfvz gearman-X.Y.Z.tgz
cd gearman-X.Y.Z
phpize
./configure
make
sudo make install
• Adicionar no php.ini:
extension = gearman.so
Acabou a
criativade :(
Mas você
entendeu né?
segunda-feira, 29 de novembro de 2010
PHP - Exemplo: Cliente Síncrono
<?php
$client= new GearmanClient();
/*indica em quais servidores o cliente pode enviar jobs.
No caso somente o localhost, pois não é passado nada*/
$client->addServer();
/*adiciona um job síncrono, para a fila chamada title,
enviando uma string como parâmetro*/
print $client->do("title", "o Ivo andava de PATINS!!!");
print "n";
?>
segunda-feira, 29 de novembro de 2010
PHP - Exemplo: Worker Síncrono
<?php
$worker= new GearmanWorker();
$worker->addServer();//servidores q vai atender
/*registra a função title_function como responsável por
atender a fila title*/
$worker->addFunction("title", "title_function");
while ($worker->work()); //fica em loop trabalhando
   
//função que vai executar o trabalho
function title_function($job)
{
        return ucwords(strtolower($job->workload()));
}
?>
segunda-feira, 29 de novembro de 2010
PHP - Exemplo: Cliente Assíncrono
<?php
$client= new GearmanClient();
$client->addServer();
for($i=0;$i<10;$i++) {
        /*adiciona um job asíncrono, para a fila chamada
title, enviando um array como parâmetro. O cliente não
fica esperando o final do processamento */
        $log['data'] = date('l jS of F Y h:i:s A');
        $log['msg'] = "O Ivo andou de patins $i vez(es)";
        $client->doBackground("log_queue", serialize
($log));
}
?>
segunda-feira, 29 de novembro de 2010
PHP - Exemplo: Worker Assíncrono
<?php
$worker= new GearmanWorker();
$worker->addServer();
/*registra a função log_function como responsável por
atender a fila log_queue*/
$worker->addFunction("log_queue", "log_function");
while ($worker->work()); //fica em loop trabalhando
   
function log_function($job){
        $log = unserialize($job->workload());
        sleep(1); //sleep só para demonstrar executando
        echo $log['data'], ' - ', $log['msg'], "n";
}
?>
segunda-feira, 29 de novembro de 2010
segunda-feira, 29 de novembro de 2010
Python - Exemplo: Worker Assíncrono
from gearman import libgearman
1.  
2. def worker_func(job):
3.   workload= job.get_workload()
4.   print workload
5.   return workload
6.  
7. worker = libgearman.Worker()
8. worker.set_timeout(5000)
9. worker.add_server('localhost')
10.worker.add_function("log_queue", worker_func)
11.ret= libgearman.GEARMAN_SUCCESS
12.while 1:
13.  ret= worker.work()
segunda-feira, 29 de novembro de 2010
PHP - Job API
• GearmanJob::sendStatus(int $numerator, int
$denominator)
• GearmanJob::sendWarning(string $warning)
• GearmanJob::sendComplete(string $result)
• GearmanJob::sendFail(void)
• GearmanJob::sendException(string $exception)
segunda-feira, 29 de novembro de 2010
PHP - Job API - Client
<?php
1. $client= new GearmanClient();
2. $client->addServer();
3. $handle = $client->doBackground("title", "o PHp");
4. if($client->returnCode() != GEARMAN_SUCCESS) {
5. echo "Job com problemas";exit;
6. }
7. $done = false;
8. do {
9. sleep(2);
10. $stat = $client->jobStatus($handle);
11. if(!$stat[0]) { $done = true; }//job terminou
12. if($stat[1] == true)
13. echo "Executando:", ' passo ' , $stat[2], ' de ',
$stat[3], "n";
14.}while(!$done);
15.?>
segunda-feira, 29 de novembro de 2010
PHP - Job API - Worker
<?php
1. $worker= new GearmanWorker();
2. $worker->addServer();
3. $worker->addFunction("title", "title_function");
4. while ($worker->work());
5.    
6. function title_function($job){
7. $job->sendStatus(0, 2);
8. sleep(3);
9. $job->sendStatus(1, 2);
10. sleep(3);
11. $job->sendStatus(2, 2);
12. return ucwords(strtolower($job->workload()));
13.}
14.?>
segunda-feira, 29 de novembro de 2010
PHP - Client API - Prioridades
• Síncrono
echo $client->do("title", "uma frasE quAlquer");
echo $client->doHigh("title", "uma frasE quAlquer");
echo $client->doLow("title", "uma frasE quAlquer"); 
• Assíncrono
$handle1 = $client->doBackground("title", "uma frasE quAlquer");
$handle1 = $client->doHighBackground("title", "uma frasE
quAlquer");
$handle1 = $client->doLowBackground("title", "uma frasE
quAlquer");
segunda-feira, 29 de novembro de 2010
Filas Persistentes
• Internamente todas as filas de jobs são armazenadas
em memória. Se o servidor reinicia ou acontece algum
erro todos os jobs pendentes são perdidos
• Pode-se usar filas persistentes para armazenar os jobs
pendentes (somente jobs assíncronos)
• É possível armazenar a fila em:
• MySQL (libdrizzle)
• Memcached (libmemcached)
• SQLite3 (libsqlite3)
segunda-feira, 29 de novembro de 2010
Monitorando
telnet localhost 4730
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
status
jobLog	 0	 0	 1
jobTwitter	 0	 0	 1
jobTwitterUser	0	 0	 1
jobFacebookPostSearch	 0	 0	 1
jobFeed	0	 0	 1
jobBlogsearch	 0	 0	 1
jobFacebookUser	 2	 1	 1
jobSlideshareUser	 0	 0	 1
segunda-feira, 29 de novembro de 2010
Gearman no Drimio
• Processamento de Logs
• Monitoramento de redes sociais (Twitter, Youtube,
Flickr, Yahoo, Facebook, Feeds, Blogsearch, Slideshare,
etc)
• Envio de e-mails
• Captura de snapshots de URLS
• Envio de tweets/posts Facebook
• Redimensionamento de imagens
• Média de 55 mil jobs/dia
segunda-feira, 29 de novembro de 2010
Tudo junto reunido!
1. Faz pesquisa 2. Chamada de API
3. Resultado
4. Jobs para processar imagens e para Log de
acesso
Imagens processadas e salvas em Memcached
e Logs em MySQL
5. Página de resultados
segunda-feira, 29 de novembro de 2010
Perguntas?
segunda-feira, 29 de novembro de 2010
Contato
<?php
$card = array(
‘nome’ => ‘Elton Luís Minetto’,
‘site’ => ‘http://www.eltonminetto.net’,
‘e-mail’ => ‘eminetto@coderockr.com’,
‘twitter’ => ‘@eminetto’,
‘all’ => ‘http://about.me/eminetto'
);
var_dump($card);
?>
segunda-feira, 29 de novembro de 2010
Referências
• http://www.danga.com
• http://www.slideshare.net/andreizm/all-the-little-
pieces-1573862
• http://www.slideshare.net/acme/scaling-with-
memcached
• http://www.slideshare.net/oemebamo/introduction-to-
memcached
• http://www.slideshare.net/felixdv/high-gear-php-with-
gearman-3404242
• http://www.eltonminetto.net/material-da-palestra-no-
phpsc-conf-2009.htm
• http://www.eltonminetto.net/material-de-minha-
palestra-sobre-gearman.htm
segunda-feira, 29 de novembro de 2010

Mais conteúdo relacionado

Mais procurados

Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalaçãoLuís Eduardo
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaHelder da Rocha
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasHelder da Rocha
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGRLucas Brasilino
 
Desenvolvendo aplicações Web escaláveis com PHP
Desenvolvendo aplicações Web escaláveis com PHPDesenvolvendo aplicações Web escaláveis com PHP
Desenvolvendo aplicações Web escaláveis com PHPElton Minetto
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaHenrique Lima
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxThiago Paes
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsHelder da Rocha
 
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Felipe Santos
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxThiago Paes
 

Mais procurados (15)

Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalação
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão Mútua
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticas
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Plataforma Zope Plone na PGR
Plataforma Zope Plone na PGRPlataforma Zope Plone na PGR
Plataforma Zope Plone na PGR
 
Desenvolvendo aplicações Web escaláveis com PHP
Desenvolvendo aplicações Web escaláveis com PHPDesenvolvendo aplicações Web escaláveis com PHP
Desenvolvendo aplicações Web escaláveis com PHP
 
Aumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinadaAumente a performance de seu site de maneira disciplinada
Aumente a performance de seu site de maneira disciplinada
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threads
 
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
Block Hosts: Bloqueando Ataques De ForçA Bruta (Brute Force) Em Ftp, Ssh E Ou...
 
Redes 05 - aplicação
Redes   05 - aplicaçãoRedes   05 - aplicação
Redes 05 - aplicação
 
Alta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com NginxAlta Performance de Aplicações PHP com Nginx
Alta Performance de Aplicações PHP com Nginx
 

Destaque

DevOps für PHP (und andere)
DevOps für PHP (und andere)DevOps für PHP (und andere)
DevOps für PHP (und andere)Mayflower GmbH
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stackKris Buytaert
 
E-commerce e o novo consumidor
E-commerce e o novo consumidorE-commerce e o novo consumidor
E-commerce e o novo consumidorElton Minetto
 
Inovação e tecnologia
Inovação  e tecnologiaInovação  e tecnologia
Inovação e tecnologiaElton Minetto
 
De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016Elton Minetto
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
Desenvolvendo APIs em Go usando Middlewares
Desenvolvendo APIs em Go usando MiddlewaresDesenvolvendo APIs em Go usando Middlewares
Desenvolvendo APIs em Go usando MiddlewaresElton Minetto
 
Metodologias ágeis interativas
Metodologias ágeis interativasMetodologias ágeis interativas
Metodologias ágeis interativasElton Minetto
 
PSR-7, middlewares e o futuro dos frameworks
PSR-7, middlewares e o futuro dos frameworksPSR-7, middlewares e o futuro dos frameworks
PSR-7, middlewares e o futuro dos frameworksElton Minetto
 
Devops is not about Tooling
Devops is not about ToolingDevops is not about Tooling
Devops is not about ToolingKris Buytaert
 

Destaque (14)

DevOps e PHP
DevOps e PHPDevOps e PHP
DevOps e PHP
 
DevOps für PHP (und andere)
DevOps für PHP (und andere)DevOps für PHP (und andere)
DevOps für PHP (und andere)
 
DevOps for PHP
DevOps for PHPDevOps for PHP
DevOps for PHP
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stack
 
E-commerce e o novo consumidor
E-commerce e o novo consumidorE-commerce e o novo consumidor
E-commerce e o novo consumidor
 
Code Squad
Code SquadCode Squad
Code Squad
 
Inovação e tecnologia
Inovação  e tecnologiaInovação  e tecnologia
Inovação e tecnologia
 
De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
Desenvolvendo APIs em Go usando Middlewares
Desenvolvendo APIs em Go usando MiddlewaresDesenvolvendo APIs em Go usando Middlewares
Desenvolvendo APIs em Go usando Middlewares
 
Metodologias ágeis interativas
Metodologias ágeis interativasMetodologias ágeis interativas
Metodologias ágeis interativas
 
PSR-7, middlewares e o futuro dos frameworks
PSR-7, middlewares e o futuro dos frameworksPSR-7, middlewares e o futuro dos frameworks
PSR-7, middlewares e o futuro dos frameworks
 
Devops is not about Tooling
Devops is not about ToolingDevops is not about Tooling
Devops is not about Tooling
 
Otimização MySQL
Otimização MySQLOtimização MySQL
Otimização MySQL
 

Semelhante a Ao infinito e além com PHP memcached e Gearman

PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e MemcacheAndre Golvea
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHPRafael Dohms
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosAlexandre Almeida
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)Jose Augusto Carvalho
 
Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppetRamon Mota
 
Aula05-ProgramacaoparaWeb123456878915151
Aula05-ProgramacaoparaWeb123456878915151Aula05-ProgramacaoparaWeb123456878915151
Aula05-ProgramacaoparaWeb123456878915151alderleysousa444
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilJose Augusto Carvalho
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o NodejsCaio Cutrim
 
Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???Fabiano Weimar
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - AmbientesDirceu Belém
 
App Web Escalaveis Fisl
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis FislElton Minetto
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceTiago Peczenyj
 

Semelhante a Ao infinito e além com PHP memcached e Gearman (20)

PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e Memcache
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Instalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutosInstalando o MySQL em menos de 10 minutos
Instalando o MySQL em menos de 10 minutos
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)Oficina de infraestrutura como código (apresentando o Puppet)
Oficina de infraestrutura como código (apresentando o Puppet)
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
 
Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppet
 
Aula05-ProgramacaoparaWeb123456878915151
Aula05-ProgramacaoparaWeb123456878915151Aula05-ProgramacaoparaWeb123456878915151
Aula05-ProgramacaoparaWeb123456878915151
 
Puppet webcast 4linux
Puppet webcast 4linuxPuppet webcast 4linux
Puppet webcast 4linux
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágil
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???Meu Plone Site está lento. O que fazer???
Meu Plone Site está lento. O que fazer???
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
App Web Escalaveis Fisl
App Web Escalaveis FislApp Web Escalaveis Fisl
App Web Escalaveis Fisl
 
Puppet overview
Puppet overviewPuppet overview
Puppet overview
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open source
 

Mais de 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
 

Mais de 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
 

Ao infinito e além com PHP memcached e Gearman

  • 1. Ao infinito e além com PHP, Memcached e Gearman Elton Luís Minetto segunda-feira, 29 de novembro de 2010
  • 2. Quem sou eu? • Graduado e pós-graduado em Ciência da Computação. • Trabalha com PHP/MySQL/Linux desde 1998 • Autor do livro Frameworks para Desenvolvimento em PHP - Editora Novatec e co-autor do livro Grid Computing in Research and Education - IBM Redbooks • Membro do PHPSC • Professor na Unochapecó(Chapecó/SC) • Sócio da Coderockr segunda-feira, 29 de novembro de 2010
  • 3. O problema segunda-feira, 29 de novembro de 2010
  • 4. O problema segunda-feira, 29 de novembro de 2010
  • 5. O problema segunda-feira, 29 de novembro de 2010
  • 6. O problema segunda-feira, 29 de novembro de 2010
  • 7. O problema • 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 • “Performance is a problem. Scaling your performance is a bigger problem” segunda-feira, 29 de novembro de 2010
  • 12. GLAMMP • Gearman • Linux • Apache • MySQL • Memcached • Php (ou Perl ou Python) segunda-feira, 29 de novembro de 2010
  • 13. segunda-feira, 29 de novembro de 2010
  • 14. • Sistema distribuído e de alta performance para fazer cache de objetos em memória RAM. • Genérico 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. • Criado pela O que é? segunda-feira, 29 de novembro de 2010
  • 15. Por que 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) • Open Source segunda-feira, 29 de novembro de 2010
  • 16. 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 segunda-feira, 29 de novembro de 2010
  • 17. Como funciona? segunda-feira, 29 de novembro de 2010
  • 18. 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 • “Qualquer coisa que demore um pouco para ser gerada” segunda-feira, 29 de novembro de 2010
  • 19. 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 • Drimio • Sessões de usuários, imagens, arquivos CSS, arquivos JS, resultados de consultas SQL segunda-feira, 29 de novembro de 2010
  • 20. Como usar? Baixar código em http://www.danga.com/memcached/ e... tar -xvzf memcached-X.Y.Z.tar.gz cd memcached-X.Y.Z ./configure make sudo make install Santíssima Trindade segunda-feira, 29 de novembro de 2010
  • 21. Como usar? • 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 segunda-feira, 29 de novembro de 2010
  • 22. Como usar com PHP? • Download do módulo em http://pecl.php.net/package/ memcache. • e.. tar -xvzf memcache-2.2.5.tgz cd memcache-2.2.5 phpize ./configure make sudo make install (executar como root) • Adicionar a linha abaixo no php.ini e reiniciar o Apache extension=memcache.so segunda-feira, 29 de novembro de 2010
  • 23. 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); ?> segunda-feira, 29 de novembro de 2010
  • 24. 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 segunda-feira, 29 de novembro de 2010
  • 25. Monitorando • Plugin para o Nagios • memcache.php segunda-feira, 29 de novembro de 2010
  • 26. segunda-feira, 29 de novembro de 2010
  • 27. segunda-feira, 29 de novembro de 2010
  • 28. segunda-feira, 29 de novembro de 2010
  • 29. • Framework genérico para distribuir jobs a serem executados por uma ou mais máquinas • Permite uma aplicação executar tarefas em paralelo, com balanceamento da carga de processos, e até invocar códigos escritos em outras linguagens • O nome é um anagrama para "Manager" • Criado pela O que é? segunda-feira, 29 de novembro de 2010
  • 30. Áreas de Aplicação • Análise de logs • Redimensionamento de imagens • Processamento de URLs • Atualização de cache • Jobs de banco de dados • etc segunda-feira, 29 de novembro de 2010
  • 31. Por que usar? • Open Source com interfaces para desenvolver em várias linguagens (C, PHP, Perl, MySQL UDF, Python, etc). Clients podem ser em uma linguagem, workers em outra • Rápido - possui protocolo e interfaces simples, com um servidor desenvolvido em C • Escalável e tolerante a falhas • Digg: +45 servers, 400mil jobs/dia (em 2009) • Yahoo: +60 servers, 6milhões jobs/dia • Síncrono ou assíncrono segunda-feira, 29 de novembro de 2010
  • 32. Como funciona? • Client- Cria um job a ser executado e o envia a um servidor de jobs • Worker - Registra-se em um servidor de jobs e pega jobs para executar • Job Server - Recebe os jobs e coordena a entrega de um job para um worker executar segunda-feira, 29 de novembro de 2010
  • 35. Síncrono X Assíncrono • Síncrono, ou “em primeiro plano”(“foreground”). O cliente fica parado esperando o fim da execução da tarefa • Assíncrono, ou “em segundo plano”(“background”). O cliente continua sua execução e o trabalho vai ser realizado por algum Worker. O cliente pode ser avisado do status por métodos e callbacks segunda-feira, 29 de novembro de 2010
  • 36. Instalando wget http://launchpad.net/gearmand/trunk/0.13/+download/ gearmand-X.Y.tar.gz tar xfvz gearmand-X.Y.tar.gz cd gearmand-X.Y ./configure make sudo make install Lembra? Santíssima Trindade segunda-feira, 29 de novembro de 2010
  • 37. Iniciando o server • Simples: /usr/local/sbin/gearmand -d • Completo: /usr/local/sbin/gearmand -d -u <user> -L <host> -p 70 • Sendo -d Inicia como um daemon em background -u <user> Executa como o usuário específico -L <host> Fica ouvindo neste ip -p <port> Ouve na porta específica (defaul 4730) segunda-feira, 29 de novembro de 2010
  • 38. PHP • Instalando a extensão do PHP: wget http://pecl.php.net/get/gearman-X.Y.Z.tgz tar xfvz gearman-X.Y.Z.tgz cd gearman-X.Y.Z phpize ./configure make sudo make install • Adicionar no php.ini: extension = gearman.so Acabou a criativade :( Mas você entendeu né? segunda-feira, 29 de novembro de 2010
  • 39. PHP - Exemplo: Cliente Síncrono <?php $client= new GearmanClient(); /*indica em quais servidores o cliente pode enviar jobs. No caso somente o localhost, pois não é passado nada*/ $client->addServer(); /*adiciona um job síncrono, para a fila chamada title, enviando uma string como parâmetro*/ print $client->do("title", "o Ivo andava de PATINS!!!"); print "n"; ?> segunda-feira, 29 de novembro de 2010
  • 40. PHP - Exemplo: Worker Síncrono <?php $worker= new GearmanWorker(); $worker->addServer();//servidores q vai atender /*registra a função title_function como responsável por atender a fila title*/ $worker->addFunction("title", "title_function"); while ($worker->work()); //fica em loop trabalhando     //função que vai executar o trabalho function title_function($job) {         return ucwords(strtolower($job->workload())); } ?> segunda-feira, 29 de novembro de 2010
  • 41. PHP - Exemplo: Cliente Assíncrono <?php $client= new GearmanClient(); $client->addServer(); for($i=0;$i<10;$i++) {         /*adiciona um job asíncrono, para a fila chamada title, enviando um array como parâmetro. O cliente não fica esperando o final do processamento */         $log['data'] = date('l jS of F Y h:i:s A');         $log['msg'] = "O Ivo andou de patins $i vez(es)";         $client->doBackground("log_queue", serialize ($log)); } ?> segunda-feira, 29 de novembro de 2010
  • 42. PHP - Exemplo: Worker Assíncrono <?php $worker= new GearmanWorker(); $worker->addServer(); /*registra a função log_function como responsável por atender a fila log_queue*/ $worker->addFunction("log_queue", "log_function"); while ($worker->work()); //fica em loop trabalhando     function log_function($job){         $log = unserialize($job->workload());         sleep(1); //sleep só para demonstrar executando         echo $log['data'], ' - ', $log['msg'], "n"; } ?> segunda-feira, 29 de novembro de 2010
  • 43. segunda-feira, 29 de novembro de 2010
  • 44. Python - Exemplo: Worker Assíncrono from gearman import libgearman 1.   2. def worker_func(job): 3.   workload= job.get_workload() 4.   print workload 5.   return workload 6.   7. worker = libgearman.Worker() 8. worker.set_timeout(5000) 9. worker.add_server('localhost') 10.worker.add_function("log_queue", worker_func) 11.ret= libgearman.GEARMAN_SUCCESS 12.while 1: 13.  ret= worker.work() segunda-feira, 29 de novembro de 2010
  • 45. PHP - Job API • GearmanJob::sendStatus(int $numerator, int $denominator) • GearmanJob::sendWarning(string $warning) • GearmanJob::sendComplete(string $result) • GearmanJob::sendFail(void) • GearmanJob::sendException(string $exception) segunda-feira, 29 de novembro de 2010
  • 46. PHP - Job API - Client <?php 1. $client= new GearmanClient(); 2. $client->addServer(); 3. $handle = $client->doBackground("title", "o PHp"); 4. if($client->returnCode() != GEARMAN_SUCCESS) { 5. echo "Job com problemas";exit; 6. } 7. $done = false; 8. do { 9. sleep(2); 10. $stat = $client->jobStatus($handle); 11. if(!$stat[0]) { $done = true; }//job terminou 12. if($stat[1] == true) 13. echo "Executando:", ' passo ' , $stat[2], ' de ', $stat[3], "n"; 14.}while(!$done); 15.?> segunda-feira, 29 de novembro de 2010
  • 47. PHP - Job API - Worker <?php 1. $worker= new GearmanWorker(); 2. $worker->addServer(); 3. $worker->addFunction("title", "title_function"); 4. while ($worker->work()); 5.     6. function title_function($job){ 7. $job->sendStatus(0, 2); 8. sleep(3); 9. $job->sendStatus(1, 2); 10. sleep(3); 11. $job->sendStatus(2, 2); 12. return ucwords(strtolower($job->workload())); 13.} 14.?> segunda-feira, 29 de novembro de 2010
  • 48. PHP - Client API - Prioridades • Síncrono echo $client->do("title", "uma frasE quAlquer"); echo $client->doHigh("title", "uma frasE quAlquer"); echo $client->doLow("title", "uma frasE quAlquer");  • Assíncrono $handle1 = $client->doBackground("title", "uma frasE quAlquer"); $handle1 = $client->doHighBackground("title", "uma frasE quAlquer"); $handle1 = $client->doLowBackground("title", "uma frasE quAlquer"); segunda-feira, 29 de novembro de 2010
  • 49. Filas Persistentes • Internamente todas as filas de jobs são armazenadas em memória. Se o servidor reinicia ou acontece algum erro todos os jobs pendentes são perdidos • Pode-se usar filas persistentes para armazenar os jobs pendentes (somente jobs assíncronos) • É possível armazenar a fila em: • MySQL (libdrizzle) • Memcached (libmemcached) • SQLite3 (libsqlite3) segunda-feira, 29 de novembro de 2010
  • 50. Monitorando telnet localhost 4730 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. status jobLog 0 0 1 jobTwitter 0 0 1 jobTwitterUser 0 0 1 jobFacebookPostSearch 0 0 1 jobFeed 0 0 1 jobBlogsearch 0 0 1 jobFacebookUser 2 1 1 jobSlideshareUser 0 0 1 segunda-feira, 29 de novembro de 2010
  • 51. Gearman no Drimio • Processamento de Logs • Monitoramento de redes sociais (Twitter, Youtube, Flickr, Yahoo, Facebook, Feeds, Blogsearch, Slideshare, etc) • Envio de e-mails • Captura de snapshots de URLS • Envio de tweets/posts Facebook • Redimensionamento de imagens • Média de 55 mil jobs/dia segunda-feira, 29 de novembro de 2010
  • 52. Tudo junto reunido! 1. Faz pesquisa 2. Chamada de API 3. Resultado 4. Jobs para processar imagens e para Log de acesso Imagens processadas e salvas em Memcached e Logs em MySQL 5. Página de resultados segunda-feira, 29 de novembro de 2010
  • 54. Contato <?php $card = array( ‘nome’ => ‘Elton Luís Minetto’, ‘site’ => ‘http://www.eltonminetto.net’, ‘e-mail’ => ‘eminetto@coderockr.com’, ‘twitter’ => ‘@eminetto’, ‘all’ => ‘http://about.me/eminetto' ); var_dump($card); ?> segunda-feira, 29 de novembro de 2010
  • 55. Referências • http://www.danga.com • http://www.slideshare.net/andreizm/all-the-little- pieces-1573862 • http://www.slideshare.net/acme/scaling-with- memcached • http://www.slideshare.net/oemebamo/introduction-to- memcached • http://www.slideshare.net/felixdv/high-gear-php-with- gearman-3404242 • http://www.eltonminetto.net/material-da-palestra-no- phpsc-conf-2009.htm • http://www.eltonminetto.net/material-de-minha- palestra-sobre-gearman.htm segunda-feira, 29 de novembro de 2010