• Like
uerj201212
Upcoming SlideShare
Loading in...5
×

uerj201212

  • 178 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
178
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. OS DESAFIOS COMPUTACIONAIS DE INDEXAR TERABYTES DE DADOS
  • 2. AGENDA● MOTIVAÇÃO● COMO INDEXAR?● COMO NOTIFICAR?● COMO AGREGAR?● COMO DISTRIBUIR?
  • 3. COMPLEX EVENT PROCESSING
  • 4. TIME SERIESREAL-TIME
  • 5. LOGS
  • 6. MILHARES DEEQUIPAMENTOS
  • 7. marvin@goldenheart ~ $ ssh root@deepthought****WELCOME TO 1 OF YOUR 38,157,987 SERVERS.TRY THE VEAL. ITS THE BEST IN THIS FARM.****root@deepthought ~ $ tail -f /var/log.txt COMO ACESSAR OS LOGS?
  • 8. COMO"DEBUGAR"?
  • 9. LOG ÉTEXTO
  • 10. MUITO TEXTO
  • 11. 3TB / DIA
  • 12. 3TB / DIA10.000.000.000 MSGS / DIA36 MB / SEGUNDO
  • 13. JAVA
  • 14. VISÃO GERAL ARMAZENAR mensagens INTERPRETAR INDEXAR NOTIFICAR
  • 15. 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>
  • 16. CHAVE: VALORmessage <34>Oct 11 22:14:15 mymachine su: su root failed for lonvick on /dev/pts/8text su, root, failed, for, lonvick, on, /dev/pts/8facility AUTHseverity CRITICALdate 20121011time 221415host mymachineprocess su
  • 17. <TERM, DOC*>ABACATE ➜ 12ABACAXI ➜ 1, 3, 9BANANA ➜ 2, 3, 42CAJU ➜ 3, 11, 42, 50DAMASCO ➜ 17, 18, 19...
  • 18. CAJU E BANANA CAJU ∩ BANANABANANA ➜ 2, 3, 42CAJU ➜ 3, 11, 42, 50CAJU ∩ BANANA ➜ 3, 42
  • 19. CAJU OU BANANA CAJU U BANANABANANA ➜ 2, 3, 42CAJU ➜ 3, 11, 42, 50CAJU U BANANA ➜ 2, 3, 11, 42, 50
  • 20. QUERIESTERM abacaxiPREFIX abaca*WILDCARD ab*a?iFUZZY abacazi~RANGE [abacaxi TO banana]
  • 21. QUERIES (cajá~ || bana*) -damasco Registros que contenham algo parecido com cajá (talvez cajú) ou algo que comece combana, mas que definitivamente não contenham damasco.
  • 22. ORDENAÇÃO (2, 3, 10, 11, 42, 50) (10, 2, 11, 3, 42, 50)
  • 23. ORDENAÇÃO Como ordenar 100M+ inteiros em tempo hábil? Arrays.sort(data) ➜ ~5s
  • 24. ORDENAÇÃO SELEÇÃO Como encontrar os 1000 menores inteiros de um total de 100M+ em tempo hábil? introSelect(data, 1000) ➜ 300ms
  • 25. ORDENAÇÃO SELEÇÃOpublic void select(int[] data, int begin, int end, int m) { if (begin >= end) return; m = Math.min(m, end - begin); for (int depth = 0; depth < MAX_DEPTH; depth++) { int pivot = partition(data, begin, end, begin + (end - begin) / 2); int d = pivot - begin + 1; if (d == m) { return; } else if (m < d) { end = pivot; } else { m -= d; begin = pivot + 1; } } //fall back to heap sort when too deep heap.select(data, begin, end, m); }
  • 26. BAIXA ENTROPIA
  • 27. <10% de termos únicosmenor overhead por mensagem MESSAGE BAG
  • 28. <TERM, <DOC, POSITION*>*>ABACATE ➜ <12, 1, 2>ABACAXI ➜ <1, 1>, <3, 2>, <9, 1>BANANA ➜ <2, 1, 5>, <3, 2>, <10, 1>...
  • 29. BUSCAS NO HISTÓRICO Thread #1 ids+positions Thread #2 busca ids+positions ids+positions mensagens . . . Thread #n ids+positions ÍNDICE STORAGE
  • 30. REALTIME (AKA TAIL -F) MENSAGENS subscriber
  • 31. REALTIME (AKA TAIL -F) MENSAGENS subscriber subscriber subscriber #n
  • 32. 60 MessageBags / segundo +20 mil termos / MessageBag + 100+ queries registradas = #FAIL
  • 33. TRANSIENT TERM TRIEABACAXIABACATEBANANA <RAIZ> ABACA BANANA XI TE
  • 34. AGREGAÇÃO MENSAGENS agregador subscriber
  • 35. ~10.000 eventos / segundohttp
  • 36. 1 evento / segundohttp => count()
  • 37. ~20 eventos / segundohttp => count() by host
  • 38. ~20 eventos / 30 segundos http => count() by hostevery 30 seconds
  • 39. ~20 eventos / 30 segundoshttp => avg(cputime#) by host every 30 seconds
  • 40. <aggregationQuery> <subtraction> <aggregation> <aggregation> <parseNumber> <parseNumber><search> <property> <property> http => avg(cputime#) - avg(systemtime#)
  • 41. type:http status:404=> :count=> :avglast(5) c5, :avglast(60) c60=> c5 > 1.25*c60 as alarm=> alarm != alarm:prev as changed=> alarm by host every minute if changed
  • 42. DISTINCT COUNTCARDINALIDADE http => dcount(session_id) every hour
  • 43. DISTINCT COUNTCARDINALIDADE http => dcount(session_id) every hour Usar HashSet<T> significaria manter todos os session_ids em memória.
  • 44. DISTINCT COUNTCARDINALIDADEHYPERLOGLOG SKETCHhash(input) observar padrões de bits acumular estimadores
  • 45. DISTINCT COUNTCARDINALIDADEHYPERLOGLOG SKETCHhash(input) observar padrões de bits acumular estimadores"m" estimadores de 5 bits Std error: 104% / sqrt(m) m=216 ➜ 40KiB ➜ ~0.41%
  • 46. É PRECISOESCALAR
  • 47. taxa de leitura MODERADA taxa de escrita ALTÍSSIMAdependência entre os dados BAIXA
  • 48. SHARDING engine LoadUDP/TCP 514 engine Balancer engine
  • 49. Clusterengineengine engine
  • 50. Clusterengine Web HTTP Serverengine engine usuário Broker
  • 51. Clusterengine Web HTTP Serverengine engine usuário
  • 52. Clusterengine engineengine
  • 53. Clusterengine Multicast engine HTTPengine usuário
  • 54. MULTICASTJChannel 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);}
  • 55. STACK CONFIGURÁVEL
  • 56. TUDO ESTÁ DISTRIBUÍDO
  • 57. BUSCA engine 10 mergesort, take 10 10 last 10 "http_status: 10 engine 404" usuário 10 engine
  • 58. BUSCA engine 10 mergesort, take 10 10 last 10 "http_status: 10 engine 404" before {id:84324814} usuário 10 engine
  • 59. AGREGAÇÃO http 200 => count() by host host count foo 1234 bar 2345 baz 3456
  • 60. AGREGAÇÃO count() + count() + count() engine engine engine
  • 61. AGREGAÇÃO http 200 => avg(time) by host host avg_time foo 0.888889 bar 0.224568 baz 5.623424
  • 62. AGREGAÇÃO avg(time) + avg(time) + avg(time) ? engine engine engine
  • 63. AGREGAÇÃO sum(time) + sum(time) + sum(time) count(time) + count(time) + count(time) engine engine engine
  • 64. E EM PRODUÇÃO?
  • 65. 9 BILHÕES DE LINHAS DE LOG 3TB EM DADOS ORIGINAIS 350GB DE ÍNDICE 3 SERVIDORES
  • 66. 2100+ TESTES98%LINHASCOBERTAS
  • 67. OBRIGADO! /juanplopes @juanplopes intelie.com.br slideshare.net/juanplopes