Lucene nas alturas: 400 buscas por segundo
ROdLéo Nickel
1Saturday, May 14, 2011
13/05/11 2
ROd
Desenvolvedor
especialista em
arquiteturas de alta
performance
relacionadas a
publicação e busca
de conteúdo
2Saturday, May 14, 2011
13/05/11 3
Léo Nickel
Desenvolvedor de
sistemas com
experiência de 5
anos em aplicações
Java EE nos
segmentos de
telefonia, marketing
online e busca
orgânica
3Saturday, May 14, 2011
13/05/11 4
MOTIVAÇÃO
• Substituição do motor de busca FAST SEARCH
• Alternativas
– Compass
– ElasticSearch
– Lucene
– Solr
– Sphinx
4Saturday, May 14, 2011
13/05/11 5
LUCENE
Mar/2000: Versão 0.01 (SourceForge) Thu Mar 30 20:02:47 2000 UTC by cutting
Out/2000: Versão 1.0Jun/2002: Versão 1.2 (Apache Jakarta)Dez/2004: Lucene in Action (1.4.3) Fev/2005: Apache top-level projectMai/2006: Versão 2.0Set/2009: Versão 2.9Nov/2009: Versão 3.0Mar/2011: Versão 3.1
5Saturday, May 14, 2011
13/05/11 6
REQUISITOS NÃO FUNCIONAIS
• Baixa latência de indexação
• Alta disponibildade de busca
• Proteção do storage
• Capacidade adaptativa dos repositórios
• Estado imutável
6Saturday, May 14, 2011
13/05/11 7
REQUISITOS FUNCIONAIS
• Paginação
• Ordenações
• Sharding
• Otimização de índices
• Suporte a diversos charsets
7Saturday, May 14, 2011
13/05/11 8
COMPONENTES
• Indexer
– Interface REST para manipulação de documentos
– API sync e async
• Searcher
– Query string para definir a busca
– Cache
8Saturday, May 14, 2011
13/05/11 9
COMPONENTES
• Repositório
– Colunas
– Tipo de dados
• Texto
• Número
• Data
• Moeda
• Url
– Comportamento
• Indexable
• Analyzed
• Sortable
• Boost
9Saturday, May 14, 2011
13/05/11 10
AMBIENTE
• Ambiente FAST SEARCH– Cluster de 4 máquinas
– 100 QPS
• Ambiente Lucene– Cluster de 2 máquinas
– ?? QPS
10Saturday, May 14, 2011
13/05/11 11
MÉTRICAS
• scripts bash
for x in $(seq 1 100) do curl "http://localhost:8080/searcher/?...$x...”; done• iostat
• nfsstat
• top
• JMeter
11Saturday, May 14, 2011
13/05/11 12
TIMELINE
SERVIDOR LINUX 1NFS PARAMS
24 QPS
12Saturday, May 14, 2011
13/05/11 13
TIMELINE
EMAIL ROd → Ops“Finally, realize that performance over NFS is not great,
because the bytes must cross the wires to get
to the computer doing the searching. It’s possible
mounting the NFS directory as read-only may
improve the performance, but likely you’ll still be far
from the performance of a local native directory.”
Fonte: Lucene In Action
13Saturday, May 14, 2011
13/05/11 14
TIMELINE
DESKTOP LINUXDISCO LOCAL
200 QPS
14Saturday, May 14, 2011
13/05/11 15
TIMELINE
OTIMIZAÇÃOCOMPOUND FILE
READ ONLY
FIELD SELECTOR
ESTRATÉGIA DE REOPEN
15Saturday, May 14, 2011
13/05/11 16
TIMELINE
SERVIDOR LINUX 1NFS PARAMS
30 QPS
16Saturday, May 14, 2011
13/05/11 17
TIMELINE
SERVIDOR LINUX 2RAM Directory
550 QPS
17Saturday, May 14, 2011
13/05/11 18
TIMELINE
SERVIDOR LINUX 2DISCO LOCAL
500 QPS
18Saturday, May 14, 2011
13/05/11 19
TIMELINE
SERVIDOR LINUX 2NFS DEFAULT
420 QPS
19Saturday, May 14, 2011
13/05/11 20
TIMELINE
SERVIDOR LINUX 1NFS DEFAULT + RO
450 QPS
20Saturday, May 14, 2011
13/05/11 21
TIMELINE
PROBLEMAVÁRIOS SEARCHERS NO MESMO
NFS DEGRADARIA SEU USO?
21Saturday, May 14, 2011
13/05/11 22
TIMELINE
SERVIDOR LINUX 1 e 2CARGA: SERVIDOR LINUX 3 e 4
450 QPS
22Saturday, May 14, 2011
13/05/11 23
TIMELINE
SERVIDOR LINUX 1MOD_MEMCACHE LRU
3000 QPS
23Saturday, May 14, 2011
13/05/11 24
ENTRADA EM PRODUÇÃO...
SERVIDOR LINUX 1 e 2NFS DEFAULT + RO
27 QPS
24Saturday, May 14, 2011
13/05/11 25
E CRESCENDO...
SERVIDOR LINUX 1 e 2NFS DEFAULT + RO
213 QPS
25Saturday, May 14, 2011
13/05/11 26
RECORDE!
SERVIDOR LINUX 1 e 2NFS DEFAULT + RO
462 QPS
26Saturday, May 14, 2011
13/05/11 27
APÓS UM ANO...
• Transição de conteúdo da busca antiga
• Novas abordagens de busca
• Reutilização em produtos internos
• Plataforma em constante evolução
27Saturday, May 14, 2011
13/05/11 28
PERGUNTAS
28Saturday, May 14, 2011