Cómo aprovechar al máximo la capa gratuita de Azure Cosmos DB

Cosmos DB de Azure es una de sus mejores características. Una base de datos distribuida multimodelo, le brinda una base para crear aplicaciones verdaderamente nativas de la nube con una serie de modelos de coherencia que se pueden asignar a cómo funciona su aplicación. Pero no es fácil comenzar, y una aplicación mal configurada o diseñada puede resultar costosa rápidamente.

Es bueno ver que Cosmos DB ahora tiene un nivel gratuito que puede ayudarlo a comenzar a implementar aplicaciones fuera de un entorno de desarrollo limitado. El nuevo nivel no es grande: se basa en la configuración mínima de Cosmos DB y ofrece 400 RU / s (unidades de solicitud por segundo) y 5 GB de almacenamiento, con hasta 25 contenedores en una base de datos de rendimiento compartida. Eso es más que suficiente para una aplicación pequeña que ofrece más lecturas que escrituras, por ejemplo, y no depende de modelos de coherencia sólida.

Debe tener en cuenta que, aunque Cosmos DB es multirregional, solo puede ejecutar una única base de datos de 400 RU / s en el nivel gratuito. En la práctica, eso lo limita a una sola región, ya que las regiones adicionales necesitarán cada una su propia instancia de 400 RU / s, y se cobrarán a las tarifas estándar para esas regiones, por hora.

Introducción a Cosmos DB gratuito

Deberá crear una nueva cuenta para aprovechar el nivel gratuito; no está disponible como una opción de facturación en aplicaciones existentes. 400 RU / s del nivel gratuito es la cantidad más pequeña que se puede aprovisionar en una base de datos de Cosmos DB. Eso le da alrededor de mil millones de lecturas al mes, lo que debería ser suficiente para que su aplicación despegue o le permita implementar y ejecutar una base de datos distribuida interna como parte de un proyecto piloto. Una vez que llegue al límite de su asignación gratuita de RU / s, puede agregar más capacidad en bloques de 100 RU / s, facturados a una tarifa por hora.

Vale la pena comprender qué es una RU de base de datos de Cosmos. La RU es una unidad de solicitud, y la RU / s facturadas es una medida del rendimiento aprovisionado de su base de datos, que cubre todas sus operaciones. Eso incluye lecturas, escrituras, actualizaciones, eliminaciones y más. Microsoft sugiere que 1 RU / s equivale a una coherencia eventual (el nivel de coherencia más lento y menos intensivo en procesamiento disponible en Cosmos DB) por segundo de un elemento de 1 KB. Escribir el mismo elemento de 1 KB por segundo son 5 RU / s. Cuanto más compleja sea la operación, más RU / s consume.

Comprender el consumo de unidades de solicitud

Es difícil decir exactamente cuántas RU / s consumirá una aplicación. Sin embargo, puede pensar en las restricciones de Cosmos DB que pueden afectar las RU / s utilizadas por su base de datos. Primero, debe considerar el tamaño de sus artículos. Cuanto más grande sea el elemento, más RU / s utiliza para una lectura o una escritura. De manera similar, la indexación consume RU / s, y si usa el modelo de indexación predeterminado, los recursos necesarios para escribir elementos aumentarán a medida que agregue más a su base de datos. Luego está su elección de modelos de consistencia, con una obsolescencia fuerte y limitada que necesita aproximadamente el doble de RU / s para una lectura que los otros modelos menos estrictos de Cosmos DB.

Con un número limitado de RU / s disponibles en el nivel gratuito, es posible que desee evitar esas restricciones para mantener el consumo al mínimo. Una opción es desactivar toda la indexación de su base de datos, aunque en la práctica es posible que prefiera limitar la indexación a propiedades específicas en cada documento JSON almacenado. Al mismo tiempo, debe considerar cómo está funcionando su aplicación y si es mejor usar algo como la consistencia de la sesión para mejorar la percepción del usuario sobre el rendimiento y reducir las RU / s utilizadas.

Como las RU / s se basan en la actividad, puede utilizar el diseño de consultas para mantener el consumo al mínimo. Eso podría implicar limitar la cantidad de resultados por consulta, controlar la cantidad de datos que almacena o usar la menor cantidad posible de funciones definidas por el usuario, procedimientos almacenados y activadores.

Configurar su base de datos es bastante fácil. En Azure Portal, cree una nueva cuenta de Cosmos DB y desde Azure Data Explorer cree una nueva base de datos. Empiece por darle una identificación y luego aprovisione su rendimiento. Establezca esto en 400 RU / s. Las cantidades más altas mostrarán estimaciones de costos, pero como está configurando una instancia gratuita, no es necesario que pruebe esto. No está limitado al Portal; puede usar la CLI de Azure, PowerShell o incluso mediante programación desde el SDK de Cosmos DB.

Creación de aplicaciones en el nivel gratuito de Cosmos DB

En Cosmos DB, una base de datos es un conjunto de contenedores, que se utilizan para manejar la partición en una región de Azure y la distribución en las regiones en las que está usando su base de datos. Cada base de datos se puede configurar para ser un modelo específico: NoSQL (tanto MongoDB como Cassandra), SQL, Gremlin y tablas. La mayoría de las aplicaciones funcionarán con él como una base de datos de documentos NoSQL que almacena datos JSON.

Una vez que haya configurado una base de datos y elegido un modelo, puede pensar en un contenedor de Cosmos DB como la escala de la base de datos. Fuera del nivel gratuito, puede establecer el rendimiento en RU / s por contenedor; en el nivel gratuito, está compartiendo ese rendimiento en todos los contenedores de su base de datos, por lo que no puede predecir el rendimiento de ningún contenedor específico. Las instancias pagas tienen un SLA asociado, por lo que le permiten establecer el rendimiento por contenedor.

Trabajar en contenedores de esta manera es equivalente a usar un clúster en una base de datos NoSQL y funciona bien para este tipo de carga de trabajo. Al usar la misma clave de partición en todos sus contenedores, Cosmos DB compartirá automáticamente el rendimiento entre ellos. Puede utilizar este enfoque con los 25 contenedores del nivel gratuito para reducir los cuellos de botella para los usuarios de su aplicación. Si la trata como una base de datos NoSQL agrupada y fragmentada, le resultará relativamente fácil incluirla en sus aplicaciones, utilizándola para alojar punteros a otro contenido en lugar del contenido en sí.

Trabajar con una oferta de servicio gratuito puede ser complicado, pero si toma precauciones sensatas, debería ser posible utilizar el nuevo nivel de Cosmos DB como parte del back-end de una aplicación. Es posible que deba sacrificar algunas de las características de escalabilidad del servicio, pero eso no debería afectar a las aplicaciones de manera significativa si toma decisiones cuidadosas en el momento del diseño.

Es importante pensar en cómo aprovechar una base de datos distribuida como Cosmos DB en lugar de simplemente trasladar sus cargas de trabajo existentes a ella; es poco probable que sean una buena combinación. En su lugar, piense en esto como su oportunidad de crear una aplicación distribuida verdaderamente nativa de la nube. En este caso, 400 RU / s es más que suficiente para iniciar una nueva aplicación y hacer que funcione con un número razonable de usuarios.