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

Orientación para la escalabilidad de Atlas

El escalado automático permite que los clústeres ajusten automáticamente su nivel, capacidad de almacenamiento o ambos, en respuesta al uso en tiempo real. Atlas utiliza mecanismos de escalado automático complementarios:

  • El escalado automático reactivo analiza la utilización actual de la CPU y la memoria para activar eventos de escalado en función de un uso sostenido de recursos, ya sea alto o bajo. El escalado automático reactivo se produce tras cambios en la carga de trabajo y gestiona tanto el aumento como la disminución de la capacidad.

  • El escalado automático predictivo utiliza el aprendizaje automático para anticipar las necesidades futuras de escalado basándose en patrones de uso históricos e intenta escalar antes de que se produzcan los picos cíclicos de carga de trabajo que pronostica. El escalado automático predictivo está disponible para Los clústeres elegibles solo admiten el escalado ascendente. El escalado descendente sigue siendo reactivo.

Consulte la sección Escalado de niveles de clúster para obtener más información sobre las condiciones en las que Atlas escala los nodos del clúster. También puede especificar un rango de tamaños máximos y mínimos de clúster al que este puede escalar automáticamente para garantizar un rendimiento mínimo o controlar los costos. Por lo general, Atlas no escalará un clúster si el escalado resultara en un nivel que quede fuera del rango de tamaño especificado, aunque el nivel del clúster y el almacenamiento podrían escalarse en paralelo si las necesidades de disco lo requieren. Atlas tampoco escalará si el uso de memoria o CPU excede la capacidad del nivel escalado.

El escalado automático es ideal para cargas de aplicaciones que aumentan o disminuyen constantemente y para patrones de carga de trabajo cíclicos. Para picos de tráfico inesperados y puntuales, como lanzamientos de productos o eventos sin precedentes, se recomienda realizar un preescalado programático. El escalado automático reactivo introduce un retardo limitado para evitar impactos en la aplicación, mientras que el escalado automático predictivo solo gestiona patrones recurrentes.

Plantillas de implementación de Atlas, como se mencionó en el Topologías de implementación Recomendadas, que le brindan opciones de escalado horizontal y vertical. Específicamente, el particionado distribuye los datos en varias máquinas, lo que resulta útil cuando ningún servidor único puede gestionar las cargas de trabajo. El particionado sigue una arquitectura compartida sin recursos compartidos, una arquitectura de computación distribuida donde ninguno de los nodos comparte recursos entre sí. Consulta la sección Elegir una clave de partición para aprender más sobre la elección ideal de clave de partición que permite que MongoDB distribuya documentos de manera uniforme en tu clúster y facilite los patrones de query habituales. Además, consulta Mejores prácticas de rendimiento: particionado para conocer las principales estrategias de particionado, como la partición según rangos, la partición por hash y la partición por zonas.

La actualización de un clúster de Atlas al siguiente nivel disponible de Atlas está disponible a través de la GUI del plano de control de Atlas, la API de administración de Atlas, o mediante herramientas IaC, como el operador de Kubernetes de Atlas, MongoDB & Terraform de HashiCorp o la CLI de Atlas. Consulta la Orientación para el provisionamiento automático de infraestructura de Atlas para aprender más. Cambiar un nivel de Atlas, ya sea aumentando o disminuyendo, permite cero tiempo de inactividad. Los cambios de nivel se producen de forma rotativa, lo que implica elegir a un miembro secundario como sustituto, promover este miembro secundario para que sea el nuevo primario, y restaurar o reemplazar al miembro defectuoso para asegurar que el clúster vuelva a su configuración objetivo lo antes posible. El escalado horizontal ocurre después de la implementación con base en la acción del Administrador, la cual puede ser activada desde un script programático. Algunas plantillas de clúster requieren clústeres particionados. A partir de la versión 8.0 de MongoDB, puedes hacer uso de servidores de configuración integrados para reducir los costos asociados a los servidores de configuración en clústeres fragmentados pequeños.

La opción de bajo uso de CPU en Atlas ayuda a aplicaciones que necesitan más memoria pero no tanta potencia de procesamiento. Esta opción proporciona instancias con la mitad de vCPUs en comparación con el nivel General de clústeres del mismo tamaño, reduciendo los costos para cargas de trabajo que son intensivas en memoria pero no dependen de la CPU.

La jerarquización y el archivado de datos permite archivar datos en almacenamiento de bajo costo y, al mismo tiempo, habilitar consultas junto con los datos del clúster en vivo, lo que resulta especialmente útil para la retención de registros a largo plazo. Para optimizar este proceso, MongoDB recomienda automatizar el fichero de datos con reglas simples y configurables. Consulta Datos de fichero para aprender más sobre los criterios que se pueden especificar en una regla de archivado. Para escenarios en los que la retención de datos no es una prioridad, Atlas ofrece la opción de borrar automáticamente los datos no utilizados en función de criterios de fecha. Para los datos a los que se accede con poca frecuencia, los índices TTL son índices especiales de un solo campo que borran automáticamente documentos de una colección después de un período especificado o a una hora determinada. Esto es particularmente útil para datos como registros, información de sesiones o datos de eventos que solo deben retenerse por un tiempo limitado. Para crear un índice TTL , puedes definir un índice en un campo que contenga valores de fecha y especificar una duración del tiempo de vida en segundos.

Atlas también te proporciona herramientas automatizadas, como el Performance Advisor, para identificar y optimizar ineficientes queries añadiendo o removiendo un índice o cambiando la estructura de la query del cliente. Puedes reducir el tiempo de procesamiento innecesario y el consumo de recursos siguiendo las recomendaciones procesables del Performance Advisor para mejorar el rendimiento de tus queries. Además, puedes aprovechar las recomendaciones inteligentes de índices proporcionadas por Atlas para mejorar aún más la eficiencia de recuperación de datos y minimizar los recursos necesarios para las operaciones de bases de datos.

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

Para implementaciones en una sola región, céntrate en estrategias de escalado vertical que optimicen el rendimiento dentro de una única región de la nube:

  • Habilita el escalado automático tanto para la computación como para el almacenamiento a fin de gestionar los aumentos graduales del tráfico sin intervención manual.

  • Utilice el particionado cuando su conjunto de datos exceda la capacidad de un solo servidor, incluso dentro de una sola región, para distribuir la carga a través de múltiples particiones.

  • Considera la opción de instancia de CPU baja para cargas de trabajo intensivas en memoria que no requieran alta capacidad de procesamiento.

  • Implementa los niveles de datos y el archivado de datos históricos para reducir los costos de almacenamiento y mantener las capacidades de query.

  • Supervisa el desempeño de las queries con Performance Advisor e implementa los índices recomendados para optimizar la utilización de los recursos.

  • Para eventos puntuales, como lanzamientos de productos o picos de tráfico sin precedentes, preescale los clústeres mediante programación antes del evento. El autoescalado se basa en cargas de trabajo cíclicas recurrentes o responde después de que se produzca el cambio en la carga de trabajo, lo cual podría no ser adecuado en su caso.

Recomendaciones que se aplican únicamente a implementaciones a través de múltiples regiones o de múltiples proveedores de nube

Para implementaciones multiregión y multi-nube, implementa estrategias de escalado que tengan en cuenta la distribución geográfica y la complejidad entre nubes:

  • Configura réplicas de lectura en las regiones más cercanas a tus usuarios para reducir la latencia y distribuir la carga de trabajo de lectura a nivel geográfico.

  • Utiliza el particionado de zonas para segmentar los datos en función de límites geográficos o lógicos, garantizando la localización de datos y el cumplimiento de los requisitos de conformidad.

  • Implementa clústeres globales con lecturas y guardados locales para optimizar el rendimiento en todas las regiones, manteniendo al mismo tiempo la coherencia de datos.

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

  • Tenga en cuenta el impacto de los costos de transferencia de datos entre regiones al implementar el escalado automático en varias regiones.

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

  • Implemente estrategias de copia de seguridad y archivo específicas de la 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 prueba, no habilite el escalado automático de cómputo ni el escalado automático de almacenamiento. Esto ahorra costos en sus entornos que no son de producción.

Para los entornos de pruebas y producción, se recomienda:

  • Habilite el escalado automático para computación y almacenamiento. Al habilitar el escalado automático, Atlas utiliza automáticamente tanto el escalado automático reactivo como el predictivo para aumentar la capacidad de sus clústeres. El escalado automático reactivo se activa en función del uso actual de los recursos. El escalado automático predictivo analiza los patrones de uso históricos y aumenta la capacidad de su clúster de forma proactiva antes de los picos de demanda cíclicos que pronostica. La reducción de escala sigue siendo reactiva en ambos casos. Para obtener más información, consulte Escalado automático predictivo para niveles de clúster.

  • Si usas Herramientas de IaC, utilizan la configuración para ignorar la desviación de recursos causada por el escalado automático. Por ejemplo, en Terraform, si disk_gb_enabled es verdadero, Atlas escalará el tamaño del disco hacia arriba y hacia abajo automáticamente. Esto hará que el valor de disk_size_gb devuelto pueda ser diferente del especificado en la configuración de Terraform y, si después se aplique un plan sin notar esto, Terraform escalará el tamaño del disco del clúster al valor original de disk_size_gb. Para evitar esto, usa use_effective_fields = true.

  • De manera similar, en Terraform, si compute_enabled es verdadero, entonces Atlas se ampliará automáticamente hasta el máximo proporcionado y se reducirá al mínimo, si se proporciona. Esto puede causar que el valor de provider_instance_size_name devuelto sea potencialmente diferente al especificado en la configuración de Terraform, y si luego se aplica un plan sin notar esto, Terraform escalará el clúster de vuelta al valor original de instanceSizeName. Para evitar esto, utiliza use_effective_fields = true. use_effective_fields = true.

Tip

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

Los siguientes ejemplos permiten el escalado automático de cómputo y almacenamiento usando las herramientas de automatización de Atlas.

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

  • El nivel de clúster se establece en M10 para un entorno de desarrollo/pruebas. Utilice la guía de tamaños 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 un solo set de réplicas/región con 3nodos y partición.

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

  • Nivel de clúster establecido en M30 para una aplicación de tamaño mediano. Utiliza la guía de tamaños 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 un solo set de réplicas/región con 3nodos y partición.

Nuestros ejemplos utilizan AWS, Azure y Google Cloud indistintamente. Puedes usar cualquiera de estos tres proveedores de nube, pero debes cambiar el nombre de la región para que coincida con el proveedor de nube. Para obtener 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, debes:

Para tus entornos de desarrollo y pruebas, el escalado automático de computación y almacenamiento está desactivado para ahorrar costos.

Para tus entornos de preproducción y producción, crea el siguiente archivo de cluster.json para cada proyecto. Cambia los ID y los nombres para usar tus 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, ejecutar 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 más opciones de configuración e información sobre este ejemplo, consulta Atlas clústeres create.

Nota

Antes de poder crear recursos con Terraform, debe:

  • Crea tu organización pagadora y crea una clave de API para la organización pagadora. Guarde su clave API como variables de entorno ejecutando el siguiente comando en el 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 MongoDB Atlas Terraform proveedor versión 2.x (~> 2.2). Si estás actualizando desde la versión 1.x del proveedor, consulta la 2.0.0 Guía de actualización para cambios disruptivos y pasos de migración. Los ejemplos utilizan el recurso mongodbatlas_advanced_cluster con la versión v2.x sintaxis.

Para tus entornos de desarrollo y pruebas, el escalado automático de computación y almacenamiento está desactivado para ahorrar costos.

Para tus entornos de staging y producción, crea los siguientes archivos para cada aplicación y par de entornos. Coloca los archivos de cada aplicación y par de entornos en su propio directorio. Cambia los ID, nombres y tamaño de disco para usar tus 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 multiregional, especifique cada región en su propio objeto region_configs y anídelos 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, navega hasta el directorio correspondiente al par de aplicación y entorno de cada uno y ejecuta 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, comenta el bloque lifecycle y ejecuta terraform apply. Asegúrate de quitar los comentarios del bloque lifecycle una vez hechos para evitar cambios accidentales.

Ejecuta el siguiente comando para crear un proyecto y una implementación para el par de aplicación y entorno. El comando usa los archivos y MongoDB & HashiCorp Terraform para crear los proyectos y los clústeres:

terraform apply

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

Para obtener más opciones de configuración e información sobre este ejemplo, consulta MongoDB & HashiCorp Terraform.

Volver

Rendimiento

En esta página