Esta página descreve como dimensionar os pods mongot que servem o MongoDB Search e a pesquisa vetorial em seu cluster Kubernetes. Use-o para escolher os valores iniciais para spec.clusters[].resourceRequirements, spec.clusters[].jvmFlags e spec.clusters[].persistence no recurso MongoDBSearch e para planejar a capacidade de volume persistente para o crescimento do índice.
Antes de dimensionar o mongot, revise o modelo de implantação e a topologia que você planeja executar:
Para o modelo de implantação do MongoDB Search, consulte Arquitetura do MongoDB Search.
Para o modelo de implantação de pesquisa vetorial, consulte Arquitetura de pesquisa vetorial do MongoDB.
Para o esquema completo de cada configuração referenciada nesta página, consulte Configurações de pesquisa do MongoDB e pesquisa vetorial.
Dimensionamento de recursos
Escolha uma classe de carga de trabalho
A proporção de CPU para memória que você aloca depende do seu perfil de carga de trabalho de pesquisa.
Classe de carga de trabalho | Proporção de RAM para CPU | Use quando |
|---|---|---|
CPU alta | 2:1 | Você executa uma pesquisa de texto completo de uso geral em que o desempenho da query exige muito da CPU. |
CPU baixa | 8:1 | Você executa cargas de trabalho de pesquisa vetorial em volumes de dados mais baixos, onde a memória é mais importante do que a CPU bruta. |
Para a maioria dos casos de uso gerais, uma configuração de CPU alta pequena ou média é um ponto de partida equilibrado.
Escolha um tamanho inicial
Dimensionar seus pods mongot por volume de dados vetoriais esperado (CPU baixa) ou por queries por segundo (CPU alta).
Tamanho | Baixa CPU (pesquisa vetorial) | Alto CPU (texto completo) |
|---|---|---|
Pequena | Até 10 GB de vetores | 20 a 40 QPS, indexação leve |
Médio | 10 GB a 50 GB de vetores | 80 para 160 QPS |
grande | 50 GB de vetores ou mais | 320 a 480 QPS, indexação pesada |
Por exemplo, se você espera lidar com 100 query por segundo para um aplicativo de pesquisa de texto completo, comece com uma configuração de CPU média-alta.
Configurar CPU e memória
Defina a CPU e a memória para pods mongot em spec.clusters[].resourceRequirements. O campo requests reserva capacidade no nó; o campo limits limita o quanto o pod pode consumir.
spec: clusters: - resourceRequirements: requests: cpu: "2" memory: 4Gi limits: cpu: "3" memory: 5Gi
Se você omitir spec.clusters[].resourceRequirements, o Kubernetes Operator usará os seguintes padrões:
requests.cpu:2requests.memory:4GiNão
limits— o pod pode consumir todos os recursos disponíveis do nó.
Defina limits para corresponder à sua carga de trabalho. Um pod sem limites pode saturar o nó e afetar outras cargas de trabalho.
Configure o heap da JVM
Quando você não especifica -Xms ou -Xmx em spec.clusters[].jvmFlags, o operador Kubernetes calcula automaticamente o heap da JVM definindo ambos os sinalizadores para metade de spec.clusters[].resourceRequirements.requests.memory.
Para substituir o heap explicitamente, defina -Xms e -Xmx em spec.clusters[].jvmFlags. O operador Kubernetes não modifica nenhum sinalizador fornecido e os anexa após os sinalizadores computados pelo operador.
spec: clusters: - jvmFlags: - -Xms2g - -Xmx2g
Dimensionamento de volume persistente
Cada pod mongot tem seu próprio volume persistente que contém os índices de pesquisa e vetor. Planeje o volume para conter o índice mais o espaço para reconstruções.
Estime o tamanho do índice
O tamanho de uma coleção e o tamanho do índice de pesquisa resultante nem sempre são correlacionados. O tamanho do índice depende dos campos que você mapeia e dos recursos (como preenchimento automático) que você habilita no índice. Para estimar o tamanho do índice para sua carga de trabalho:
Insira uma amostra representativa.
Insira 1 a 2 GB de dados ou crie uma pequena coleção com $out.
Observe a proporção resultante.
Compare o tamanho do índice com o tamanho da coleção. Extrapole a partir dessa proporção para estimar o tamanho do índice em escala de produção. Por exemplo, uma coleção de 1 GB que produz um índice de 250 MB (uma proporção de 0.25:1) implica que uma coleção de 12 GB produz aproximadamente um índice de 3 GB.
Dimensionar o volume persistente a ser implantado
Aloque double o espaço em disco que seu índice exige. O espaço adicionais permite que mongot reconstrua índice quando necessário. mongot se torna somente leitura quando o uso do disco atinge 90%.
Defina o tamanho do volume em spec.clusters[].persistence.single.storage usando sufixos de quantidade binária:
spec: clusters: - persistence: single: storage: 60Gi storageClass: local-nvme
Se você omitir spec.clusters[].persistence, o operador Kubernetes provisionará um volume padrão de 16 GB. Para um índice de 30 GB, defina spec.clusters[].persistence.single.storage como 60Gi para deixar espaço para reconstruções de índice.
Escolha uma classe de armazenamento
Referencie o StorageClass para o volume em spec.clusters[].persistence.single.storageClass. Escolha uma classe que atenda à seguinte orientação:
Tipo de disco: use armazenamento com suporte a SSD de uso geral. Tanto o IOPS de leitura quanto o de gravação são importantes para o desempenho do
mongot. A replicação envolve gravações em disco para novos segmentos de índice e leituras em disco quandomongotmescla segmentos antigos em segmentos maiores.Limite somente leitura: quando um volume atinge 90% de uso,
mongotentra no modo somente leitura e interrompe as operações de gravação. Para retomar as gravações, exclua os dados do índice para reduzir o uso para menos de 85%.
Monitorar o uso de recursos
Após a implantação, monitore os seguintes limites para confirmar se seu dimensionamento inicial é adequado e para saber quando dimensionar.
Resource | limite | em ação |
|---|---|---|
CPU | Uso sustentado acima de 80% | Aumente a CPU em |
Memória |
| Aumente a memória em |
Disk | Uso acima de 90% | Reduza o tamanho do índice para que o uso fique abaixo do limite. |