Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Menu Docs

Orientações para dimensionamento do Atlas

O dimensionamento automático permite que os clusters ajustem automaticamente seu tier, capacidade de armazenamento ou ambos, em resposta ao uso em tempo real. O Atlas usa mecanismos de dimensionamento automático complementares:

  • O auto-scaling reativo analisa a utilização atual da CPU e da memória para trigger eventos de dimensionamento com base no uso sustentado de recursos, alto ou baixo. O dimensionamento automático reativo ocorre após as mudanças na carga de trabalho e lida com o upscaling e o downscaling.

  • O dimensionamento automático preditivo usa o aprendizado de máquina para antecipar futuras necessidades de dimensionamento com base em padrões de uso históricos e em tentativas de dimensionamento antes dos picos de carga de trabalho cíclicos que ele acredita que chegarão. O dimensionamento automático preditivo está disponível para clusters qualificados e oferece suporte apenas ao upscaling. O downscaling permanece reativo.

Consulte Dimensionamento da camada do cluster para saber mais sobre as condições em que o Atlas dimensiona os nós do cluster para cima ou para baixo. Você também pode especificar uma faixa de tamanhos máximos e mínimos de cluster para os quais seu cluster pode dimensionar automaticamente para garantir o desempenho mínimo ou os custos de controle. Em geral, o Atlas não dimensiona um cluster se o dimensionamento resultar em uma camada fora da sua faixa de tamanho especificado, embora a camada do cluster e o armazenamento possam ser dimensionados em paralelo se as necessidades do disco exigirem. O Atlas também não será dimensionado se o uso da memória ou da CPU exceder a capacidade do tier dimensionado.

O dimensionamento automático é mais adequado para cargas de aplicativo em crescimento ou queda constante e padrões de carga de trabalho cíclicos. Para picos de tráfego únicos e inesperados, como lançamentos de produtos ou eventos sem precedentes, faça a pré-dimensionar programaticamente. O dimensionamento automático reativo introduz um atraso limitado para evitar o impacto do aplicativo, e o dimensionamento automático preditivo lida apenas com padrões recorrentes.

Os modelos de implementação do Atlas, conforme referenciados nas Topologias de implementação recomendadas, fornecem opções de dimensionamento horizontal e vertical. Especificamente, a fragmentação distribui dados entre várias máquinas, o que é útil quando nenhum servidor único pode lidar com suas cargas de trabalho. A fragmentação segue uma arquitetura de nada compartilhado, uma arquitetura de computação distribuída em que nenhum dos nós compartilha recursos entre si. Consulte Escolher uma chave de shard para saber mais sobre a escolha ideal de uma chave de shard que permite ao MongoDB distribuir documentos uniformemente em todo o cluster e, ao mesmo tempo, facilitar padrões de query comuns. Além disso, consulte Práticas recomendadas de desempenho: fragmentação para saber mais sobre as principais estratégias de fragmentação, como fragmentação à distância, fragmentação com hash e fragmentação por zonas.

A atualização de um cluster do Atlas para o próximo nível disponível do Atlas pode ser feita pela GUI do plano de controle do Atlas, pela API de administração do Atlas ou através de ferramentas de IaC, como o Atlas Kubernetes Operator, o MongoDB e HashiCorp Terraform ou o Atlas CLI. Consulte Orientações para o provisionamento automatizado de infraestrutura no Atlas se quiser aprender mais. A alteração de um nível de dimensionamento do Atlas, seja para mais ou para menos, é feita sem tempo de inatividade. Os níveis mudam de forma contínua, e essa mudança envolve a escolha de um membro secundário como substituto, a promoção desse membro secundário para o novo primário e a restauração ou substituição do nó com falha para garantir que o cluster retorne à configuração desejada o mais rápido possível. O dimensionamento horizontal ocorre pós-implantação com base na ação do administrador, que pode ser acionada por um script programático. Alguns modelos de cluster exigem clusters fragmentados. A partir da versão 8.0 do MongoDB, você pode utilizar servidores de configuração integrados para reduzir os custos associados aos servidores de configuração de pequenos clusters fragmentados.

A opção de baixa CPU no Atlas auxilia aplicativos que necessitam de mais memória, mas não tanto poder de processamento. Esta opção oferece instâncias com metade das vCPUs em comparação com o nível Geral do mesmo tamanho de cluster, reduzindo os custos para cargas de trabalho que exigem muita memória, mas não dependem da CPU.

A hierarquização de dados e o arquivamento permitem arquivar dados em armazenamento de baixo custo, enquanto ainda possibilitam consultas junto com dados ativos do cluster, o que é particularmente útil para a retenção de registros a longo prazo. Para otimizar esse processo, o MongoDB recomenda automatizar o arquivamento de dados com regras simples e configuráveis. Consulte Arquivar dados para saber mais sobre os critérios que você pode especificar em uma regra de arquivamento. Para cenários em que a retenção de dados não é uma prioridade, o Atlas oferece a opção de excluir automaticamente dados não utilizados com base em critérios de data. Para dados acessados com pouca frequência, os índices TTL são índices especiais de campo único que removem automaticamente documentos de uma coleção após um período especificado ou em um horário determinado. É especialmente útil para dados como logs, informações de sessão ou dados de eventos que só precisam ser mantidos por um tempo limitado. Para criar um índice TTL, é possível definir um índice em um campo que armazena valores de data e especificar uma duração de existência em segundos.

O Atlas também fornece FERRAMENTAS automatizados, como o Performance Advisor, para identificar e otimizar queries ineficientes adicionando ou removendo um índice ou alterando a estrutura de query do seu cliente. Você pode reduzir o tempo de computação desnecessário e o consumo de recursos seguindo as recomendações práticas do Performance Advisor para melhorar o desempenho da query. Além disso, você pode aproveitar as recomendações de índice inteligentes fornecidas pelo Atlas para melhorar ainda mais a eficiência da recuperação de dados e minimizar os recursos necessários para operações de banco de dados .

Recomendações que se aplicam apenas a implantações em uma única região

Para implantações em uma única região, concentre-se em estratégias de dimensionamento vertical que otimizem o desempenho dentro de uma única região de nuvem:

  • Habilite o dimensionamento automático tanto para computação quanto para armazenamento para lidar com aumentos graduais de tráfego sem intervenção manual.

  • Use a fragmentação quando seu conjunto de dados exceder a capacidade de um único servidor, mesmo em uma única região, para distribuir a carga em vários fragmentos.

  • Considere a opção de instância de baixo poder de CPU para cargas com alta intensidade de memória que não exijam alto poder de processamento.

  • Implemente a hierarquização de dados e o arquivamento de dados históricos para reduzir os custos de armazenamento, mantendo as funcionalidades de query.

  • Monitore o desempenho da query com o Performance Advisor e implemente índices recomendados para otimizar a utilização de recursos.

  • Para eventos únicos, como lançamentos de produtos ou picos de tráfego sem precedentes, pré-dimensionar clusters programaticamente antes do evento. O dimensionamento automático depende de cargas de trabalho cíclicas recorrentes ou responde após a ocorrência da alteração da carga de trabalho, ambas as quais podem não funcionar no seu caso.

Recomendações que se aplicam apenas a implantações em várias regiões ou em vários provedores de nuvem.

Para implantações multirregionais e multinuvem, implemente estratégias de dimensionamento que considerem a distribuição geográfica e a complexidade entre nuvens:

  • Configure réplicas de leitura nas regiões mais próximas dos usuários para reduzir a latência e distribuir geograficamente as cargas de trabalho de leitura.

  • Utilize a fragmentação por zona para particionar dados com base em limites geográficos ou lógicos, assegurando a localidade dos dados e o cumprimento dos requisitos de conformidade.

  • Implemente clusters globais com leituras e gravações locais para otimizar o desempenho entre regiões e, ao mesmo tempo, manter a consistência dos dados.

  • Monitore a latência da rede entre regiões e ajuste as prioridades das réplicas para garantir um comportamento de failover ideal.

  • Considere o impacto dos custos de transferência de dados entre regiões ao implementar o dimensionamento automático em várias regiões.

  • Utilize diferentes camadas do cluster em diferentes regiões com base em padrões de uso regionais e estratégias de otimização de custo.

  • Implemente estratégias específicas de backup e arquivamento para cada região a fim de cumprir os requisitos de residência de dados.

As seguintes recomendações se aplicam a todos os paradigmas de implantação.

Para ambientes de desenvolvimento e teste, não habilite a computação de dimensionamento automático nem o armazenamento de dimensionamento automático. Assim você economiza custos em seus ambientes de não produção.

Para ambientes de homologação e produção, recomendamos que você:

  • Habilite o dimensionamento automático para computação e armazenamento. Quando você habilita o dimensionamento automático, o Atlas usa automaticamente o dimensionamento automático reativo e preditivo para escalar seus clusters. Triggers de dimensionamento automático reativos com base no uso atual do recurso. O dimensionamento automático preditivo analisa os padrões de uso históricos e dimensiona proativamente o cluster antes dos picos de demanda cíclica que ele projeta. O downscaling permanece reativo para ambas as abordagens. Para saber mais, consulte Dimensionamento automático preditivo para a camada do cluster.

  • Se você usar ferramentas de IaC, aproveite as configurações para ignorar o desvio de recursos causado pelo dimensionamento automático. Por exemplo, no Terraform, se disk_gb_enabled for verdadeiro, o Atlas dimensionará automaticamente o tamanho do disco para cima e para baixo. Isso fará com que o valor de disk_size_gb retornado seja potencialmente diferente do especificado na configuração do Terraform e, se for aplicado um plano, sem observar isso, o Terraform dimensionará o tamanho do disco do cluster de volta ao valor disk_size_gb original. Para evitar isso, use use_effective_fields = true.

  • Da mesma forma, no Terraform, se compute_enabled for verdadeiro, o Atlas será automaticamente dimensionado até o máximo fornecido e reduzido para o mínimo, se fornecido. Isso fará com que o valor de provider_instance_size_name retornado seja potencialmente diferente do especificado na configuração do Terraform e, se alguém aplicar um plano, sem observar isso, o Terraform dimensionará o cluster de volta ao valor instanceSizeName original. Para evitar isso, use use_effective_fields = true. use_effective_fields = true.

Dica

Para exemplos de Terraform que impõem nossas recomendações em todos os colunas, consulte um dos seguintes exemplos no Github:

Os exemplos a seguir habilitam o dimensionamento automático de computação e de armazenamento usando as ferramentas do Atlas para automação.

Esses exemplos também incluem outras configurações recomendadas, tais como:

  • Camada do cluster configurada para M10 em um ambiente de desenvolvimento/teste. Use o guia de tamanho do cluster para saber qual a camada do cluster recomendada para o tamanho do seu aplicativo.

  • Região única, 3-Conjunto de réplicas de nós/Topologia de implantação de fragmento.

Nossos exemplos usam Amazon Web Services, Azure e Google Cloud Platform de forma intercambiável. Você pode usar qualquer um desses três provedores de nuvem, mas deve alterar o nome da região para corresponder ao provedor de nuvem. Para saber mais sobre os fornecedores de nuvem e suas regiões, consulte Fornecedores de nuvem.

  • Camada do cluster definida como M30 para um aplicativo de porte médio. Use o guia de tamanho do cluster para saber qual a camada do cluster recomendada para o tamanho do seu aplicativo.

  • Região única, 3-Conjunto de réplicas de nós/Topologia de implantação de fragmento.

Nossos exemplos usam Amazon Web Services, Azure e Google Cloud Platform de forma intercambiável. Você pode usar qualquer um desses três provedores de nuvem, mas deve alterar o nome da região para corresponder ao provedor de nuvem. Para saber mais sobre os fornecedores de nuvem e suas regiões, consulte Fornecedores de nuvem.

Observação

Antes de criar recursos com o Atlas CLI, você deve:

Para seus ambientes de desenvolvimento e teste, o dimensionamento automático de computação e de armazenamento está desativado para a economia de gastos.

Para os seus ambientes de preparação e produção, crie o seguinte arquivo cluster.json para cada projeto. Altere os IDs e nomes para usar os seus valores:

{
"clusterType": "REPLICASET",
"links": [],
"name": "CustomerPortalProd",
"mongoDBMajorVersion": "8.0",
"replicationSpecs": [
{
"numShards": 1,
"regionConfigs": [
{
"electableSpecs": {
"instanceSize": "M30",
"nodeCount": 3
},
"priority": 7,
"providerName": "GCP",
"regionName": "EASTERN_US",
"analyticsSpecs": {
"nodeCount": 0,
"instanceSize": "M30"
},
"autoScaling": {
"compute": {
"enabled": true,
"scaleDownEnabled": true
},
"diskGB": {
"enabled": true
}
},
"readOnlySpecs": {
"nodeCount": 0,
"instanceSize": "M30"
}
}
],
"zoneName": "Zone 1"
}
]
}

Após criar o arquivo cluster.json, execute o seguinte comando para cada projeto. O comando utiliza o arquivo cluster.json para criar um cluster.

atlas cluster create --projectId 5e2211c17a3e5a48f5497de3 --file cluster.json

Para mais opções de configuração e informações sobre este exemplo, consulte Criar clusters do Atlas.

Observação

Antes de criar recursos com o Terraform, você deve:

  • Crie sua organização pagadora e uma chave de API para a organização pagadora. Armazene sua chave de API como variáveis de ambiente ao executar o seguinte comando no terminal:

    export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>"
    export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"

Importante

Os exemplos a seguir usam o provedor Terraform do MongoDB Atlas versão 2.x (~> 2.2). Ao migrar para a versão 1.x do provedor, consulte o Guia de Upgrade 2.0.0 para alterações interruptivas e etapas de migração. Os exemplos usam o recurso mongodbatlas_advanced_cluster com sintaxe v2.x.

Para seus ambientes de desenvolvimento e teste, o dimensionamento automático de computação e de armazenamento está desativado para a economia de gastos.

Para seus ambientes de preparação e produção, crie os seguintes arquivos para cada par de aplicativo e ambiente. Coloque os arquivos de cada par de aplicativo e ambiente em seus respectivos diretórios. Altere IDs, nomes e o tamanho do disco para usar seus valores.

# Create a Group to Assign to Project
resource "mongodbatlas_team" "project_group" {
org_id = var.atlas_org_id
name = var.atlas_group_name
usernames = [
"user1@example.com",
"user2@example.com"
]
}
# Create a Project
resource "mongodbatlas_project" "atlas-project" {
org_id = var.atlas_org_id
name = var.atlas_project_name
}
# Assign the team to project with specific roles
resource "mongodbatlas_team_project_assignment" "project_team" {
project_id = mongodbatlas_project.atlas-project.id
team_id = mongodbatlas_team.project_group.team_id
role_names = ["GROUP_READ_ONLY", "GROUP_CLUSTER_MANAGER"]
}
# Create an Atlas Advanced Cluster
resource "mongodbatlas_advanced_cluster" "atlas-cluster" {
project_id = mongodbatlas_project.atlas-project.id
name = "ClusterPortalProd"
cluster_type = "REPLICASET"
mongo_db_major_version = var.mongodb_version
use_effective_fields = true
replication_specs = [
{
region_configs = [
{
electable_specs = {
instance_size = var.cluster_instance_size_name
node_count = 3
disk_size_gb = var.disk_size_gb
}
auto_scaling = {
disk_gb_enabled = var.auto_scaling_disk_gb_enabled
compute_enabled = var.auto_scaling_compute_enabled
compute_max_instance_size = var.compute_max_instance_size
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
]
}
]
tags = {
BU = "ConsumerProducts"
TeamName = "TeamA"
AppName = "ProductManagementApp"
Env = "Production"
Version = "8.0"
Email = "marissa@example.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }

Observação

Para criar um cluster multirregional, especifique cada região em seu próprio objeto region_configs e aninhe-as no objeto replication_specs, como mostrado no exemplo a seguir:

replication_specs = [
{
region_configs = [
{
electable_specs = {
instance_size = "M10"
node_count = 2
}
provider_name = "GCP"
priority = 7
region_name = "NORTH_AMERICA_NORTHEAST_1"
},
{
electable_specs = {
instance_size = "M10"
node_count = 3
}
provider_name = "GCP"
priority = 6
region_name = "WESTERN_US"
}
]
}
]
# Atlas Organization ID
variable "atlas_org_id" {
type = string
description = "Atlas Organization ID"
}
# Atlas Project Name
variable "atlas_project_name" {
type = string
description = "Atlas Project Name"
}
# Atlas Group Name
variable "atlas_group_name" {
type = string
description = "Atlas Group Name"
}
# Atlas Project Environment
variable "environment" {
type = string
description = "The environment to be built"
}
# Cluster Instance Size Name
variable "cluster_instance_size_name" {
type = string
description = "Cluster instance size name"
}
# Cloud Provider to Host Atlas Cluster
variable "cloud_provider" {
type = string
description = "AWS or GCP or Azure"
}
# Atlas Region
variable "atlas_region" {
type = string
description = "Atlas region where resources will be created"
}
# MongoDB Version
variable "mongodb_version" {
type = string
description = "MongoDB Version"
}
# Storage Auto-scaling Enablement Flag
variable "auto_scaling_disk_gb_enabled" {
type = bool
description = "Flag that specifies whether disk auto-scaling is enabled"
}
# Compute Auto-scaling Enablement Flag
variable "auto_scaling_compute_enabled" {
type = bool
description = "Flag that specifies whether cluster tier auto-scaling is enabled"
}
# Disk Size in GB
variable "disk_size_gb" {
type = int
description = "Disk Size in GB"
}
atlas_org_id = "32b6e34b3d91647abb20e7b8"
atlas_project_name = "Customer Portal - Prod"
atlas_group_name = "Atlas Group"
environment = "prod"
cluster_instance_size_name = "M30"
cloud_provider = "AWS"
atlas_region = "US_WEST_2"
mongodb_version = "8.0"
auto_scaling_disk_gb_enabled = true
auto_scaling_compute_enabled = true
disk_size_gb = 40000
# Define the MongoDB Atlas Provider
terraform {
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
version = "~> 2.2"
}
}
required_version = ">= 1.0"
}
# Configure the MongoDB Atlas Provider
provider "mongodbatlas" {
# Legacy API key authentication (backward compatibility)
public_key = var.mongodbatlas_public_key
private_key = var.mongodbatlas_private_key
# Recommended: Service account authentication
# Uncomment and configure the following for service account auth:
# service_account_id = var.mongodb_service_account_id
# private_key_file = var.mongodb_service_account_key_file
}

Após criar os arquivos, acesse o diretório correspondente a cada par de aplicativo e ambiente e execute o seguinte comando para inicializar o Terraform:

terraform init

Execute o seguinte comando para visualizar o Terraform plan:

terraform plan

Após adicionar o bloco lifecycle para alterar explicitamente disk_size_gb e instant_size, faça um comentário no bloco lifecycle e execute terraform apply. Certifique-se de retirar o comentário do bloco lifecycle assim que terminar para evitar alterações acidentais.

Execute o seguinte comando para criar um projeto e uma implantação para o par de aplicativo e ambiente. O comando utiliza os arquivos e o MongoDB & HashiCorp Terraform para criar os projetos e clusters:

terraform apply

Quando solicitado, digite yes e pressione Enter para aplicar a configuração.

Para mais opções de configuração e informações sobre este exemplo, consulte MongoDB & HashiCorp Terraform.