Menu Docs
Página inicial do Docs
/ /
Centro de Arquitetura Atlas
/

Orientações para dimensionamento do Atlas

O dimensionamento automático permite que os clusters ajustem automaticamente o nível e/ou a capacidade de armazenamento deles, em resposta ao uso em tempo real. O Atlas analisa o uso da CPU e da memória para determinar quando e se deve dimensionar a camada do cluster para cima e para baixo. Consulte Dimensionamento da camada do cluster para aprender mais sobre as condições em que o Atlas aumenta ou diminui o dimensionamento dos nós do cluster. Você também pode especificar um intervalo de tamanhos máximo e mínimo de dimensionamento automático do cluster a fim de garantir o desempenho mínimo ou controlar os custos. O Atlas não aumentará o tamanho de um cluster se o novo nível estiver fora da faixa de tamanho especificada ou se o uso de memória exceder a capacidade do novo nível. O dimensionamento automático da camada do cluster é liberado com um atraso, para que a alteração não cause impacto no aplicativo. Portanto, é mais adequado para uma carga de aplicativos em constante crescimento ou declínio, não para picos repentinos em que o banco de dados fica sobrecarregado pelo uso. Se sua carga de trabalho apresentar picos frequentes ou se você estiver esperando um grande aumento no tráfego devido a um evento ou lançamento, o MongoDB recomenda que você faça o pré-dimensionamento de forma programática.

Os modelos de implantação do Atlas, conforme referenciado em Topologias de implantação recomendadas, oferecem opções de dimensionamento horizontal e vertical. Especificamente, a fragmentação distribui dados entre várias máquinas, o que é útil quando nenhum servidor isoladamente pode lidar com suas cargas de trabalho. A fragmentação segue uma arquitetura sem compartilhamento (shared-nothing), uma arquitetura de computação distribuída em que nenhum dos nós compartilha recursos entre si. Consulte Escolher uma chave de fragmento para saber mais sobre a escolha ideal de chave de fragmento que permite que o MongoDB distribua documentos uniformemente em todo o seu cluster, ao mesmo tempo em que facilita padrões de query comuns. Além disso, consulte Melhores práticas de desempenho: Fragmentação para aprender sobre as principais estratégias de fragmentação, como fragmentação por alcance, fragmentação com hash e fragmentação por zonas.

A atualização de um Atlas cluster para a próxima camada Atlas disponível está disponível por meio da GUI do plano de controle do Atlas, da API de administração do Atlas ou por meio de ferramentas de IaC, como o Atlas Kubernetes Operator, o MongoDB & HashiCorp Terraform ou a Atlas CLI. Consulte Orientação para o provisionamento automatizado de infraestrutura do Atlas para saber mais. Alterar uma camada do Atlas, seja para upscaling ou downscaling, permite zero tempo de inatividade. O nível muda de forma contínua, o que envolve a eleição de um membro secundário como substituto, a promoção desse membro secundário a se tornar o novo primário e, em seguida, a restauração ou a substituição do membro com falha para garantir que o cluster retorne à configuração de destino o mais rápido possível. O dimensionamento horizontal ocorre após a implantação com base na ação do administrador, que pode ser acionada a partir de um script programático. Alguns modelos de cluster exigem clusters fragmentados. Começando com o MongoDB versão 8.0, você pode fazer uso de servidores de configuração incorporados para reduzir os custos associados aos servidores de configuração em 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 que você arquive dados em armazenamento de baixo custo, enquanto ainda possibilita 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 que você automatize 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 oferece ferramentas automatizadas, como o Performance Advisor, para identificar e otimizar consultas ineficientes, adicionando ou removendo um índice ou alterando a estrutura da consulta do cliente. Você pode reduzir o tempo de computação desnecessário e o consumo de recursos seguindo as recomendações práticas para melhorar o desempenho da sua consulta. Além disso, pode utilizar as recomendações inteligentes de índices fornecidas pelo Atlas para aumentar a eficiência da recuperação de dados e reduzir os recursos necessários para operações de banco de dados.

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 em instâncias onde seu aplicativo cresce organicamente de pequeno para médio porte.

    Se você usar ferramentas de IaC, utilize 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 ajustará automaticamente o tamanho do disco para cima e para baixo. Isso fará com que o valor de disk_size_gb retornado possa ser diferente do especificado na configuração do Terraform e, se alguém aplicar um plano sem perceber isso, o Terraform redimensionará o tamanho do disco do cluster para o valor disk_size_gb original. Para evitar isso, uma customização do ciclo de vida deve ser utilizada, ou seja: lifecycle { ignore_changes = [disk_size_gb] }.

    Da mesma forma, no Terraform, se compute_enabled for verdadeiro, o Atlas será automaticamente dimensionado até o máximo especificado e reduzido ao mínimo, se especificado. Isso fará com que o valor de provider_instance_size_name retornado possa ser diferente do especificado na configuração do Terraform e, se alguém aplicar um plano sem perceber isso, o Terraform redimensionará o tamanho do disco do cluster para o valor instanceSizeName original. Para evitar isso, uma customização do ciclo de vida deve ser utilizada, ou seja: lifecycle { ignore_changes = [provider_instance_size_name] }.

Veja exemplos do Terraform para aplicar nossas recomendações de homologação/produção para todos os pilares em um só lugar 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 utilizam AWS, Azure e Google Cloud indistintamente. Você pode usar qualquer um desses três provedores de nuvem, mas deve alterar o nome da região para corresponder à do provedor de nuvem. Para saber mais sobre os provedores de nuvem e as respectivas regiões, consulte Provedores 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 utilizam AWS, Azure e Google Cloud indistintamente. Você pode usar qualquer um desses três provedores de nuvem, mas deve alterar o nome da região para corresponder à do provedor de nuvem. Para saber mais sobre os provedores de nuvem e as respectivas regiões, consulte Provedores 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>"
  • Instalar o Terraform

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 Project the Group with Specific Roles
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
replication_specs {
region_configs {
electable_specs {
instance_size = var.cluster_instance_size_name
node_count = 3
}
priority = 7
provider_name = var.cloud_provider
region_name = var.atlas_region
}
}
tags {
key = "BU"
value = "ConsumerProducts"
}
tags {
key = "TeamName"
value = "TeamA"
}
tags {
key = "AppName"
value = "ProductManagementApp"
}
tags {
key = "Env"
value = "Production"
}
tags {
key = "Version"
value = "8.0"
}
tags {
key = "Email"
value = "marissa@acme.com"
}
}
# Outputs to Display
output "atlas_cluster_connection_string" { value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings.0.standard_srv }
output "project_name" { value = mongodbatlas_project.atlas-project.name }
# 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 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" {
type = boolean
description = "Flag that specifies whether disk auto-scaling is enabled"
}
# Compute Auto-scaling Enablement Flag
variable "auto_scaling_compute" {
type = boolean
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"
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"
}
}
required_version = ">= 0.13"
}

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 e a publicação no blog do MongoDB Terraform.

Voltar

Desempenho

Nesta página