Escalado de contenedores y aplicaciones sin servidor
Sugerencia
Este contenido es un extracto del libro electrónico “Architecting Cloud Native .NET Applications for Azure” (Diseño de la arquitectura de aplicaciones .NET nativas en la nube para Azure), disponible en Documentos de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Hay dos maneras de escalar una aplicación: vertical o horizontalmente. La primera hace referencia a la adición de capacidad a un único recurso, mientras que la segunda hace referencia a la adición de más recursos para aumentar la capacidad.
La solución sencilla: escalado vertical
La actualización de un servidor host existente con CPU, memoria, velocidad de E/S de disco y velocidad de E/S de red incrementadas se conoce como escalado vertical. Escalar verticalmente una aplicación nativa de la nube implica elegir recursos más capaces del proveedor de la nube. Por ejemplo, puede crear un nuevo grupo de nodos con máquinas virtuales más grandes en el clúster de Kubernetes. A continuación, migre los servicios contenedorizados al nuevo grupo.
Las aplicaciones sin servidor se escalan verticalmente eligiendo el plan premium de Functions o los tamaños de instancia premium de un plan de servicio de aplicación dedicado.
Escalado horizontal de aplicaciones nativas de la nube
Las aplicaciones nativas de la nube a menudo experimentan grandes fluctuaciones en la demanda y requieren escalado en un momento dado. Favorecen el escalado horizontal. El escalado horizontal se realiza agregando máquinas adicionales (denominadas nodos) o instancias de aplicación a un clúster existente. En Kubernetes, puede escalar manualmente ajustando las opciones de configuración para la aplicación (por ejemplo, escalando un grupo de nodos) o mediante el escalado automático.
Los clústeres de AKS pueden escalar automáticamente de una de estas dos maneras:
En primer lugar, el Horizontal Pod Autoscaler supervisa la demanda de recursos y escala automáticamente las réplicas de pods para satisfacerla. Cuando aumenta el tráfico, se aprovisionan automáticamente réplicas adicionales para escalar horizontalmente los servicios. Del mismo modo, cuando disminuye la demanda, se quitan para desescalar horizontalmente los servicios. Defina la métrica en la que se va a escalar, por ejemplo, el uso de CPU. También puede especificar el número mínimo y máximo de réplicas que se ejecutarán. AKS supervisa esa métrica y escala en consecuencia.
A continuación, la característica AKS Cluster Autoscale le permite escalar automáticamente los nodos de ejecución en un clúster de Kubernetes para satisfacer la demanda. Con ella puede agregar automáticamente nuevas máquinas virtuales al conjunto de escalado de máquinas virtuales de Azure subyacente siempre que se requiera más capacidad de proceso. También quita los nodos cuando ya no son necesarios.
En la figura 3-11 se muestra la relación entre estos dos servicios de escalado.
Figura 3-11. Escalado horizontal de un plan de App Service.
En conjunto, ambos garantizan un número óptimo de instancias de contenedor y nodos de ejecución para admitir la demanda fluctuante. El escalador automático horizontal de pods optimiza el número de pods necesarios. El escalador automático de clústeres optimiza el número de nodos necesarios.
Escalado de Azure Functions
Azure Functions se escala horizontalmente de forma automática bajo demanda. Los recursos del servidor se asignan y quitan dinámicamente en función del número de eventos desencadenados. Solo se le cobrará por los recursos de proceso consumidos cuando se ejecuten las funciones. La facturación se basa en el número de ejecuciones, el tiempo de ejecución y la memoria usada.
Aunque el plan de consumo predeterminado proporciona una solución económica y escalable para la mayoría de las aplicaciones, la opción premium permite a los desarrolladores flexibilidad para requisitos personalizados de Azure Functions. La actualización al plan Premium proporciona control sobre los tamaños de instancia, las instancias previamente templadas (para evitar retrasos en el arranque en frío) y las máquinas virtuales dedicadas.