SlideShare ist ein Scribd-Unternehmen logo
1 von 70
Downloaden Sie, um offline zu lesen
Um Case de Arquitetura
Distribuída para Indexação,
 Armazenamento e Análise
  de Logs em Tempo Real
             Juan Lopes

      .NET Architects Days 2012
Quem?

        Juan Lopes
        twitter.com/
        github.com/
                     juanplopes
Monitoração
Complex Event Processing
Time series. Real-time.
Logs!
Case real
Case real
Centenas de servidores
Como acessar os logs?

marvin@goldenheart ~ $ ssh root@deepthought
****
WELCOME TO 1 OF YOUR 38,157,987 SERVERS.
TRY THE VEAL. IT'S THE BEST IN THIS FARM.
****

root@deepthought ~ $ tail -f /var/log.txt
Vai falhar? Já falhou? Onde?
Informações para BI
CEP ajuda, mas...
Log é texto. Muito texto.
Centralizar. Indexar.
Mas é muito texto mesmo!
Volumes desafiadores


         3TB/dia
Volumes desafiadores


         3TB/dia
20 bilhões de mensagens/dia
         36MB/segundo
   250.000 mensagens/segundo
Twitter


          340 milhões
          tweets por dia
             (março/2012)
           http://blog.twitter.com/2012/03/twitter-turns-six.html
Quem resolve?

Loggly
●   Amplamente utilizado
●   Primeira opção em cloud
●   Maior plano não-custom: 12GB/dia
●   Preço: $1,779/mês
Quem resolve?

Graylog
● Open Source
● Self-hosted
● Arquitetura composta de partes móveis
  ○ MongoDB
  ○ ElasticSearch
  ○ AMQP
Quem resolve?

Splunk
●   Famoso na área de BigData
●   Destinado ao mundo Enterprise
●   Muitos gráficos e relatórios
●   $6,000 one-time fee: 500MB/day
●   500MB < 3TB :(
Ser simples
JVM
HotSpot: JIT+GC = s2
java.util.concurrent
Visão geral

                            Armazenar


  mensagens   Interpretar


                             Indexar
RFC 3164: BSD syslog

 <34>Oct 11 22:14:15 mymachine su: 'su
 root' failed for lonvick on /dev/pts/8

 <priority = facility*8+severity>
 <date/time>
 <host>
 <process>
 <message>
Mensagem: chave -> valor

           <34>Oct 11 22:14:15 mymachine su: 'su root'
message
           failed for lonvick on /dev/pts/8
text       su, root, failed, for, lonvick, on, /dev/pts/8

facility   AUTH
severity   CRITICAL
date       20121011
time       221415

host       mymachine
process    su
Indexação
1 documento / mensagem


      http://lucene.apache.org/core/

"index size roughly 20-30% the size of
             text indexed"
1 documento / mensagem


       30% de 3TB
           =
        ~900GB
1 documento / mensagem


       30% de 3TB
           =
        ~900GB
Logs têm baixíssima entropia
MessageBag

<10% de         menor overhead
termos únicos    por mensagem
Visão geral

                            Armazenar


 Interpretar   Bufferizar


                             Indexar
Índice minimalista
 No freqs, no positions, no norms, no
             term vectors.
Field field = new Field(key, value,
                        Field.Store.NO,
                        Field.Index.ANALYZED_NO_NORMS,
                        Field.TermVector.NO);

field.setIndexOptions(FieldInfo.IndexOptions.
DOCS_ONLY);
~1% dos dados originais
Buscar no futuro
Árvore de Prefixos

Binary Match em O(1)
Árvore de Prefixos

Binary Match em O(1)

TermQuery
PrefixQuery
WildcardQuery
FuzzyQuery
RangeQuery
BooleanQuery
Interface
Interface
● Jersey (REST API)
● Backbone.js
● CometD
Interface
● Jersey (REST API)
● Backbone.js
● CometD
               "app:apache http 404"?




         engine                    browser



        "OK. listen:
        /comet/1234568790abcdef"
Interface
É preciso escalar
Recapitulando


      Taxa de leitura: moderada
 Taxa de escrita: altíssima
   Dependência entre os dados: baixa
Sharding

                          engine



                Load
 UDP/TCP 514              engine
               Balancer



                          engine
Cluster


                   Cluster
          engine



          engine   engine
Cluster


                   Cluster
          engine



          engine             engine
Requisições via Broker

          Cluster
 engine
                     Web     HTTP
                    Server
 engine   engine                    usuário




                    Broker
Requisições via Broker

          Cluster
 engine
                     Web     HTTP
                    Server
 engine   engine                    usuário
Buscas no cluster - Multicast

            Cluster
   engine
            Multicast   engine   HTTP


   engine                               usuário
Multicast confiável
Multicast confiável
JChannel channel = new JChannel();
channel.setReceiver(new ReceiverAdapter() {
    public void receive(Message msg) {
        System.out.println(
            msg.getSrc() + ": " + msg.getObject());
    }
});

channel.connect("meuCanalDeChat");

BufferedReader reader = new BufferedReader(
                        new InputStreamReader(System.in));
while(true) {
    String line = reader.readLine();
    channel.send(null, line);
}
Multicast confiável, mas DIY
Stack configurável
Importante



    Toda funcionalidade precisa levar em
 consideração os outros membros do cluster.
Busca

 engine
           10

                    mergesort, take 10

          10    last 10 "http_status:    10
 engine
                        404"
                                              usuário
          10


 engine
Busca

 engine
           10
                     mergesort, take 10

                last 10 "http_status:     10
          10
 engine                  404"
                before {id:84324814}           usuário
          10


 engine
Agregação

        http 200 => count() by host

 host                count
 foo                 1234
 bar                 2345
 baz                 3456
Agregação

   count() + count() + count()




  engine      engine       engine
Agregação

        http 200 => avg(time) by host

 host                 avg_time
 foo                  0.888889
 bar                  0.224568
 baz                  5.623424
Agregação

    avg(time) + avg(time) + avg(time)
                   ?




  engine         engine          engine
Agregação

    sum(time) + sum(time) + sum(time)
 count(time) + count(time) + count(time)




  engine         engine          engine
Invalidar 2nd level caches


            Cluster
   engine



   engine             engine   POST /user/123abcdef
One last thing
One last thing
Obrigado




      Obrigado

Weitere ähnliche Inhalte

Was ist angesagt?

Zimbra Anahuac2
Zimbra Anahuac2Zimbra Anahuac2
Zimbra Anahuac2
anahuac2
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
Terra / Neo
 

Was ist angesagt? (20)

MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
Zimbra Anahuac2
Zimbra Anahuac2Zimbra Anahuac2
Zimbra Anahuac2
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
 
Redes 03 - rede
Redes   03 - redeRedes   03 - rede
Redes 03 - rede
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetes
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a ruby
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutos
 
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
 
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações WebRecursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
 
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy UsersTDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
TDC2018SP | Trilha Ruby - Sequel+ para ActiveRecord Heavy Users
 
Um milhao tdc2014sp Apresentação por Fernando Ike
Um milhao tdc2014sp Apresentação por Fernando IkeUm milhao tdc2014sp Apresentação por Fernando Ike
Um milhao tdc2014sp Apresentação por Fernando Ike
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
Aula de Node
Aula de NodeAula de Node
Aula de Node
 
Docker de containers a orquestração
Docker de containers a orquestraçãoDocker de containers a orquestração
Docker de containers a orquestração
 

Ähnlich wie dnad12

PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
Marco Pinheiro
 
Arquitetura de Cluster do Google
Arquitetura de Cluster do GoogleArquitetura de Cluster do Google
Arquitetura de Cluster do Google
Rafael Barbolo
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
Henrique Gogó
 

Ähnlich wie dnad12 (20)

Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
JBoss Clustering
JBoss ClusteringJBoss Clustering
JBoss Clustering
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
Arquitetura de Cluster do Google
Arquitetura de Cluster do GoogleArquitetura de Cluster do Google
Arquitetura de Cluster do Google
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
Secomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - IntroduçãoSecomp 2011 - Node.JS - Introdução
Secomp 2011 - Node.JS - Introdução
 
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan ScafiInterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
 
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
 
Introdução ao Google AppEngine
Introdução ao Google AppEngineIntrodução ao Google AppEngine
Introdução ao Google AppEngine
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
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
 

Mehr von Juan Lopes (10)

qconrio2015
qconrio2015qconrio2015
qconrio2015
 
qconsp2015
qconsp2015qconsp2015
qconsp2015
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexos
 
devday2013
devday2013devday2013
devday2013
 
dnarj20130504
dnarj20130504dnarj20130504
dnarj20130504
 
uerj201212
uerj201212uerj201212
uerj201212
 
devday2012
devday2012devday2012
devday2012
 
rioinfo2012
rioinfo2012rioinfo2012
rioinfo2012
 
tdc2012
tdc2012tdc2012
tdc2012
 
dnarj-20120630
dnarj-20120630dnarj-20120630
dnarj-20120630
 

Kürzlich hochgeladen

Kürzlich hochgeladen (9)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 

dnad12