TDC2012 Comparação de Report de falha em lojas de aplicativos
tdc2012
-
Upload
juan-lopes -
Category
Technology
-
view
1.138 -
download
0
Transcript of tdc2012
Um Case de Arquitetura Distribuída para Indexação, Armazenamento e
Análise de Logs em Tempo Real
Juan Lopes
COMPLEX EVENT PROCESSING
TIME SERIESREAL-TIME
LOGS
CENTENAS DE SERVIDORES
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
COMO ACESSAR OS LOGS?
COMO "DEBUGAR"?
CENTRALIZARINDEXAR
3TB / DIA
3TB / DIA10.000.000.000 MSGS / DIA
36 MB / SEGUNDO
TWITTER400.000.000 MSGS / DIAEM JUNHO/2012
LOGGLYAmplamente utilizadoPrimeira opção para cloudMaior plano não-custom: 12GB/diaPreço: $1,779/mês
GRAYLOG2Open SourceSelf-hostedArquitetura de partes móveisMongoDBElasticSearchAMQP
SPLUNKFamoso na área de BigDataDestinado ao mundo EnterpriseMuitos gráficos e relatórios$6,000 one-time fee: 500MB/dia500MB < 3TB :(
JAVA
HOTSPOT
java.util.concurrent
VISÃO GERAL
Indexar
Armazenar
Interpretarmensagens
RFC 3164: 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>
CHAVE: VALOR
<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8
message
facility AUTH
severity CRITICAL
host mymachine
process su
date 20121011
time 221415
text su, root, failed, for, lonvick, on, /dev/pts/8
?
MG4JEgothor
NutchOxyus
BDDBotZilverline
YaCyCompass
LiusRegain
PiscatorHounderHSearch
<FIELD:CONTENT, DOC*>
TEXT:ABACAXI ➜ 1, 3, 9TEXT:BANANA ➜ 2, 3, 10, 42TEXT:CAJU ➜ 3, 11, 50
BAIXA ENTROPIA
<10% de termos únicosmenor overhead por mensagem
MESSAGE BAG
Bufferizar
Indexar
Armazenar
Interpretar
VISÃO GERAL
<DOC, FREQ, POSITION*>
1, 4 ➜ 5, 6, 10, 203, 1 ➜ 409, 4 ➜ 6, 7, 8, 9
SCORES NÃO IMPORTAM
INDEXAÇÃOField
DocumentIndexWriter
BUSCAQueryParserQueryIndexSearcher
NORMAL
INDEXAÇÃOTokenStream
DocumentIndexWriter
BUSCATermPositionsFieldCacheIndexReader
HARDCORE
CULPA DA WIDESCREEN
CULPA DA WIDESCREEN
Jersey (REST API)Backbone.jsCometD
WEB INTERFACE
Jersey (REST API)Backbone.jsCometD
WEB INTERFACE
engine browser
"app:apache http 404"?
"OK. listen: /comet/1234568790abcdef"
CULPA DA WIDESCREEN
CULPA DA WIDESCREEN
Cara e coragemHttpClientCometD
COMMAND-LINE INTERFACE
/intelie/lognit-cli
REALTIME (AKA TAIL -F)
EVENTS
subscriber
LIGHTWEIGHT TERM TRIE
ABRAÇOABRIGOCHOCOLATE
<RAIZ>
ABR
AÇO IGO
CHOCOLATE
AGREGAÇÃO (AKA WC -L)
EVENTS
http
~10.000 eventos / segundo
http => count()
1 evento / segundo
http => count()by host
~100 eventos / segundo
http => count()by host
every 30 seconds
~100 eventos / 30 segundos
http => avg(cputime#)by host
every 30 seconds
~100 eventos / 30 segundos
CULPA DA WIDESCREEN
CULPA DA WIDESCREEN
É PRECISO
ESCALAR
taxa de leituraMODERADA
taxa de escritaALTÍSSIMA
dependência entre os dados
BAIXA
SHARDING
LoadBalancer
engine
engine
engine
UDP/TCP 514
Cluster
engine
engineengine
Cluster
engine
engineengine
Cluster
engine
engineengine
HTTP
usuário
WebServer
Broker
Cluster
engine
engineengine
HTTP
usuário
WebServer
Cluster
HTTP
usuário
Multicast
engine
engine
engine
MULTICAST
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);}
STACK CONFIGURÁVEL
TUDO ESTÁ DISTRIBUÍDO
last 10 "http_status:404"
10
10
10
10
usuário
engine
engine
engine
mergesort, take 10
BUSCA
engine
engine
engine
last 10 "http_status:404"
before {id:84324814}
10
10
10
10
usuário
mergesort, take 10
BUSCA
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)
AGREGAÇÃO
engine engine engine
sum(time) + sum(time) + sum(time)count(time) + count(time) + count(time)
AGREGAÇÃO
engine engine engine
E EM PRODUÇÃO?
3.5BI DE MENSAGENS
1TB DE DADOS ORIGINAIS
180GB DE ÍNDICE
3 SERVIDORES (LOAD < 0.2)
UMA ÚLTIMA COISA
1700+ TESTS
99% LINESCOVERED
OBRIGADO!
/juanplopes
@juanplopes
intelie.com.br