Como melhorar a performance de indexação em meu cluster do Amazon OpenSearch Service?

Data da última atualização: 30/07/2021

Quero otimizar as operações de indexação no Amazon OpenSearch Service para obter a máxima taxa de transferência de ingestão. Como fazer isso?

Resolução

Certifique-se de que os fragmentos sejam distribuídos uniformemente pelos nós de dados para o índice que você está ingerindo

Use a seguinte fórmula para confirmar se os fragmentos estão distribuídos uniformemente:

Number of shards for index = k * (number of data nodes), where k is the number of shards per node

Por exemplo, se houver 24 fragmentos no índice e oito nós de dados, o OpenSearch Service atribuirá três fragmentos a cada nó. Para obter mais informações, consulte Conceitos básicos do Amazon OpenSearch Service: de quantos fragmentos eu preciso?

Aumente o refresh_interval para 60 segundos ou mais

Atualize o índice do OpenSearch Service para que seus documentos fiquem disponíveis para pesquisa. Observe que a atualização do índice requer os mesmos recursos usados pelos threads de indexação.

O intervalo de atualização padrão é de um segundo. Quando você aumenta o intervalo de atualização, o nó de dados faz menos chamadas de API. O intervalo de atualização pode ser mais curto ou mais rápido, conforme a duração do intervalo de atualização. Para evitar erros 429 , é uma prática recomendada aumentar o intervalo de atualização.

Observação: o intervalo de atualização padrão é de um segundo para índices que recebem uma ou mais solicitações de pesquisa nos últimos 30 segundos. Para obter mais informações sobre o intervalo padrão atualizado, consulte API _refresh versão 7.x no site do Elasticsearch.

Altere a contagem de réplicas para zero

Caso preveja uma indexação pesada, você pode definir o valor de index.number_of_replicas como “0”. Cada réplica duplica o processo de indexação. Como resultado, desabilitar as réplicas melhora a performance do cluster. Depois que a indexação pesada estiver concluída, reative os índices replicados.

Importante: se um nó falhar enquanto as réplicas estiverem desabilitadas, você poderá perder dados. Desabilite as réplicas somente se você puder tolerar a perda de dados por um curto período.

Experimente para encontrar o tamanho ideal da solicitação em massa

Comece com o tamanho da solicitação em massa de 5 a 15 MiB. Em seguida, aumente lentamente o tamanho da solicitação até que a performance da indexação pare de melhorar. Para obter mais informações, consulte Usar e dimensionar solicitações em massa no site do Elasticsearch.

Observação: alguns tipos de instância limitam as solicitações em massa a 10 MiB. Para obter mais informações, consulte Limites de rede.

Use um tipo de instância que tenha volumes de armazenamento de instâncias SSD (como I3)

As instâncias I3 fornecem armazenamento rápido e local memory express (NVMe). As instâncias I3 oferecem melhor performance de ingestão do que as instâncias que usam volumes de SSD de uso geral (gp2) do Amazon Elastic Block Store (Amazon EBS). Para obter mais informações, consulteEscala de petabytes para o Amazon OpenSearch Service.

Reduzir o tempo de resposta

Para reduzir o tamanho da resposta do OpenSearch Service, use o parâmetro filter_path para excluir campos desnecessários. Certifique-se de não filtrar os campos necessários para identificar ou fazer novas tentativas de solicitações com falha. Esses campos poderão variar de acordo com o cliente.

No exemplo a seguir, os campos index-name, type-name e took são excluídos da resposta:

curl -X POST "es-endpoint/index-name/type-name/_bulk?pretty&filter_path=-took,-items.index._index,-items.index._type" -H 'Content-Type: application/json' -d'
{ "index" : { "_index" : "test2", "_id" : "1" } }
{ "user" : "testuser" }
{ "update" : {"_id" : "1", "_index" : "test2"} }
{ "doc" : {"user" : "example"} }

Para obter mais informações, consulte Reduzir o tamanho da resposta.

Aumente o valor de index.translog.flush_threshold_size

Por padrão, index.translog.flush_threshold_size é definido como 512 MB. Isso significa que translog é liberado quando atinge 512 MB. O peso da carga de indexação determina a frequência do translog. Quando você aumenta index.translog.flush_threshold_size, o nó executa a operação de translog com menos frequência. Como as liberações do OpenSearch Service são operações que consomem muitos recursos, a redução da frequência de translogs melhora a performance da indexação. Ao aumentar o tamanho do limite de descarga, o cluster do OpenSearch Service também cria menos segmentos grandes (em vez de vários segmentos pequenos). Segmentos grandes se fundem com menos frequência, e utilizam-se mais threads para indexar em vez de mesclar.

Observação: um aumento no index.translog.flush_threshold_size também pode aumentar o tempo de conclusão de um translog. Se um fragmento falhar, a recuperação levará mais tempo porque o translog é maior.

Antes de aumentar index.translog.flush_threshold_size, chame a seguinte operação de API para obter as estatísticas atuais da operação de descarga:

$ curl 'os-endpoint/index-name/_stats/flush?pretty'

Substitua os-endpoint e index-name pelas respectivas variáveis.

Na saída, observe o número de descargas e o tempo total. O exemplo de saída a seguir mostra que há 124 descargas, que levaram 17.690 milissegundos:

"flush" { "total" : 124, "total_time_in_millis" : 17690 }

Para aumentar o tamanho do limite de liberação, chame a seguinte operação de API:

$ curl -XPUT 'os-endpoint/index-name/_settings?pretty' -d '{"index":{"translog.flush_threshold_size" : "1024MB"}}'

Neste exemplo, o tamanho do limite de liberação é definido como 1024 MB, o que é ideal para instâncias com mais de 32 GB de memória.

Observação: escolha o tamanho de limite apropriado para o domínio do OpenSearch Service.

Execute a operação da API _stats novamente para ver se a atividade de descarga mudou:

$ curl 'os-endpoint/index-name/_stats/flush?pretty'

Observação: é uma prática recomendada aumentar o index.translog.flush_threshold_size somente para o índice atual. Depois de confirmar o resultado, aplique as alterações ao modelo de índice.

O Amazon OpenSearch Service é o sucessor do Amazon Elasticsearch Service.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?