Compartir a través de


Revisión de Azure Well-Architected Framework: Azure Cosmos DB para NoSQL

En este artículo se describen los procedimientos recomendados para Azure Cosmos DB para NoSQL. Estos procedimientos recomendados garantizan que puede implementar soluciones en Azure Cosmos DB que sean eficaces, confiables, seguras, optimizadas para costos y de forma operativa. Esta guía se centra en los cinco pilares de excelencia de la arquitectura en el marco bien diseñado:

En esta guía de revisión se da por supuesto que tiene conocimientos prácticos de Azure Cosmos DB y que están bien familiarizados con sus características. Para más información, consulte Azure Cosmos DB para NoSQL.

Requisitos previos

Comprender los pilares del marco bien diseñado puede ayudar a generar una arquitectura en la nube de alta calidad, estable y eficaz. Se recomienda empezar por revisar la carga de trabajo mediante la evaluación de revisión del marco de trabajo de Azure Well-Architected.

Para obtener más contexto, revise varias arquitecturas de referencia que reflejen las consideraciones de esta guía en su diseño. Estas arquitecturas incluyen, pero no se limitan a:

Confiabilidad

Al igual que con cualquier servicio en la nube, los errores pueden producirse en el servicio y en el lado de la carga de trabajo. Es imposible evitar todos los posibles errores, pero es un objetivo mejor minimizar los efectos que puede tener un único componente con errores en toda la carga de trabajo. En esta sección se incluyen consideraciones y recomendaciones para minimizar las consecuencias de un error puntual.

Diseño de una lista de comprobación

  • Considere cómo afecta el nivel de coherencia y el modo de replicación seleccionados al objetivo de punto de recuperación (RPO) en una interrupción en toda la región.
  • Diseñe la implementación de la cuenta de base de datos para que abarque al menos dos regiones en Azure. Además, distribuya la cuenta entre varias zonas de disponibilidad cuando se ofrecen dentro de la región de Azure.
  • Evalúe las estrategias de escritura de varias regiones y de una sola región para la carga de trabajo. Para la escritura de una sola región, diseñe la carga de trabajo para tener al menos una segunda región de lectura para la conmutación por error. Habilite la conmutación por error automática para escenarios de lectura de una sola región y de varias regiones. En el caso de la escritura en varias regiones, compare los inconvenientes en complejidad y coherencia con las ventajas de escribir en varias regiones. Revise las expectativas durante una interrupción regional de las cuentas de escritura de una sola región y de varias regiones.
  • Habilite la conmutación por error administrada por el servicio para su cuenta.
  • Diseñe una prueba completa de alta disponibilidad para la aplicación.
  • Recorra los procesos comunes de copia de seguridad, entre los que se incluyen, entre otros, la restauración a un momento dado, la recuperación de operaciones destructivas accidentales, la restauración de recursos eliminados y la restauración a otra región en un momento dado. Configure la cuenta con copia de seguridad continua, eligiendo el período de retención adecuado en función de los requisitos empresariales.
  • Explore la guía de diseño de aplicaciones resistentes, revise la directiva de reintento predeterminada para los SDK y planee el control personalizado para errores transitorios específicos. Estas guías proporcionarán procedimientos recomendados para que el código de aplicación sea resistente a errores transitorios.

Recomendaciones

Recomendación Prestación
Distribuya la cuenta de Azure Cosmos DB entre zonas de disponibilidad (cuando esté disponible). Las zonas de disponibilidad proporcionan distintos errores de alimentación, redes y refrigeración que aíslan los errores de hardware en un subconjunto de las réplicas. Azure Cosmos DB tiene varias réplicas que abarcan una sola zona de disponibilidad aleatoria cuando no se usa la característica de zonas de disponibilidad. Si se usa la característica de zona de disponibilidad, las réplicas abarcan varias zonas de disponibilidad.
Configure la cuenta de Azure Cosmos DB para abarcar al menos dos regiones. La expansión de varias regiones impide que la cuenta no esté completamente disponible si hay una interrupción de región aislada.
Habilite la conmutación por error administrada por el servicio para su cuenta. La conmutación por error administrada por el servicio permite a Azure Cosmos DB cambiar la región de escritura de una cuenta de varias regiones para conservar la disponibilidad. Este cambio se produce sin interacción del usuario. Comprenda los inconvenientes con la conmutación por error administrada por el servicio y planee la conmutación por error forzada si es necesario. Para obtener más información, consulte Creación de aplicaciones de alta disponibilidad.
Valide la disponibilidad probando la conmutación por error manualmente con la conmutación por error administrada por el servicio deshabilitada temporalmente. Deshabilitar temporalmente la conmutación por error de administración de servicios le permite validar la alta disponibilidad de un extremo a otro de la aplicación con una conmutación por error manual iniciada mediante un script o Azure Portal. Después, puede volver a habilitar la conmutación por error administrada por el servicio.

Definiciones de directiva de Azure

Seguridad

La seguridad es una parte fundamental de cualquier arquitectura que se pueda pasar fácilmente por alto para mayor comodidad. Reforzar la seguridad de la carga de trabajo final considerando varios procedimientos recomendados de seguridad por adelantado antes de crear el primer recurso o prueba de concepto. En esta sección se incluyen consideraciones y recomendaciones para reducir el número de vulnerabilidades de seguridad de la carga de trabajo final.

Diseño de una lista de comprobación

  • Reduzca el área expuesta a ataques mediante el diseño para usar puntos de conexión privados de acuerdo con la línea de base de seguridad de Azure Cosmos DB.
  • Cree roles, grupos y asignaciones para el acceso al plano de control y al plano de datos a su cuenta según el principio de acceso con privilegios mínimos. Considere la posibilidad de deshabilitar la autenticación basada en claves.
  • Evalúe el cumplimiento de nivel de servicio y las certificaciones en el contexto de los requisitos actuales de datos personales globales.
  • Cifre los datos en reposo o en movimiento mediante claves administradas por el servicio o claves administradas por el cliente (CMK).
  • Audite el acceso de los usuarios, las infracciones de seguridad y las operaciones de recursos con registros del plano de control.
  • Supervise la salida de datos, los cambios de datos, el uso y la latencia con las métricas del plano de datos.

Recomendaciones

Recomendación Prestación
Implemente, como mínimo, las líneas base de seguridad de protección de datos y administración de identidades. Recorra la línea de base de seguridad, incluida la administración de identidades y la protección de datos. Implemente las recomendaciones para proteger la cuenta de Azure Cosmos DB.
Deshabilite los puntos de conexión públicos y use puntos de conexión privados siempre que sea posible. Evite dejar puntos de conexión públicos innecesarios o sin usar disponibles para ataques de área expuesta a su cuenta.
Use el control de acceso basado en roles para limitar el acceso del plano de control a identidades y grupos específicos y dentro del ámbito de las asignaciones bien definidas. Use el control de acceso basado en rol para evitar el acceso no deseado a su cuenta. Asigne los roles y permisos adecuados a los usuarios o aplicaciones que acceden a Azure Cosmos DB.
Cree reglas y puntos de conexión de red virtual para limitar el acceso a la cuenta. Implemente puntos de conexión de servicio de red virtual y reglas de firewall para restringir el acceso a la cuenta de Azure Cosmos DB. Use grupos de seguridad de red (NSG) para controlar el tráfico entrante y saliente hacia y desde los recursos de Azure Cosmos DB. Limitar el acceso a redes de confianza y aplicar las medidas de seguridad de red adecuadas ayuda a proteger los datos frente al acceso no autorizado.
Siga los procedimientos recomendados de desarrollo de software para proteger el acceso a los datos. Siga los procedimientos de codificación seguros y realice revisiones de código seguras al desarrollar aplicaciones que interactúan con Azure Cosmos DB. Proteja frente a vulnerabilidades de seguridad comunes, como ataques de inyección, scripting entre sitios (XSS) o referencias a objetos directos no seguros (IDOR). Implemente la validación de entrada, las consultas con parámetros y el control de errores adecuado para códigos de estado HTTP comunes para evitar riesgos de seguridad.
Supervise los registros del plano de control para detectar infracciones. La supervisión le ayuda a realizar un seguimiento de los patrones de acceso y los registros de auditoría, lo que garantiza que la base de datos sigue siendo segura y compatible con las normativas de protección de datos pertinentes. La supervisión de métricas del plano de datos también puede ayudar a identificar patrones desconocidos que podrían revelar una vulneración de seguridad. Para más información, consulte lista de comprobación de seguridad para bases de datos de Azure.
Inicio rápido: Habilitación de Microsoft Defender para Azure Cosmos DB Microsoft Defender detecta intentos de aprovechar bases de datos en la cuenta de Azure Cosmos DB para NoSQL. Defender detecta posibles inyecciones de SQL, patrones de acceso sospechosos y otras posibles vulnerabilidades.

Definiciones de directiva de Azure

Optimización de costos

Las características de la carga de trabajo y la implementación de la solución pueden influir en el costo final de la ejecución en Azure. Considere los principales factores, como la estrategia de creación de particiones, el nivel de coherencia, la replicación y el tipo de escritura al diseñar la carga de trabajo. Al ajustar el tamaño de la carga de trabajo, tenga en cuenta la naturaleza de lectura y escritura de los datos, el tamaño de los elementos promedio, la normalización y el TTL. En esta sección se incluyen consideraciones y recomendaciones para simplificar los costos de la carga de trabajo.

  • Diseñe una directiva de indexación que tenga en cuenta las operaciones y las consultas que normalmente realiza en la carga de trabajo.
  • Determine una clave de partición o un conjunto de claves de partición que tengan un valor que tenga una cardinalidad alta y no cambie. Use las instrucciones y procedimientos recomendados existentes para ayudar a seleccionar una clave de partición adecuada. Además, tenga en cuenta la directiva de indexación al determinar una clave de partición.
  • Seleccione un esquema de asignación de rendimiento adecuado para la carga de trabajo. Revise las ventajas del rendimiento estándar y de escalabilidad automática distribuidos en el nivel de base de datos o contenedor. Además, considere la posibilidad de no tener servidor cuando sea adecuado. Revise los patrones de tráfico de la carga de trabajo en el contexto de seleccionar un esquema de asignación de rendimiento.
  • Considere los niveles de coherencia en relación con la carga de trabajo. Además, considere si las sesiones de cliente deben modificar el nivel de coherencia predeterminado.
  • Calcule el almacenamiento de datos general esperado para la carga de trabajo. El tamaño de los elementos e índices influye en el costo del almacenamiento de datos. Calcuate el impacto de la replicación y la copia de seguridad en los costos de almacenamiento.
  • Cree una estrategia para quitar automáticamente elementos antiguos que ya no se usen o sean necesarios. Si es necesario, exporte estos elementos a una solución de almacenamiento de menor costo antes de quitarlos.
  • Evalúe las consultas más comunes que minimicen las búsquedas entre particiones. Use esta información para informar al proceso de selección de una clave de partición o la personalización de una directiva de indexación.

Recomendaciones

Recomendación Prestación
Supervise el uso y los patrones de RU/s. Use métricas para supervisar el consumo de RU desde el principio de la solución. Use consultas y otras técnicas de investigación de datos para buscar antipatrones en el código de la aplicación.
Personalice la directiva de indexación para asignarla a la carga de trabajo. La directiva de indexación predeterminada indexa todas las rutas de acceso de un elemento y esta directiva puede tener impactos significativos en el consumo y los costos de RU. Use una directiva de indexación diseñada en función de solo las rutas de acceso que necesita indexar para las consultas comunes. En el caso de las cargas de trabajo con mucha escritura, deshabilite la indexación automática de columnas que no se usan en las consultas.
Seleccione las claves de partición que son ideales para la carga de trabajo. La clave de partición debe distribuir el consumo de rendimiento y el almacenamiento de datos uniformemente entre particiones lógicas. La selección también debe minimizar el número de consultas entre particiones sin enlazar. Evite las particiones activas que reciben una cantidad desproporcionada de tráfico, ya que las particiones desequilibradas pueden aumentar los costos de rendimiento y los errores transitorios. Use las consultas de búsqueda más comunes para determinar las posibles claves de partición que probablemente ejecuten solo consultas de partición única o entre particiones enlazadas.
Use el rendimiento sin servidor o aprovisionado, el aprovisionamiento manual o la escalabilidad automática, en el nivel de base de datos o contenedor cuando sea adecuado para la carga de trabajo. Compare los tipos de rendimiento aprovisionados y seleccione la opción adecuada para la carga de trabajo. Por lo general, las cargas de trabajo más pequeñas y de desarrollo y pruebas pueden beneficiarse del rendimiento sin servidor o del rendimiento compartido manual en el nivel de base de datos. Las cargas de trabajo más grandes y críticas pueden beneficiarse del rendimiento aprovisionado asignado en el nivel de contenedor.
Configure el nivel de coherencia predeterminado para la aplicación. Cuando corresponda, cambie el nivel de coherencia predeterminado en las sesiones de cliente. Es posible que no siempre tenga que cambiar el nivel de coherencia predeterminado estándar o invalidarlo en las sesiones de cliente. Tenga en cuenta los costos más altos asociados con las lecturas en niveles de coherencia más fuertes.
Para cargas de trabajo de desarrollo y pruebas, use el emulador de Azure Cosmos DB. El emulador de Azure Cosmos DB es una opción para la integración continua y desarrollo que puede ahorrar en los costos de estas cargas de trabajo comunes para el equipo de desarrollo. El emulador también está disponible como una imagen de contenedor de Docker.
Uso de operaciones por lotes transaccionales Diseñe particiones para aprovechar las operaciones por lotes transaccionales dentro de una clave de partición lógica para insertarlas. Use operaciones por lotes en SDK del lado cliente para insertar, actualizar o eliminar varios documentos en una sola solicitud de transacción. Este paso puede reducir el número de solicitudes individuales y, finalmente, puede dar lugar a una mejor eficacia de rendimiento.
Use la proyección para reducir los costos de rendimiento de grandes conjuntos de resultados de consulta. Cree consultas para proyectar solo el número mínimo de campos necesarios a partir de un conjunto de resultados. Si se necesitan cálculos en campos, evalúe el costo de rendimiento de realizar esos cálculos en el lado servidor frente al lado cliente.
Evite usar consultas entre particiones sin enlazar. Evalúe y cree consultas para asegurarse de que buscan dentro de una sola partición lógica siempre que sea posible. Use filtros de consulta para controlar qué particiones lógicas tiene como destino la consulta. Si una consulta debe buscar entre particiones lógicas, enlaza la consulta para buscar solo un subconjunto de particiones lógicas en lugar de un examen completo.
Implemente el período de vida (TTL) para quitar elementos sin usar. Use TTL para eliminar automáticamente los datos que ya no son necesarios. Administre los costos de almacenamiento quitando los datos expirados o obsoletos. Si es necesario, exporte los datos expirados a una solución de almacenamiento de menor costo.
Considere un almacén analítico para agregaciones pesadas. El almacén analítico de Azure Cosmos DB sincroniza automáticamente los datos con un almacén de columnas independiente para optimizar las agregaciones grandes, los informes y las consultas analíticas.

Definiciones de directiva de Azure

Excelencia operativa

Las cargas de trabajo deben supervisarse después de implementarse para asegurarse de que funcionan según lo previsto. Además, la supervisión de cargas de trabajo puede ayudar a desbloquear nuevas eficiencias no inmediatamente obvias durante la fase de planificación. En escenarios catastróficos, los datos de diagnóstico son la clave para descubrir por qué podría haberse producido un incidente de gravedad alta. En esta sección se incluyen consideraciones y recomendaciones para supervisar eventos y características de las cargas de trabajo.

Diseño de una lista de comprobación

  • Cree un borrador de una estrategia de supervisión de registros y métricas para diferenciar entre diferentes cargas de trabajo, marcar escenarios excepcionales, realizar un seguimiento de los patrones en excepciones o errores y realizar un seguimiento del rendimiento de la máquina host.
  • Diseñe cargas de trabajo grandes para usar operaciones masivas siempre que sea posible.
  • Defina varias alertas para supervisar la limitación, analizar la asignación de rendimiento y realizar un seguimiento del tamaño de los datos.
  • Diseñe una estrategia de supervisión para la disponibilidad de la solución entre regiones.
  • Cree y aplique los procedimientos recomendados para automatizar la implementación de la cuenta y los recursos de Azure Cosmos DB para NoSQL.
  • Planee los umbrales de métrica esperados en función del diseño de la partición y del índice. Asegúrese de que hay un plan para supervisar esas métricas para determinar la proximidad de los umbrales planeados.

Recomendaciones

Recomendación Prestación
Asegúrese de que los desarrolladores de aplicaciones usan la versión más reciente del SDK para desarrolladores. Cada SDK de Azure Cosmos DB para NoSQL tiene una versión mínima recomendada. Para obtener más información, consulte SDK de .NET y SDK de Java.
Cree identificadores en la aplicación cliente para diferenciar las cargas de trabajo. Tenga en cuenta las marcas, como el sufijo user-agent, para identificar con qué carga de trabajo se debe asociar cada entrada de registro o métrica.
Capture diagnósticos complementarios mediante el SDK para desarrolladores. Use las técnicas de inyección de diagnóstico para cada SDK para agregar información complementaria sobre la carga de trabajo junto con las métricas y registros predeterminados. Para obtener más información, consulte SDK de .NET y SDK de Java.
Cree alertas asociadas a los recursos del equipo host. Conectar la disponibilidad y los problemas de disponibilidad pueden producirse debido a problemas de máquina host del lado cliente. Supervise recursos como CPU, memoria y almacenamiento en máquinas host con aplicaciones cliente mediante los SDK de Azure Cosmos DB para NoSQL.
Use las características masivas de los SDK de cliente para operaciones grandes. Los escenarios que requieren un alto grado de rendimiento se benefician del uso de la característica masiva del SDK. La característica masiva administra y administra automáticamente las operaciones por lotes para maximizar el rendimiento.
Cree alertas para la limitación del rendimiento. Use alertas para realizar un seguimiento de la limitación de rendimiento más allá de los umbrales esperados. Con el tiempo, revise y ajuste las alertas a medida que obtenga más información sobre la carga de trabajo en relación con Azure Cosmos DB. La métrica Consumo de RU normalizado es una métrica que mide el porcentaje de uso del rendimiento aprovisionado en una base de datos o contenedor. Si esta métrica está constantemente al 100 %, es probable que las solicitudes devuelvan un error transitorio.
Realice un seguimiento del rendimiento de las consultas mediante métricas. Use métricas para realizar un seguimiento del rendimiento de las consultas principales a lo largo del tiempo. Evalúe si hay eficiencias que se van a encontrar actualizando la directiva de indexación o cambiando las consultas. Si el rendimiento de las consultas es deficiente, solucione problemas de rendimiento y aplique los procedimientos recomendados de consulta. Para más información, consulte sugerencias de rendimiento de consultas.
Use plantillas para implementar automáticamente recursos de cuenta. Considere la posibilidad de usar plantillas de Azure Resource Manager, Bicep o Terraform para automatizar la implementación de la cuenta y los recursos posteriores. Asegúrese de que el equipo usa las mismas plantillas para implementar en otros entornos que no son de producción.
Realice un seguimiento de las métricas clave para identificar problemas comunes en la carga de trabajo. Use métricas específicas para encontrar problemas comunes en la carga de trabajo, incluidos, entre otros; Uso de RU, uso de RU por partición, limitación y volúmenes de solicitud por tipo. Para más información, consulte Supervisión de la referencia de datos.

Definiciones de directiva de Azure

Eficiencia del rendimiento

  • Defina una línea base de rendimiento para la aplicación. Mida el número de usuarios y transacciones simultáneos que es posible que necesite controlar. Considere las características de carga de trabajo, como el flujo de usuario promedio, las operaciones comunes y los picos de uso.
  • Investigue las consultas más comunes y más complejas. Identifique las consultas que usan varias búsquedas, combinaciones o agregados. Tenga en cuenta estas consultas en cualquier consideración de diseño para la clave de partición o la directiva de indexación.
  • Para las consultas más comunes, determine el número de resultados esperados por página. Este número ayudará a formalizar un recuento de elementos almacenados en búfer para los resultados de captura previa.
  • Investigue a los usuarios de destino. Determine qué regiones de Azure están más cercanas a ellas.
  • Identifique las consultas que usan uno o varios campos de ordenación. Además, identifique las operaciones que afectan a varios campos. Incluya estos campos explícitamente en el diseño de la directiva de indexación.
  • Diseñar elementos para que sus documentos JSON correspondientes sean lo más pequeños posible. Si es necesario, considere la posibilidad de dividir los datos entre varios elementos.
  • Identifique las consultas en matrices secundarias y determine si son candidatas para subconsultas más eficaces.
  • Determine si la carga de trabajo requiere un almacén analítico. Considere la posibilidad de almacenar almacenes analíticos y servicios como Azure Synapse Link para consultas extremadamente complejas.
Recomendación Prestación
Configure el rendimiento en función de la línea base de rendimiento. Use herramientas como la calculadora de capacidad para determinar la cantidad de rendimiento necesaria para la línea base de rendimiento. Use características como la escalabilidad automática para escalar el rendimiento real para que coincida más estrechamente con la carga de trabajo real. Supervise el consumo de rendimiento real después y realice ajustes.
Use técnicas de optimización en los lados del cliente y del servidor cuando corresponda. Aproveche las ventajas de la caché integrada integrada. Configure el SDK para administrar cuántos elementos se capturan previamente (almacenados en búfer) y se devuelven para cada página.
Implemente Azure Cosmos DB para NoSQL en regiones más cercanas a los usuarios finales. Reduzca la latencia mediante la implementación de Azure Cosmos DB para NoSQL en las regiones más cercanas a los usuarios finales tanto como sea posible. Aproveche la replicación de lectura para proporcionar un rendimiento de lectura eficaz, independientemente de cómo configure la escritura (única o varias regiones). Configure el SDK de Java (.NET/) para preferir regiones más cercanas al usuario final.
Configure el SDK para el modo directo. El modo directo es la opción preferida para mejorar el rendimiento. Este modo permite al cliente abrir conexiones TCP directamente a particiones en el servicio y enviar solicitudes directamente sin puerta de enlace intermedia. Este modo ofrece un mejor rendimiento porque hay menos saltos de red.
Deshabilite la indexación para operaciones masivas. Si hay muchas operaciones de inserción, reemplazo o upsert, deshabilite la indexación para mejorar la velocidad de la operación mientras usa la compatibilidad masiva del SDK correspondiente. La indexación se puede volver a habilitar inmediatamente más adelante.
Cree índices compuestos para los campos que se usan en operaciones complejas. Los índices compuestos pueden aumentar la eficacia de las operaciones en varios campos por orden de magnitud. En muchos casos, use índices compuestos para ORDER BY instrucciones con varios campos.
Optimice las máquinas cliente host para los SDK. Para el caso más común, use al menos 4 núcleos y 8 GB de memoria en máquinas host de 64 bits mediante los SDK (.NET/Java). Además, habilite las redes aceleradas en máquinas host.
Use el patrón singleton para la clase en la CosmosClient mayoría de los SDK. Use la clase de cliente en la mayoría de los SDK como singleton. La clase cliente administra su propio ciclo de vida y está diseñado para no eliminarse. La creación y eliminación constantes de instancias puede dar lugar a una reducción del rendimiento.
Mantenga los tamaños de elemento inferiores a 100 KB . Mayor rendimiento del consumidor de elementos para las operaciones comunes de lectura y escritura. Las consultas en elementos más grandes que proyectan todos los campos también pueden tener un costo de rendimiento significativo.
Use subconsultas estratégicamente para optimizar las consultas que unen grandes conjuntos de datos. Las consultas que unen matrices secundarias pueden aumentar la complejidad si hay varias matrices implicadas y no filtradas. Por ejemplo, una consulta que combina más de dos matrices de al menos 10 elementos cada uno puede expandirse a más de 1000 tuplas. Optimice las expresiones de autocombinación mediante subconsultas para filtrar las matrices antes de combinar matrices dentro del elemento. Para las consultas entre particiones, optimice la consulta para incluir un filtro en la clave de partición para optimizar el enrutamiento de la consulta a la menor cantidad posible de particiones.
Use cargas de trabajo analíticas para las consultas más complejas. Si ejecuta agregaciones frecuentes o consultas de combinación en contenedores grandes, considere la posibilidad de habilitar el almacén analítico y realizar consultas en Azure Synapse Analytics.

Definiciones de directiva de Azure

Recursos adicionales

Considere más recursos relacionados con Azure Cosmos DB para NoSQL.

Guía del Centro de arquitectura de Azure

Guía de Cloud Adoption Framework

Pasos siguientes