Este documento discute a evolução da plataforma Elastic Stack, substituindo navegação multi-etapa por busca. Apresenta as principais atualizações e quebras de compatibilidade na versão 2.3, como limites de campos aninhados e dependências de script.
2. Missão: Melhorar a forma de obter a informação substituindo
navegação multi-etapa por busca.
Líder no segmento de busca corporativa na América Latina desde 2008
Nossos profissionais são certificados e dedicados exclusivamente à busca
corporativa
Desenvolvemos e integramos soluções para diversas verticais como Governo,
E-commerce, Industrias e Varejo
Parceiro oficial Elastic no Brasil
Sobre a E-Storage
3. + 60.000
Membros na
comunidade
+ 2.000
Clientes globais de
subscrição
+ 50 milhões
Downloads
Sobre a Elastic
● Fundada em 2012 em Amsterdam na Holanda
● Escritórios em mais de 14 paises
● Oferece apoio técnico e treinamentos
4. Sobre mim
● Trabalho com ferramentas para busca corporativa desde 2008
● Utilizo/Conheço Elasticsearch desde a versão 0.9
● Me interesso por todas as possibilidades oferecidas pelo stack como análise
de dados, busca de conteúdo, concorrência e performance
● Realizo treinamentos, provas de conceito e oriento a equipe de
desenvolvedores da E-Storage
5. Agenda
● A evolução do Elastic Stack
● Atualizando
● Compatibilidade na versão 2.3
7. A evolução do Elastic Stack
CRUD, Mapping, Busca, Query DSL, Highlight, Aliases, Cluster / Nós / Estatísticas de índices, Busca
facetada, Scripting, Index Templates, Dynamic Mapping, Parent/Child, Nested Objects, GET em
tempo real, Versionamento, Roteamento, Percolator, Geo-points, Geo-shapes e sugestões
8. A evolução do Elastic Stack
Aggregations, API CAT, Percolator distribuído, Doc Values, Snapshot/Restore, Tribe node, Circuit
breakers, Templates de pesquisa, Sugestões para autocompletar, Lucene scripting, Top hits
9. A evolução do Elastic Stack
Problemas com índices - Index Corruption
Problemas com memória - OOM
Problemas com segurança - Security exploits
Aggregations, API CAT, Percolator distribuído, Doc Values, Snapshot/Restore, Tribe node, Circuit
breakers, Templates de pesquisa, Sugestões para autocompletar, Lucene scripting, Top hits
10. A evolução do Elastic Stack
Resiliência do Cluster, Checksums em todo o lugar, Lock down scripting, Tornar Doc Values mais
rápido
11. A evolução do Elastic Stack
Tornar rolling restarts mais fáceis: Synced flush, Delayed allocation, Cancellable allocation
12. A evolução do Elastic Stack
Consertar todas as coisas!
13. A evolução do Elastic Stack
Reformulação da estrutura de mapping:
Era: Agora:
Extremamente Flexível Confiável
Permitía erros silenciosos Consistente
Podia gerar erros em índices Possui uma fudação mais sólida
Aqui ocorre uma quebra de compatibilidade com as versões anteriores
14. A evolução do Elastic Stack
E mais…
● Reformulação nos Transaction Logs: Duráveis, Atomic writes e realiza Fsync a cada
requisição
● Usabilidade: Query e filters juntos, cache automatico para consultas, Merge auto-throttling,
Excessões estruturadas, salvaguardas para administradores
● Uso de memória: Doc Values mais rapido usando o cache do sistema de arquivos, field length
norms e relevância utilizando a mesma estrutura de doc values, Parent/Child v2 (joins mais
rápidos) , Geo-points v2 (50% do tamanho índice)
● Segurança: Checagem JarHell, uso do Java Security Manager, uso de previlégios mínimos,
modularização do código, Java serialization não é mais utilizada
● Testes: Código completamente coberto por testes unitários, todos plugins suportados também
são testados, realização de testes de integração reais
15. A evolução do Elastic Stack
E ganhamos novas funcionalidades…
● Pipeline aggregations: Análises de dados avançadas, pós-processamento do resultado das
agregações
● Geo-centroid aggregations: Melhorias visuais no Kibana para visualizar pontos geospaciais
● Query Profiler: Agora é possível saber qual parte da query não esta tendo o desempenho
esperado
● Reindex API, Update by Query, Task manager:
Pipeline Aggs - Visualização de anomalias
Mais facilidade para reindexar dados existentes e
acompanhar ações em background ou com tempo de
execução maiores.
16. A evolução do Elastic Stack
Agenda para novas versões
Versões de correção
● Versão corrente menor
● Ultima versão menor da
última versão maior
● Correções de bugs e
pequenas melhorias
Versões menores
● Frequentes
● Menores
● Sem quebras de
compatibilidade, a não
ser que sejam
necessárias
Versões maiores
● Mais frequentes
● Menores
● Atualize de qualquer
versão maior da versão
maior anterior
19. Atualizando
Rolling Upgrade...
1. Realize backup dos seus dados (snapshot)
2. Desative a alocação de shards
3. Execute um synced flush
4. Pare a atualize um nó
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
POST /_flush/synced
20. Atualizando
...Rolling Upgrade
5. Inicie o nó atualizado
6. Reative a alocação dos shards
7. Espere o nó se recuperar
8. Repita os passos para cada nó no cluster
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
GET _cat/nodes
GET _cat/health
21. Atualizando
Full cluster restart...
1. Realize backup dos seus dados
a. Maior que 1.x
i. Use snapshot
b. .90.x e anteriores
i. Desative o flush dos índices
ii. Desative a realocação
2. Realize o backup dos dados
PUT /_all/_settings
{
"index": {
"translog.disable_flush": "true"
}
}
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
22. Atualizando
...Full cluster restart...
3. Reative a alocação e o flush
PUT /_all/_settings
{
"index": {
"translog.disable_flush": "false"
}
}
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
23. Atualizando
...Full cluster restart...
3. Desative a alocação dos shards
4. Execute um synced flush
5. Desative e atualize todos os nós
6. Inicie o cluster
7. Aguarde o cluster ficar amarelo
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.
disable_allocation": true,
"cluster.routing.allocation.enable": "none"
}
}
1.x
0.90.x
24. Atualizando
...Full cluster restart
8. Reative a alocação dos shards
9. Monitore o progresso da realocação
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.
disable_allocation": false,
"cluster.routing.allocation.enable": "all"
}
}
1.x
0.90.x
GET _cat/health
GET _cat/recovery
25. Breaking Changes
Quebras de compatibilidade existentes na versão 2.3:
● REST API
○ Problemas com o uso cd CORS nas versões 2.3.0 e 2.3.1 resolvido na versão 2.3.2
● Mapping
○ Limite de campos aninhados (nested fields) por padrão passa a ser 50
○ É possivel sua definição através da propriedade index.mapping.nested_fields.limit
● Scripting
○ Atenção as dependências do seu script Groovy
○ Agora para diminuir o volume de dependências para o script o artefato org.codehaus.groovy:
groovy passou a ser utilizado ao inves do org.codehaus.groovy:groovy-all
● Analyze API
○ O parâmetro filters/token_filters/char_filters foi renomeado para
filter/token_filter/char_filter