Docs Menu
Docs Home
/ /

Guía para la escalabilidad de Atlas

El escalado automático permite que los clústeres ajusten automáticamente su nivel, capacidad de almacenamiento o ambos, según el uso en tiempo real. Atlas analiza el uso de la CPU y la memoria para determinar cuándo y si es necesario escalar el nivel del clúster hacia arriba o hacia abajo. Consulte Escalado de niveles de clúster para obtener más información sobre las condiciones bajo las cuales Atlas escala verticalmente o verticalmente los nodos de su clúster. También puede especificar un rango de tamaños máximos y mínimos de clúster al que su clúster puede escalar automáticamente para garantizar un rendimiento mínimo o controlar los costos. Atlas no escalará un clúster si el nuevo nivel está fuera del rango de tamaño especificado o si el uso de memoria excede la capacidad del nuevo nivel. El escalado automático se limita con un retraso para escalar verticalmente un nivel de clúster y garantizar que no afecte a la aplicación. Por lo tanto, es más adecuado para una carga de aplicación en constante crecimiento o decrecimiento, no para picos repentinos en los que la base de datos se ve inundada de uso. Si su carga de trabajo experimenta picos frecuentes o si espera un gran aumento de tráfico debido a un evento o un lanzamiento, MongoDB recomienda preescalar programáticamente.

Plantillas de implementación de Atlas, como se hace referencia en el Las topologías de implementación recomendadas ofrecen opciones de escalado horizontal y vertical. En concreto, la fragmentación distribuye los datos entre varias máquinas, lo cual resulta útil cuando ningún servidor puede gestionar las cargas de trabajo. La fragmentación sigue una arquitectura de computación distribuida donde ningún nodo comparte recursos.Consulte "Elegir una clave de fragmentación" para obtener más información sobre la clave de fragmentación ideal que permite a MongoDB distribuir los documentos de forma uniforme en todo el clúster, facilitando al mismo tiempo patrones de consulta comunes. Además, consulte "Mejores prácticas de rendimiento: fragmentación" para obtener más información sobre las estrategias de fragmentación clave, como la fragmentación por rangos, la fragmentación hash y la fragmentación por zonas.

La actualización de un clúster Atlas al siguiente nivel disponible se realiza a través de la interfaz gráfica de usuario (GUI) del plano de control de Atlas, la API de administración de Atlas o herramientas de IaC, como el operador de Kubernetes de Atlas, Terraform de MongoDB y HashiCorp o la CLI de Atlas.Consulte la Guía para el aprovisionamiento automatizado de infraestructura de Atlas para obtener más información. Cambiar un nivel de Atlas, ya sea para aumentar o reducir la escala, permite cero tiempo de inactividad. El nivel cambia de forma continua, lo que implica elegir un miembro secundario como reemplazo, promover este miembro secundario para que se convierta en el nuevo principal y, a continuación, restaurar o reemplazar el miembro que falla para garantizar que el clúster vuelva a su configuración de destino lo antes posible. El escalado horizontal se realiza después de la implementación según la acción del administrador, que puede activarse desde un script programático. Algunas plantillas de clúster requieren clústeres fragmentados. A partir de la versión de MongoDB,8.0 puede utilizar servidores de configuración integrados para reducir los costes asociados a los servidores de configuración en clústeres fragmentados pequeños.

La opción de bajo consumo de CPU en Atlas facilita el uso de aplicaciones que requieren más memoria, pero no tanta potencia de procesamiento. Esta opción proporciona instancias con la mitad de vCPU en comparación con el nivel General del mismo tamaño de clúster, lo que reduce los costos de las cargas de trabajo que consumen mucha memoria, pero no están limitadas por la CPU.

La organización por niveles y el archivado de datos permiten archivar datos en un almacenamiento de bajo coste y, al mismo tiempo, habilitar consultas junto con datos de clúster en tiempo real, lo cual resulta especialmente útil para la retención de registros a largo plazo. Para optimizar este proceso, MongoDB recomienda automatizar el archivado de datos con reglas sencillas y configurables. Consulte Archivar datos para obtener más información sobre los criterios que puede especificar en una regla de archivado. Para situaciones en las que la retención de datos no es una prioridad, Atlas ofrece la opción de eliminar automáticamente los datos no utilizados según criterios de fecha. Para datos de acceso poco frecuente, los índices TTL son índices especiales de un solo campo que eliminan automáticamente los documentos de una colección después de un período específico o a una hora determinada. Esto resulta especialmente útil para datos como registros, información de sesión o datos de eventos que solo deben conservarse durante un tiempo limitado. Para crear un índice TTL, puede definir un índice en un campo que contenga valores de fecha y especificar un tiempo de vida en segundos.

Atlas también le proporciona herramientas automatizadas, como el Asesor de Rendimiento, para identificar y optimizar consultas ineficientes añadiendo o eliminando un índice o modificando la estructura de consultas de su cliente. Puede reducir el tiempo de procesamiento innecesario y el consumo de recursos siguiendo las recomendaciones prácticas del Asesor de Rendimiento para mejorar el rendimiento de sus consultas. Además, puede aprovechar las recomendaciones inteligentes de índices que ofrece Atlas para optimizar la recuperación de datos y minimizar los recursos necesarios para las operaciones de la base de datos.

Recomendaciones que se aplican solo a implementaciones en una sola región

Para implementaciones de una sola región, concéntrese en estrategias de escalamiento vertical que optimicen el rendimiento dentro de una sola región de nube:

  • Habilite el escalamiento automático tanto para el cómputo como para el almacenamiento para manejar aumentos graduales de tráfico sin intervención manual.

  • Utilice la fragmentación cuando su conjunto de datos exceda la capacidad de un solo servidor, incluso dentro de una sola región, para distribuir la carga entre múltiples fragmentaciones.

  • Considere la opción de instancia de CPU baja para cargas de trabajo con uso intensivo de memoria que no requieren gran potencia de procesamiento.

  • Implemente la clasificación y el archivo de datos para datos históricos a fin de reducir los costos de almacenamiento y, al mismo tiempo, mantener las capacidades de consulta.

  • Supervise el rendimiento de las consultas con el Asesor de rendimiento e implemente los índices recomendados para optimizar la utilización de recursos.

  • Preescalar los clústeres antes de los picos de tráfico esperados en lugar de confiar únicamente en el escalamiento automático para aumentos de carga repentinos.

Recomendaciones que se aplican únicamente a implementaciones en múltiples regiones o múltiples proveedores de nube

Para implementaciones multirregionales y multinube, implemente estrategias de escalamiento que tengan en cuenta la distribución geográfica y la complejidad entre nubes:

  • Configure réplicas de lectura en las regiones más cercanas a sus usuarios para reducir la latencia y distribuir las cargas de trabajo de lectura geográficamente.

  • Utilice la fragmentación de zonas para particionar datos según límites geográficos o lógicos, lo que garantiza la localidad de los datos y los requisitos de cumplimiento.

  • Implemente clústeres globales con lecturas y escrituras locales para optimizar el rendimiento en todas las regiones y, al mismo tiempo, mantener la consistencia de los datos.

  • Supervise la latencia de la red entre regiones y ajuste las prioridades de las réplicas para garantizar un comportamiento de conmutación por error óptimo.

  • Considere el impacto de los costos de transferencia de datos entre regiones al implementar el escalamiento automático en múltiples regiones.

  • Utilice diferentes niveles de clúster en diferentes regiones según los patrones de uso regionales y las estrategias de optimización de costos.

  • Implementar estrategias de respaldo y archivo específicas de cada región para cumplir con los requisitos de residencia de datos.

Las siguientes recomendaciones se aplican a todos los paradigmas de implementación.

Para entornos de desarrollo y pruebas, no habilite el escalado automático de cómputo ni el escalado automático de almacenamiento. Esto ahorra costos en entornos que no son de producción.

Para entornos de prueba y producción, le recomendamos que:

  • Habilite el escalamiento automático para el procesamiento y el almacenamiento para instancias en las que su aplicación crece orgánicamente de pequeña a mediana.

  • Si utilizas Las herramientas deIaC aprovechan la configuración para ignorar la desviación de recursos causada por el escalado automático. Por ejemplo, en Terraform, si disk_gb_enabled Si es verdadero, Atlas ajustará automáticamente el tamaño del disco. Esto provocará que el valor de disk_size_gb devuelto sea potencialmente diferente al especificado en la configuración de Terraform. Si se aplica un plan sin tenerlo en cuenta, Terraform ajustará el tamaño del disco del clúster al valor original de disk_size_gb. Para evitar esto, utilice use_effective_fields = true.

  • De forma similar, en Terraform, si compute_enabled es verdadero, Atlas escalará automáticamente hasta el máximo proporcionado y, si se proporciona, hasta el mínimo. Esto provocará que el valor de provider_instance_size_name devuelto sea potencialmente diferente al especificado en la configuración de Terraform. Si se aplica un plan sin tenerlo en cuenta, Terraform escalará el clúster al valor original de instanceSizeName. Para evitarlo, use use_effective_fields = true. use_effective_fields = true.

Tip

Para ver ejemplos de Terraform que aplican nuestras recomendaciones en todos los pilares, consulte uno de los siguientes ejemplos en GitHub:

Los siguientes ejemplos permiten el escalado automático del cómputo y el almacenamiento mediante herramientas Atlas para la automatización.

Estos ejemplos también se aplican a otras configuraciones recomendadas, entre ellas:

  • El nivel de clúster está configurado en M10 para un entorno de desarrollo y pruebas. Consulta la guía de tamaño de clúster para conocer el nivel de clúster recomendado para el tamaño de tu aplicación.

  • Topología de implementación de conjunto de réplicas/fragmentos de región única y 3nodos.

Nuestros ejemplos utilizan AWS, Azure y Google Cloud indistintamente. Puede usar cualquiera de estos tres proveedores de nube, pero debe cambiar el nombre de la región para que coincida con el del proveedor. Para obtener más información sobre los proveedores de nube y sus regiones, consulte Proveedores de nube.

  • El nivel de clúster está configurado en M30 para una aplicación de tamaño mediano. Consulte la guía de tamaño de clúster para conocer el nivel de clúster recomendado para el tamaño de su aplicación.

  • Topología de implementación de conjunto de réplicas/fragmentos de región única y 3nodos.

Nuestros ejemplos utilizan AWS, Azure y Google Cloud indistintamente. Puede usar cualquiera de estos tres proveedores de nube, pero debe cambiar el nombre de la región para que coincida con el del proveedor. Para obtener más información sobre los proveedores de nube y sus regiones, consulte Proveedores de nube.

Nota

Antes de poder crear recursos con la CLI de Atlas, debe:

Para sus entornos de desarrollo y prueba, el escalamiento automático del cómputo y el almacenamiento está deshabilitado para ahorrar costos.

Para sus entornos de prueba y producción, cree el siguiente archivo cluster.json para cada proyecto. Cambie los ID y los nombres para usar sus 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"
}
]
}

Después de crear el archivo cluster.json, ejecute el siguiente comando para cada proyecto. El comando usa el archivo cluster.json para crear un clúster.

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

Para obtener más opciones de configuración e información sobre este ejemplo, consulte Crear clústeres de atlas.

Nota

Antes de poder crear recursos con Terraform, debes:

  • Cree su organización pagadora y genere una clave API para ella. Guarde su clave API como variables de entorno ejecutando el siguiente comando en la terminal:

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

Importante

Los siguientes ejemplos utilizan la 2 versión.x () del proveedor Terraform de MongoDB Atlas.~> 2.2 Si actualiza desde 1 la versión.x del proveedor, consulte la 2.0.0 Guía de actualización para conocer los cambios importantes y los pasos de migración. Los ejemplos utilizan el mongodbatlas_advanced_cluster recurso con la2 sintaxis v.x.

Para sus entornos de desarrollo y prueba, el escalamiento automático del cómputo y el almacenamiento está deshabilitado para ahorrar costos.

Para sus entornos de prueba y producción, cree los siguientes archivos para cada aplicación y entorno. Coloque los archivos de cada aplicación y entorno en su propio directorio. Cambie los ID, los nombres y el tamaño del disco para usar sus 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 }

Nota

Para crear un clúster multirregional, especifique cada región en su propio objeto region_configs y anídelas en el objeto replication_specs, como se muestra en el siguiente ejemplo:

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
}

Después de crear los archivos, navegue al directorio de cada par de aplicaciones y entornos y ejecute el siguiente comando para inicializar Terraform:

terraform init

Ejecute el siguiente comando para ver el plan de Terraform:

terraform plan

Después de agregar el bloque lifecycle para cambiar explícitamente disk_size_gb y instant_size, comente el bloque lifecycle y ejecute terraform apply. Asegúrese de descomentar el bloque lifecycle una vez hecho esto para evitar cambios accidentales.

Ejecute el siguiente comando para crear un proyecto y una implementación para la aplicación y el entorno. El comando utiliza los archivos y el Terraform de MongoDB y HashiCorp para crear los proyectos y clústeres:

terraform apply

Cuando se le solicite, escriba yes y presione Enter para aplicar la configuración.

Para obtener más opciones de configuración e información sobre este ejemplo, consulte MongoDB & HashiCorp Terraform y la publicación del blog de MongoDB Terraform.

Volver

Rendimiento

En esta página