SlideShare uma empresa Scribd logo
1 de 35
INTEGRAÇÃO DE SISTEMAS
    CASE: GLOBO.COM
      Utilizando software livre
             @pac_man

        Hack ‘n Rio 2011
QUEM SOU EU?

• Tiago   Peczenyj (@pac_man)

• Desenvolvedor    da globo.com

• Distribuição   de Videos/Webmedia

• Apaixonado     por Open Source

• Blog   pacman.blog.br
OPEN SOURCE NA
              GLOBO.COM


• php, perl, python   (Django, Tornado), ruby (Rails, Sinatra),

• apache, nginx, mysql, memcached, jQuery, CentOS...

• ffmpeg, mencoder, ImageMagick
INTEGRAÇÃO DE SISTEMAS


• File Transfer

• Shared   Database

• Remote   Procedure Invocation

• Messaging
CASE: PUBLICAÇÃO VIDEOS



• Eisque eu preciso pegar um video bruto e publicar na
 internet...
PUBLICAÇÃO DE VIDEOS


• E(f)   - encodar o video no(s) formato(s) especificos

•M   - inserir meta-dados do video no(s) sistema(s)

•D   - disponibilizar video adequadamente
RESUMO



• E(f)   -> M -> D
THUMBNAILS?



• E(f)   -> T -> M -> D
DISPONIBILIZAR: FTP E
         SINALIZAR QUE ESTA OK



• E(f)   -> T -> M -> F -> S
DEFINIR OS FORMATOS



• D->   E(f) -> T -> M -> F -> S
E TAMBÉM


• Publicar   em um tempo X (SLA)

• Resistir   à catástrofes (rede, banco, disco)

• Utilizar   bem meus recursos
COMOFAS/


• Com   um sistema apenas posso fazer tudo isso.

•N   vídeos, N instâncias do sistema simultaneamente.

• Monolítico
MAS E O SLA?



• Se
   tiver que produzir varios formatos, vou demorar se esperar
 um formato ficar pronto para produzir o próximo
RESISTIR À CATÁSTROFE


• Sealguma das etapas falhar, precisarei seguir alguma protocolo
 de acordo com a natureza da falha.

• Seprecisar retentar enquanto a falha persiste (ex: rede) pode
 ficar complexo o tratamento disso.

• Devo   evitar estados inconsistentes e voltar a funcionar OK
UTILIZAÇÃO DE RECURSOS

• Linguagens   interpretadas podem apresentar GIL

• Maquinas   atuais possuem CPU com varios cores

• Precisoainda de redundância para garantir alta
 disponibilidade, meus gastos podem facilmente sair o dobro
 do esperado.

• Cores   de CPU ociosas são prejuizo
SOLUÇÃO


• Perl

• FFmpeg

• PHP

• MySQL
CONCEITOS
PROCESSOS


• Possoter varios processos na mesma maquina trabalhando de
 forma cooperativa

• A “morte” deum desses processos deve produzir uma
 resposta adequada (alarmar, reiniciar o processo por exemplo)

• Monitoria   dos processos é essencial (Watchdog, Monit, etc)
FILESYSTEM

• Emintegração de sistemas as vezes precisamos realizar
 operações atômicas (ex: um mesmo video não pode ser
 encodado varias vezes).

• Mover       um arquivo entre diretórios É uma operação atômica.

• Tudo   no mundo *nix é arquivo...

•2   + 2...
HTTP

• HyperText Transfer    Protocol

• Define    4 métodos: GET, POST, PUT, DELETE (HEAD, etc)

• Mensagem     possui Header e Body

• Codigos    de retorno bem compreendidos (200, 404, 500, 302)

• Trata   de transferir recursos
REST

• Representational    State Transfer

• Posso utilizar caracteristicas do HTTP para representar e
 transferir recursos entre sistemas

• Facilita   a integração pois praticamente tudo acessa a WEB

• Equivalência    entre métodos HTTP e CRUD
REST (2)


• PUT   -> Create

• GET   -> Retrieve

• POST   -> Update

• DELETE   -> Delete
REST (FIM)

• Possotrafegar a representação (em XML, JSON, YAML...)
 entre aplicações diferentes.

• Respeitando as regras e os verbos HTTP posso fazer muita
 coisa (no mínimo CRUD).

• Tolerância a erros: problemas temporários basta tentar
 novamente apos X segundos, problemas irreversíveis devem
 ser vistos imediatamente.
VIDEO (REST)


• Possui   meta-dados, identificador e estado

• Uma API    REST (PHP) centraliza a maquina de estados

• Video    (dado) é armazenado em banco, arquivo no filesystem

• Basta   operar sobre o arquivo e alterar o estado na API
CARTAS NA MESA

• Posso
      dividir as etapas em deamons independentes, que se
 comunicam transferindo o arquivo de video entre diretorios.

• Consistencia   é feita pela comunicação com a API

• API   fornece formatos de video

• Cumprir   todas as etapas torna o video apto a ser consumido
FLUXO UNICO



•D   -> E(f) -> T -> M -> F -> S (teorico)

•D   <- E(f) -> T -> M -> F -> S (pratico)
MAS O QUE FAZ A API?


• Outros   sistemas integram com a API

• Um   fluxo pode ser interrompido

• Posso   saber o que esta acontecendo

• Centraliza   regras de negócio
DEAMON TIPICO

• Trabalha   com conceito de diretorios

• Indir   é a entrada de videos

• Workdir      é onde o deamon trabalha

• Outdir     é a saída de videos

• Se   o outdir de um deamon for o Indir de outro... ?
REDUNDANCIA DE
                DEAMONS?

• Operação    move é atomica

• Cada   processo deve ter o seu Workdir

• Varios   procesos de uma mesma etapa tem o mesmo Indir

• Quem     chegar primeiro leva.

• Reporta   tudo a API REST (LWP)
use LWP::UserAgent;

my $ua = LWP::UserAgent−>new;

my $req = HTTP::Request−>new(
 GET => "http://api.xxx.com/video/$id"
 );

my $res = $ua−>request($req);

if ($res−>is_success) {
    process $res−>content;
} else {
    error $res−>status_line ;
}
<?php
# http://www.slimframework.com
require "Slim/Slim.php";
$app = new Slim();
$app->get('/video/:id', function($id) use ($app) {
   $service = new VideoService();
   if ( !$service->exists($id) ) {
     $app->notFound();
   } else {
     $app->render('video.tpl', $service->retrieve($id));
   }
 });
?>
E O SLA

• Arquitetura   garante paralelismo de atividades demoradas

• Limita-se   o tempo de encoding (via SIGALARM)

• Dimensiona-se     a infraestrutura para suportar uma média de
 videos

• SLA   é estatística
RESISTENCIA A DESASTRES

• Separandoos deamons cada um fica com codigo minimo e
 reusando modulos (CPAN) evitamos (os nossos) bugs

• Perda   de rede não trava o encoding, são processos separados

• Perda de banco local não trava o fluxo, depois o sistema é
 atualizado desde que haja cache de dados (http!)

• Redundância   natural, perder um processo não trava tudo

• Recuperação    simples: basta mover de volta o arquivo
OUTROS DETALHES

• Meta   Dados são publicados usando SOAP::Lite (ugh)

• Thumbs   são tranferidos usando base64 dentro do SOAP

• Thumbs   gerados pelo FFmpeg e ImageMagick

• 5%   dos videos são descartados por falta de qualidade

• Transferencia   hoje é SFTP
PERGUNTAS?

Mais conteúdo relacionado

Mais procurados

Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorZabbix BR
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoEmerson Macedo
 
Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014Ismael Stahelin
 
Estou seguro com no sql
Estou seguro com no sqlEstou seguro com no sql
Estou seguro com no sqlRafael Redondo
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPZabbix BR
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
 
Análise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizadosAnálise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizadosKleber Silva
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoFabio Telles Rodriguez
 
GUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gGUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gDaniela Macedo
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMPLeandro Mendes
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParametersZabbix BR
 
Comparação entre frameworks PHP
Comparação entre frameworks PHPComparação entre frameworks PHP
Comparação entre frameworks PHPRenato Shirakashi
 
Douglasesteves meetupzabbix
Douglasesteves meetupzabbixDouglasesteves meetupzabbix
Douglasesteves meetupzabbixDouglas Esteves
 

Mais procurados (19)

Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014Deploy de aplicações Ruby com Mina - TDC Floripa 2014
Deploy de aplicações Ruby com Mina - TDC Floripa 2014
 
Estou seguro com no sql
Estou seguro com no sqlEstou seguro com no sql
Estou seguro com no sql
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para Linux
 
Análise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizadosAnálise comparativa de desempenho de FileSystems em ambientes virtualizados
Análise comparativa de desempenho de FileSystems em ambientes virtualizados
 
12 Factor Apps
12 Factor Apps12 Factor Apps
12 Factor Apps
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Replicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManagerReplicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManager
 
GUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10gGUO-RS - Junho/2005 - ASM 10g
GUO-RS - Junho/2005 - ASM 10g
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 
Tunando sua aplicação LNMP
Tunando sua aplicação LNMPTunando sua aplicação LNMP
Tunando sua aplicação LNMP
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
 
Comparação entre frameworks PHP
Comparação entre frameworks PHPComparação entre frameworks PHP
Comparação entre frameworks PHP
 
Douglasesteves meetupzabbix
Douglasesteves meetupzabbixDouglasesteves meetupzabbix
Douglasesteves meetupzabbix
 

Semelhante a Integração de sistemas na Globo.com com arquitetura de microserviços

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters) iG - Internet Group do Brasil S/A
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxguest7a481e8
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsNuno Paz
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores LinuxImpacta Eventos
 
PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e MemcacheAndre Golvea
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
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
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosAlex Hübner
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 

Semelhante a Integração de sistemas na Globo.com com arquitetura de microserviços (20)

Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
 
Automação de Data Center
Automação de Data CenterAutomação de Data Center
Automação de Data Center
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Internet sem drama
Internet sem dramaInternet sem drama
Internet sem drama
 
O bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.jsO bom, o mau, o vilão... e o node.js
O bom, o mau, o vilão... e o node.js
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores Linux
 
PHP, Gearman e Memcache
PHP, Gearman e MemcachePHP, Gearman e Memcache
PHP, Gearman e Memcache
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Conheça o Docker
Conheça o DockerConheça o Docker
Conheça o Docker
 
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
 
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos CorreiosPerformance e disponibilidade ‐ Um estudo de caso: website dos Correios
Performance e disponibilidade ‐ Um estudo de caso: website dos Correios
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 

Integração de sistemas na Globo.com com arquitetura de microserviços

  • 1. INTEGRAÇÃO DE SISTEMAS CASE: GLOBO.COM Utilizando software livre @pac_man Hack ‘n Rio 2011
  • 2. QUEM SOU EU? • Tiago Peczenyj (@pac_man) • Desenvolvedor da globo.com • Distribuição de Videos/Webmedia • Apaixonado por Open Source • Blog pacman.blog.br
  • 3. OPEN SOURCE NA GLOBO.COM • php, perl, python (Django, Tornado), ruby (Rails, Sinatra), • apache, nginx, mysql, memcached, jQuery, CentOS... • ffmpeg, mencoder, ImageMagick
  • 4. INTEGRAÇÃO DE SISTEMAS • File Transfer • Shared Database • Remote Procedure Invocation • Messaging
  • 5. CASE: PUBLICAÇÃO VIDEOS • Eisque eu preciso pegar um video bruto e publicar na internet...
  • 6. PUBLICAÇÃO DE VIDEOS • E(f) - encodar o video no(s) formato(s) especificos •M - inserir meta-dados do video no(s) sistema(s) •D - disponibilizar video adequadamente
  • 7. RESUMO • E(f) -> M -> D
  • 8. THUMBNAILS? • E(f) -> T -> M -> D
  • 9. DISPONIBILIZAR: FTP E SINALIZAR QUE ESTA OK • E(f) -> T -> M -> F -> S
  • 10. DEFINIR OS FORMATOS • D-> E(f) -> T -> M -> F -> S
  • 11. E TAMBÉM • Publicar em um tempo X (SLA) • Resistir à catástrofes (rede, banco, disco) • Utilizar bem meus recursos
  • 12. COMOFAS/ • Com um sistema apenas posso fazer tudo isso. •N vídeos, N instâncias do sistema simultaneamente. • Monolítico
  • 13. MAS E O SLA? • Se tiver que produzir varios formatos, vou demorar se esperar um formato ficar pronto para produzir o próximo
  • 14. RESISTIR À CATÁSTROFE • Sealguma das etapas falhar, precisarei seguir alguma protocolo de acordo com a natureza da falha. • Seprecisar retentar enquanto a falha persiste (ex: rede) pode ficar complexo o tratamento disso. • Devo evitar estados inconsistentes e voltar a funcionar OK
  • 15. UTILIZAÇÃO DE RECURSOS • Linguagens interpretadas podem apresentar GIL • Maquinas atuais possuem CPU com varios cores • Precisoainda de redundância para garantir alta disponibilidade, meus gastos podem facilmente sair o dobro do esperado. • Cores de CPU ociosas são prejuizo
  • 18. PROCESSOS • Possoter varios processos na mesma maquina trabalhando de forma cooperativa • A “morte” deum desses processos deve produzir uma resposta adequada (alarmar, reiniciar o processo por exemplo) • Monitoria dos processos é essencial (Watchdog, Monit, etc)
  • 19. FILESYSTEM • Emintegração de sistemas as vezes precisamos realizar operações atômicas (ex: um mesmo video não pode ser encodado varias vezes). • Mover um arquivo entre diretórios É uma operação atômica. • Tudo no mundo *nix é arquivo... •2 + 2...
  • 20. HTTP • HyperText Transfer Protocol • Define 4 métodos: GET, POST, PUT, DELETE (HEAD, etc) • Mensagem possui Header e Body • Codigos de retorno bem compreendidos (200, 404, 500, 302) • Trata de transferir recursos
  • 21. REST • Representational State Transfer • Posso utilizar caracteristicas do HTTP para representar e transferir recursos entre sistemas • Facilita a integração pois praticamente tudo acessa a WEB • Equivalência entre métodos HTTP e CRUD
  • 22. REST (2) • PUT -> Create • GET -> Retrieve • POST -> Update • DELETE -> Delete
  • 23. REST (FIM) • Possotrafegar a representação (em XML, JSON, YAML...) entre aplicações diferentes. • Respeitando as regras e os verbos HTTP posso fazer muita coisa (no mínimo CRUD). • Tolerância a erros: problemas temporários basta tentar novamente apos X segundos, problemas irreversíveis devem ser vistos imediatamente.
  • 24. VIDEO (REST) • Possui meta-dados, identificador e estado • Uma API REST (PHP) centraliza a maquina de estados • Video (dado) é armazenado em banco, arquivo no filesystem • Basta operar sobre o arquivo e alterar o estado na API
  • 25. CARTAS NA MESA • Posso dividir as etapas em deamons independentes, que se comunicam transferindo o arquivo de video entre diretorios. • Consistencia é feita pela comunicação com a API • API fornece formatos de video • Cumprir todas as etapas torna o video apto a ser consumido
  • 26. FLUXO UNICO •D -> E(f) -> T -> M -> F -> S (teorico) •D <- E(f) -> T -> M -> F -> S (pratico)
  • 27. MAS O QUE FAZ A API? • Outros sistemas integram com a API • Um fluxo pode ser interrompido • Posso saber o que esta acontecendo • Centraliza regras de negócio
  • 28. DEAMON TIPICO • Trabalha com conceito de diretorios • Indir é a entrada de videos • Workdir é onde o deamon trabalha • Outdir é a saída de videos • Se o outdir de um deamon for o Indir de outro... ?
  • 29. REDUNDANCIA DE DEAMONS? • Operação move é atomica • Cada processo deve ter o seu Workdir • Varios procesos de uma mesma etapa tem o mesmo Indir • Quem chegar primeiro leva. • Reporta tudo a API REST (LWP)
  • 30. use LWP::UserAgent; my $ua = LWP::UserAgent−>new; my $req = HTTP::Request−>new( GET => "http://api.xxx.com/video/$id" ); my $res = $ua−>request($req); if ($res−>is_success) { process $res−>content; } else { error $res−>status_line ; }
  • 31. <?php # http://www.slimframework.com require "Slim/Slim.php"; $app = new Slim(); $app->get('/video/:id', function($id) use ($app) { $service = new VideoService(); if ( !$service->exists($id) ) { $app->notFound(); } else { $app->render('video.tpl', $service->retrieve($id)); } }); ?>
  • 32. E O SLA • Arquitetura garante paralelismo de atividades demoradas • Limita-se o tempo de encoding (via SIGALARM) • Dimensiona-se a infraestrutura para suportar uma média de videos • SLA é estatística
  • 33. RESISTENCIA A DESASTRES • Separandoos deamons cada um fica com codigo minimo e reusando modulos (CPAN) evitamos (os nossos) bugs • Perda de rede não trava o encoding, são processos separados • Perda de banco local não trava o fluxo, depois o sistema é atualizado desde que haja cache de dados (http!) • Redundância natural, perder um processo não trava tudo • Recuperação simples: basta mover de volta o arquivo
  • 34. OUTROS DETALHES • Meta Dados são publicados usando SOAP::Lite (ugh) • Thumbs são tranferidos usando base64 dentro do SOAP • Thumbs gerados pelo FFmpeg e ImageMagick • 5% dos videos são descartados por falta de qualidade • Transferencia hoje é SFTP

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n