Processamento em fila, assíncrono e/ou paralelo com Gearman e PHP II PHP DAY Diego Sana? [http://sanainside.com] [@sanainside] Desenvolvedor e empreendedor web há 10 anos Graduado em CC pela UFES 1999/00: freemp3.com.br 2001/03: centraldamusica.com.br 2004/07: Flogao.com.br 2009/10: Filtrie.com Conteúdo O que é? O que faz Como faz Quando usar Como instalar Como usar com PHP Gearman? Framework de aplicação genérico para distribuir trabalho Gearman Manager Distribui as tarefas, mas não faz nada de útil Framework? Provê e gerencia comunicação entre clientes e workers Genérico? É multi-linguagem (Php, C, Python, Java, Perl, Ruby, .NET) Trabalho? Rápido, Tolerante a falhas, flexível Algo mais? Open Source Protocolo simples e parecido com o do memcached Versão atual (0.12) ainda em beta, porém bastante estável e já em uso em grandes sites (Yahoo, Digg, Xing.com) Lembra das aulas de padrões de projeto de sistemas distribuídos? Gearman Stack Em bom português... Cliente (sua app): solicita ao servidor que processe dados XYZ utilizando a função W Servidor: Escolhe um worker livre que provê a função W e envia XYZ para ele Worker: processa os dados e diz ao servidor quando terminou (pode retornar ou não o resultado do processamento) Cliente Pode requisitar ao servidor que job seja executado de forma síncrona ou assíncrona (background) Pode enviar uma tarefa, que por sua vez é composta de jobs individuais a serem executados em paralelo Determina prioridade do job: baixa, normal ou alta Worker Ao ser iniciado, se conecta ao Gearman Server e registra quais funções sabe executar Dorme enquanto não há trabalho a fazer Pode enviar sinais ao servidor indicando status, exceções, falhas ou término de trabalho. Servidor Mantém os jobs em memória (opcional: persistência via memcache, sqlite, drizzle ou mysql) RoundRobin entre filas de diferentes funções FIFO em filas de mesma função/mesma prioridade Reenvia job para outro worker se não receber resposta Aplicações Popular cache / warm-up Limitar acesso concorrente a recursos Processamento de imagens Crawling / Parsing Análise e agregação de logs Gerenciamento de filas Use sua imaginação, jovem Padawan! Vantagens Processamento em paralelo acelera execução de tarefas Permite fazer com que usuário não espere desnecessariamente pelo resultado de processos que não lhe interessam Use a melhor linguagem para cada tarefa! Escala facilmente Instalando Gearman (http://gearman.org) Baixar job server (gearmand C) em http://gearman.org/index.php?id=download Dep: e2fsprogs-devel (Centos/RedHat) ./configure && make && make install Suporte a Mysql, Drizzle ou Memcached se já estiverem instalados Como executar gearmand -d -u nobody -q libmemcached --libmemcached-servers=localhost Outros parâmetros: -t 2, -t 3, -t 4 (número de threads) -job-retries 3 -l path/to/logfile.log -L 4730 (porta padrão) Instalação do cliente PHP Extensão Gearman (wrapper para extensão libgearman em C) http://pecl.php.net/package/gearman Manual: http://php.net/gearman pecl install gearman Adicionar "extension=gearman.so" ao php.ini Instalando SupervisorD (gerencia workers) http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg sh setuptools-0.6c11-py2.4.egg easy_install supervisor Config file: /etc/supervisor.conf Executar: /usr/bin/supervisord Worker no supervisord.conf [program:gearmanworker] command = php meuscript.php autostart = true numprocs = 50 numprocs_start = 1 startsecs = 5 startretries = 3 Implementando cliente e worker em PHP worker.php - 1 worker.php - 2 worker.php - 3 worker.php - 4 worker.php - 5 worker.php - 6 client.php - 1 client.php - 2 client.php - 3 client.php - 4 client.php - 5 client.php - 6 Slides e scripts disponíveis em www.sanainside.com
More presentations by Diego Sana
Popular presentations
Future-Proof Your Education
Maria Andersen on
How do you prepare for uncertain career paths where technical knowledge doubles every two years? You pay attention to the skills that surround the content: ...
More popular prezis in Explore>