Escala para desempenho no Azure Pesquisa CognitivaScale for performance on Azure Cognitive Search

Este artigo descreve as práticas recomendadas para cenários avançados com requisitos sofisticados de escalabilidade e disponibilidade.This article describes best practices for advanced scenarios with sophisticated requirements for scalability and availability.

Iniciar com números de linha de baseStart with baseline numbers

Antes de realizar um esforço de implantação maior, certifique-se de que você sabe o que é uma carga de consulta típica.Before undertaking a larger deployment effort, make sure you know what a typical query load looks like. As diretrizes a seguir podem ajudá-lo a chegar em números de consulta de linha de base.The following guidelines can help you arrive at baseline query numbers.

  1. Escolher uma latência de destino (ou a quantidade máxima de tempo) que uma solicitação de pesquisa normal deve demorar para ser concluída.Pick a target latency (or maximum amount of time) that a typical search request should take to complete.

  2. Crie e teste uma carga de trabalho real em relação ao serviço de pesquisa com um conjunto de dados realista para medir essas taxas de latência.Create and test a real workload against your search service with a realistic data set to measure these latency rates.

  3. Comece com um número baixo de consultas por segundo (QPS) e, em seguida, Aumente gradualmente o número executado no teste até que a latência da consulta fique abaixo do destino predefinido.Start with a low number of queries per second (QPS) and then gradually increase the number executed in the test until the query latency drops below the predefined target. Este é um parâmetro de comparação importante para ajudar você a planejar a escala à medida que o uso de seu aplicativo cresce.This is an important benchmark to help you plan for scale as your application grows in usage.

  4. Sempre que possível, reutilize as conexões HTTP.Wherever possible, reuse HTTP connections. Se você estiver usando o SDK do .NET Pesquisa Cognitiva do Azure, isso significa que você deve reutilizar uma instância do ou SearchClient e, se estiver usando a API REST, deverá reutilizar um único HttpClient.If you are using the Azure Cognitive Search .NET SDK, this means you should reuse an instance or SearchClient instance, and if you are using the REST API, you should reuse a single HttpClient.

  5. Varie a substância de solicitações de consulta para que a pesquisa ocorra em diferentes partes do índice.Vary the substance of query requests so that search occurs over different parts of your index. A variação é importante porque, se você executar continuamente as mesmas solicitações de pesquisa, o cache de dados começará a fazer com que o desempenho seja melhor do que pode com um conjunto de consultas mais distintas.Variation is important because if you continually execute the same search requests, caching of data will start to make performance look better than it might with a more disparate query set.

  6. Varie a estrutura das solicitações de consulta para que você obtenha diferentes tipos de consultas.Vary the structure of query requests so that you get different types of queries. Nem todas as consultas de pesquisa são executadas no mesmo nível.Not every search query performs at the same level. Por exemplo, uma pesquisa de documento ou sugestão de pesquisa é normalmente mais rápida do que uma consulta com um número significativo de facetas e filtros.For example, a document lookup or search suggestion is typically faster than a query with a significant number of facets and filters. A composição de teste deve incluir várias consultas, em aproximadamente as mesmas proporções que você esperaria na produção.Test composition should include various queries, in roughly the same ratios as you would expect in production.

Ao criar essas cargas de trabalho de teste, há algumas características do Azure Pesquisa Cognitiva para ter em mente:While creating these test workloads, there are some characteristics of Azure Cognitive Search to keep in mind:

  • É possível sobrecarregar seu serviço enviando por push muitas consultas de pesquisa de uma só vez.It is possible overload your service by pushing too many search queries at one time. Quando isso acontecer, você verá códigos de resposta HTTP 503.When this happens, you will see HTTP 503 response codes. Para evitar um 503 durante o teste, comece com vários intervalos de solicitações de pesquisa para ver as diferenças nas taxas de latência à medida que você adiciona mais solicitações de pesquisa.To avoid a 503 during testing, start with various ranges of search requests to see the differences in latency rates as you add more search requests.

  • O Azure Pesquisa Cognitiva não executa tarefas de indexação em segundo plano.Azure Cognitive Search does not run indexing tasks in the background. Se o seu serviço tratar as cargas de trabalho de consulta e indexação simultaneamente, leve isso em conta introduzindo trabalhos de indexação em seus testes de consulta ou explorando as opções para executar trabalhos de indexação fora do horário de pico.If your service handles query and indexing workloads concurrently, take this into account by either introducing indexing jobs into your query tests, or by exploring options for running indexing jobs during off peak hours.

Dica

Você pode simular uma carga de consulta realista usando ferramentas de teste de carga.You can simulate a realistic query load using load testing tools. Experimente o teste de carga com o Azure DevOps ou use uma dessas alternativas.Try load testing with Azure DevOps or use one of these alternatives.

Escala para alto volume de consultaScale for high query volume

Um serviço é sobrecarregado quando as consultas levam muito tempo ou quando o serviço inicia a remoção de solicitações.A service is overburdened when queries take too long or when the service starts dropping requests. Se isso acontecer, você poderá resolver o problema de uma das duas maneiras:If this happens, you can address the problem in one of two ways:

  • Adicionar réplicasAdd replicas

    Cada réplica é uma cópia dos seus dados, permitindo que o serviço carregue solicitações de balanceamento em relação a várias cópias.Each replica is a copy of your data, allowing the service to load balance requests against multiple copies. Todo o balanceamento de carga e a replicação de dados são gerenciados pelo Azure Pesquisa Cognitiva e você pode alterar o número de réplicas alocadas para o serviço a qualquer momento.All load balancing and replication of data is managed by Azure Cognitive Search and you can alter the number of replicas allocated for your service at any time. É possível alocar até 12 réplicas em um serviço de pesquisa Standard e três réplicas em um serviço de pesquisa Básico.You can allocate up to 12 replicas in a Standard search service and 3 replicas in a Basic search service. As réplicas podem ser ajustadas no Portal do Azure ou PowerShell.Replicas can be adjusted either from the Azure portal or PowerShell.

  • Criar um novo serviço em uma camada superiorCreate a new service at a higher tier

    O Pesquisa Cognitiva do Azure vem em várias camadas e cada uma delas oferece níveis diferentes de desempenho.Azure Cognitive Search comes in a number of tiers and each one offers different levels of performance. Em alguns casos, você pode ter tantas consultas que a camada em que você está em não pode fornecer um retorno suficiente, mesmo quando as réplicas são maximizadas. Nesse caso, considere mudar para uma camada de desempenho superior, como a camada Standard S3, projetada para cenários com grandes quantidades de documentos e cargas de trabalho de consulta extremamente altas.In some cases, you may have so many queries that the tier you are on cannot provide sufficient turnaround, even when replicas are maxed out. In this case, consider moving to a higher performing tier, such as the Standard S3 tier, designed for scenarios having large numbers of documents and extremely high query workloads.

Dimensionar para consultas individuais lentasScale for slow individual queries

Outro motivo para taxas de alta latência é uma única consulta demorando muito para ser concluída.Another reason for high latency rates is a single query taking too long to complete. Nesse caso, a adição de réplicas não ajudará.In this case, adding replicas will not help. Duas opções possíveis que podem ajudar incluem o seguinte:Two possible options that might help include the following:

  • Aumentar partiçõesIncrease Partitions

    Uma partição divide os dados em recursos de computação extras.A partition splits data across extra computing resources. Duas partições dividem os dados na metade, uma terceira partição divide-os em terços e assim por diante.Two partitions split data in half, a third partition splits it into thirds, and so forth. Um efeito colateral positivo é que as consultas mais lentas às vezes são executadas mais rapidamente devido à computação paralela.One positive side-effect is that slower queries sometimes perform faster due to parallel computing. Observamos a paralelização em consultas de baixa seletividade, como consultas que correspondem a muitos documentos ou facetas que fornecem contagens em um grande número de documentos.We have noted parallelization on low selectivity queries, such as queries that match many documents, or facets providing counts over a large number of documents. Como uma computação significativa é necessária para pontuar a relevância dos documentos ou para contar os números de documentos, adicionar partições extras ajuda as consultas a serem concluídas com mais rapidez.Since significant computation is required to score the relevancy of the documents, or to count the numbers of documents, adding extra partitions helps queries complete faster.

    Pode haver no máximo 12 partições no serviço de pesquisa padrão e uma partição no serviço de pesquisa básico.There can be a maximum of 12 partitions in Standard search service and 1 partition in the Basic search service. As partições podem ser ajustadas no Portal do Azure ou PowerShell.Partitions can be adjusted either from the Azure portal or PowerShell.

  • Limitar campos de cardinalidade altaLimit High Cardinality Fields

    Um campo de alta cardinalidade consiste em um campo de facetable ou filtrável que tem um número significativo de valores exclusivos e, como resultado, consome recursos significativos ao calcular os resultados.A high cardinality field consists of a facetable or filterable field that has a significant number of unique values, and as a result, consumes significant resources when computing results. Por exemplo, definir uma ID do produto ou um campo de descrição como facetable/filtrável conta como alta cardinalidade porque a maioria dos valores de documento para documento são exclusivos.For example, setting a Product ID or Description field as facetable/filterable would count as high cardinality because most of the values from document to document are unique. Sempre que for possível, limite o número de campos de alta cardinalidade.Wherever possible, limit the number of high cardinality fields.

  • Aumentar a camada de pesquisaIncrease Search Tier

    Mover para uma camada mais alta de Pesquisa Cognitiva do Azure pode ser outra maneira de melhorar o desempenho de consultas lentas.Moving up to a higher Azure Cognitive Search tier can be another way to improve performance of slow queries. Cada camada mais alta fornece CPUs mais rápidas e mais memória, as quais têm um impacto positivo no desempenho da consulta.Each higher tier provides faster CPUs and more memory, both of which have a positive impact on query performance.

Escala para disponibilidadeScale for availability

As réplicas não apenas ajudam a reduzir a latência de consulta, mas também podem permitir alta disponibilidade.Replicas not only help reduce query latency, but can also allow for high availability. Com uma única réplica, você deve esperar um tempo de inatividade periódico devido à reinicialização do servidor após atualizações de software ou a outros eventos de manutenção.With a single replica, you should expect periodic downtime due to server reboots after software updates or for other maintenance events that will occur. Como resultado, é importante considerar se seu aplicativo exige alta disponibilidade de pesquisas (consultas), bem como gravações (eventos de indexação).As a result, it is important to consider if your application requires high availability of searches (queries) as well as writes (indexing events). O Azure Pesquisa Cognitiva oferece opções de SLA em todas as ofertas de pesquisa pagas com os seguintes atributos:Azure Cognitive Search offers SLA options on all the paid search offerings with the following attributes:

  • Duas réplicas para alta disponibilidade de cargas de trabalho somente leitura (consultas)Two replicas for high availability of read-only workloads (queries)

  • Três ou mais réplicas para alta disponibilidade de cargas de trabalho de leitura/gravação (consultas e indexação)Three or more replicas for high availability of read-write workloads (queries and indexing)

Para obter mais detalhes sobre isso, visite o contrato de nível de serviço de pesquisa cognitiva do Azure.For more details on this, please visit the Azure Cognitive Search Service Level Agreement.

Como as réplicas são cópias de seus dados, ter várias réplicas permite que o Azure Pesquisa Cognitiva faça reinicializações e manutenção do computador em uma réplica, enquanto a execução da consulta continua em outras réplicas.Since replicas are copies of your data, having multiple replicas allows Azure Cognitive Search to do machine reboots and maintenance against one replica, while query execution continues on other replicas. Por outro lado, se você tirar as réplicas de longe, incorrerá em degradação do desempenho da consulta, supondo que essas réplicas fossem um recurso subutilizado.Conversely, if you take replicas away, you'll incur query performance degradation, assuming those replicas were an under-utilized resource.

Dimensionar para cargas de trabalho distribuídas geograficamente e redundância geográficaScale for geo-distributed workloads and geo-redundancy

Para cargas de trabalho distribuídas geograficamente, os usuários que estão localizados longe da data center do host terão taxas de latência mais altas.For geo-distributed workloads, users who are located far from the host data center will have higher latency rates. Uma mitigação é provisionar vários serviços de pesquisa em regiões com mais proximidade com esses usuários.One mitigation is to provision multiple search services in regions with closer proximity to these users.

Atualmente, o Azure Pesquisa Cognitiva não fornece um método automatizado de replicação geográfica de índices de Pesquisa Cognitiva do Azure entre regiões, mas há algumas técnicas que podem ser usadas para tornar esse processo simples de implementar e gerenciar.Azure Cognitive Search does not currently provide an automated method of geo-replicating Azure Cognitive Search indexes across regions, but there are some techniques that can be used that can make this process simple to implement and manage. Elas serão descritas nas próximas seções.These are outlined in the next few sections.

O objetivo de um conjunto de serviços de pesquisa distribuído geograficamente é ter dois ou mais índices disponíveis em duas ou mais regiões, em que um usuário é encaminhado para o serviço de Pesquisa Cognitiva do Azure que fornece a menor latência, como visto neste exemplo:The goal of a geo-distributed set of search services is to have two or more indexes available in two or more regions, where a user is routed to the Azure Cognitive Search service that provides the lowest latency as seen in this example:

Tabela de referência cruzada de serviços por região

Manter os dados sincronizados em vários serviçosKeep data synchronized across multiple services

Há duas opções para manter os serviços de pesquisa distribuída sincronizados, que consistem em usar o indexador pesquisa cognitiva do Azure ou a API de envio por push (também conhecida como API REST do Azure pesquisa cognitiva).There are two options for keeping your distributed search services in sync, which consist of either using the Azure Cognitive Search Indexer or the Push API (also referred to as the Azure Cognitive Search REST API).

Usar indexadores para atualizar o conteúdo em vários serviçosUse indexers for updating content on multiple services

Se você já estiver usando o indexador em um serviço, poderá configurar um segundo indexador em um segundo serviço para usar o mesmo objeto de fonte de dados, obtendo dados do mesmo local.If you are already using indexer on one service, you can configure a second indexer on a second service to use the same data source object, pulling data from the same location. Cada serviço em cada região tem seu próprio indexador e um índice de destino (o índice de pesquisa não é compartilhado, o que significa que os dados estão duplicados), mas cada indexador faz referência à mesma fonte de dados.Each service in each region has its own indexer and a target index (your search index is not shared, which means data is duplicated), but each indexer references the same data source.

Aqui está um Visual de alto nível da aparência dessa arquitetura.Here is a high-level visual of what that architecture would look like.

Única fonte de dados com o indexador distribuído e combinações de serviço

Usar APIs REST para enviar atualizações de conteúdo por push em vários serviçosUse REST APIs for pushing content updates on multiple services

Se você estiver usando a API REST do Azure Pesquisa Cognitiva para enviar conteúdo por push em seu índice de pesquisa cognitiva do Azure, você poderá manter seus vários serviços de pesquisa sincronizados enviando alterações a todos os serviços de pesquisa sempre que uma atualização for necessária.If you are using the Azure Cognitive Search REST API to push content in your Azure Cognitive Search index, you can keep your various search services in sync by pushing changes to all search services whenever an update is required. Em seu código, certifique-se de lidar com casos em que uma atualização para um serviço de pesquisa falha, mas é bem-sucedida para outros serviços de pesquisa.In your code, make sure to handle cases where an update to one search service fails but succeeds for other search services.

Aproveite o Gerenciador de tráfego do AzureLeverage Azure Traffic Manager

O Gerenciador de tráfego do Azure permite que você encaminhe solicitações para vários sites geograficamente localizados que são então apoiados por vários serviços de pesquisa.Azure Traffic Manager allows you to route requests to multiple geo-located websites that are then backed by multiple search services. Uma vantagem do Gerenciador de tráfego é que ele pode investigar o Pesquisa Cognitiva do Azure para garantir que ele esteja disponível e rotear os usuários para serviços de pesquisa alternativos em caso de tempo de inatividade.One advantage of the Traffic Manager is that it can probe Azure Cognitive Search to ensure that it is available and route users to alternate search services in the event of downtime. Além disso, se você estiver roteando solicitações de pesquisa por meio de sites do Azure, o Gerenciador de tráfego do Azure permite balancear a carga de casos em que o site está ativo, mas não o Azure Pesquisa Cognitiva.In addition, if you are routing search requests through Azure Web Sites, Azure Traffic Manager allows you to load balance cases where the Website is up but not Azure Cognitive Search. Veja um exemplo de uma arquitetura que aproveita o Gerenciador de Tráfego.Here is an example of what the architecture that leverages Traffic Manager.

Tabela de referência cruzada de serviços por região, com o Gerenciador de tráfego central

Próximas etapasNext steps

Para saber mais sobre os tipos de preço e limites de serviços para cada um, confira limites de serviço.To learn more about the pricing tiers and services limits for each one, see Service limits. Consulte planejar a capacidade para saber mais sobre combinações de partição e réplica.See Plan for capacity to learn more about partition and replica combinations.

Para obter uma discussão sobre o desempenho e as demonstrações das técnicas discutidas neste artigo, Assista ao vídeo a seguir:For a discussion about performance and demonstrations of the techniques discussed in this article, watch the following video: