Características 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 para la escalabilidad de Atlas
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.
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.
Todas las recomendaciones del paradigma de implementación
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_enabledSi es verdadero, Atlas ajustará automáticamente el tamaño del disco. Esto provocará que el valor dedisk_size_gbdevuelto 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 dedisk_size_gb. Para evitar esto, utiliceuse_effective_fields = true.De forma similar, en Terraform, si
compute_enabledes verdadero, Atlas escalará automáticamente hasta el máximo proporcionado y, si se proporciona, hasta el mínimo. Esto provocará que el valor deprovider_instance_size_namedevuelto 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 deinstanceSizeName. Para evitarlo, useuse_effective_fields = true.use_effective_fields = true.
Ejemplos de automatización: Escalabilidad de Atlas
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
M10para 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
M30para 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:
Crea tu organización pagadora y crea una clave de API para la organización pagadora.
Conéctese desde la CLI de Atlas siguiendo los pasos para Programmatic Use.
Crear una implementación por proyecto
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>"
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.
Crear los proyectos y las implementaciones
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.
principal.tf
# 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" } ] } ]
variables.tf
# 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" }
terraform.tfvars
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
proveedor.tf
# 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.