Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Orientación para la escalabilidad de Atlas

El escalado automático permite a los clústeres ajustar automáticamente su nivel, capacidad de almacenamiento o ambos en respuesta al uso en tiempo real. Atlas analiza la utilización de la CPU y la memoria para determinar cuándo y si debe escalar el nivel del clúster hacia arriba o hacia abajo. Ver Escalado del nivel de clúster para aprender más sobre las condiciones bajo las cuales Atlas escala hacia arriba o hacia abajo los nodos de tu clúster. También puedes especificar un rango de tamaños máximos y mínimos de clúster a los que tu 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 se encuentra 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 mediante un retardo para escalar un nivel de clúster hacia arriba o hacia abajo, con el fin de garantizar que el escalado automático no cause ningún impacto en la aplicación. Por lo tanto, es más adecuado para una carga de aplicación que aumenta o disminuye de manera constante, no para picos repentinos en los que la base de datos se ve sobrecargada de uso. Si tu carga de trabajo experimenta aumentos constantes o si esperas un gran aumento de tráfico debido a un evento o un lanzamiento, MongoDB recomienda que pre-escales de forma programática.

Plantillas de implementación de Atlas, como se mencionó 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 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 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 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:

  • 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.

  • 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.

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

  • Preescalar clústeres antes de picos de tráfico esperados en lugar de depender únicamente del escalado automático para aumentos repentinos de carga.

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:

  • 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.

  • 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.

  • 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.

  • 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:

  • Habilita el escalado automático para el procesamiento y el almacenamiento en instancias donde tu aplicación crece orgánicamente de pequeña a mediana.

  • Si usas 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 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 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 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 del cómputo y el almacenamiento mediante herramientas Atlas para la automatización.

Estos ejemplos también aplican 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 un solo set de réplicas/región con 3nodos y partición.

Nuestros ejemplos utilizan AWS, Azure y Google Cloud de manera intercambiable. 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 conocer los proveedores de nube y sus regiones, consulta 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 de manera intercambiable. 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 conocer los proveedores de nube y sus regiones, consulta Proveedores de Nube.

Nota

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

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, 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 sus entornos de desarrollo y prueba, el escalamiento automático del cómputo y el almacenamiento está deshabilitado 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, 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 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 y HashiCorp Terraform y la Entrada de Blog de MongoDB Terraform.

Volver

Rendimiento

En esta página