Programación de la nube
El diseño de programas destinados a la nube requiere consideraciones especiales. En función del tipo de aplicación y la carga esperada, los desarrolladores pueden aprovechar algunas de las características proporcionadas por los proveedores de servicios en la nube para mejorar la escalabilidad y el mantenimiento de los programas. El uso de sistemas de escalado automático y equilibradores de carga permite a los desarrolladores aumentar o reducir la infraestructura de forma dinámica en función del uso de hardware o de un factor de carga calculado por el programa.
Hay varias consideraciones que un desarrollador debe tener en cuenta al desarrollar o migrar una aplicación a la nube, especialmente las que afectan al rendimiento y la seguridad.
Factores de rendimiento para aplicaciones en la nube
El entorno de un centro de datos centrado en la nube es diferente de lo que los desarrolladores podrían usar al diseñar e implementar aplicaciones en la infraestructura en propiedad. A algunos desarrolladores les resulta difícil optimizar o mejorar el rendimiento de sus aplicaciones, ya que no tienen acceso al diseño físico del hardware o especificaciones en nubes públicas. Se intentará enumerar algunas de las principales preocupaciones, con especial atención a los factores que afectan al rendimiento de la aplicación en la nube:
Latencia y ancho de banda de recursos
La principal preocupación por el desarrollo y la implementación de aplicaciones en la nube es la latencia. Los desarrolladores deben planear sus aplicaciones teniendo en cuenta los estrictos requisitos de latencia. Un enfoque consiste en compilar la distribución de las ubicaciones de los clientes. Esto permitirá a los desarrolladores encontrar el conjunto óptimo de ubicaciones de centros de datos que se pueden usar para optimizar el rendimiento y la capacidad de respuesta del usuario final. Esto es especialmente cierto en aplicaciones web, donde las solicitudes HTTP individuales de contenido web estático pueden representar una fracción importante de los tiempos de carga de la página web.
Además de la latencia, las aplicaciones también pueden tener requisitos de ancho de banda estrictos, especialmente las que se ocupan de contenido multimedia enriquecido como audio y vídeo. Muchos proveedores de nube permiten a los desarrolladores de la nube especificar los parámetros de rendimiento durante el aprovisionamiento en forma de requisitos de IOPS para los recursos de proceso y almacenamiento. Además, muchos proveedores de nube permiten a los desarrolladores configurar redes virtuales. La implementación y la adopción de redes y almacenamiento definidos por software (que se describen en módulos posteriores) proporcionan información adicional sobre las técnicas más recientes usadas por los centros de recursos para administrar el tráfico de varios clientes, a la vez que administran los requisitos individuales como especifican los SLO de cliente.
Las técnicas mencionadas anteriormente se destinan principalmente al contenido estático. Un problema mucho más difícil es optimizar la latencia de acceso a los sistemas de almacenamiento de datos distribuidos, especialmente aquellos que tienen que controlar las escrituras y actualizaciones. Se verá algo más sobre estos aspectos en los módulos posteriores.
Multiempresa
Las aplicaciones que se ejecutan en centros de datos públicos se suelen ejecutar en una infraestructura compartida. Este aspecto de servicios en la nube genera varios problemas importantes. Aunque las tecnologías de virtualización modernas proporcionan un entorno aislado en términos de seguridad y entorno de la aplicación, normalmente no pueden garantizar el aislamiento del rendimiento. Por lo tanto, los recursos virtualizados en nubes no pueden garantizar un rendimiento coherente en todo momento. El rendimiento de un recurso en un momento dado es una función de la carga total de los recursos de todos los inquilinos, también conocido como la interferencia que experimentan otros inquilinos que comparten el mismo hardware.
Algunos proveedores en la nube, como Azure, proporcionan a los clientes la capacidad de aprovisionar determinados tipos de recursos (como máquinas virtuales) en hardware dedicado. Esto proporciona protección contra las fluctuaciones amplias en el rendimiento de los recursos, lo que ofrece un rendimiento bastante coherente para los recursos; pero las instancias de hardware dedicadas cuestan mucho más que las instancias a petición normales, ya que Azure debe asignar un servidor exclusivamente para los recursos.
Un aspecto relacionado del multiinquilino es el problema de variación de aprovisionamiento, donde las solicitudes idénticas de recursos virtuales en nubes públicas no se asignan de forma idéntica a los recursos físicos, lo que provoca una variación en el rendimiento.1 Por ejemplo, dos solicitudes idénticas para máquinas virtuales (VM1
y VM2
) se pueden enrutar a dos máquinas físicas diferentes (A
y B
). La máquina física A podría tener otros cuatro inquilinos que compiten por los recursos en el mismo equipo, mientras que la máquina B es posible que solo tenga dos. Al cliente se le cobra igual por las máquinas virtuales VM1
y VM2
, pero puede que experimente diferencias de rendimiento entre dichas máquinas.
Configuración de seguridad
Las nubes públicas están sujetas a un aumento de los vectores de ataque, como vimos en la unidad 1. Los desarrolladores deben tener mucha precaución para asegurarse de que siguen las prácticas recomendadas, los protocolos y los procedimientos al implementar y mantener aplicaciones en la nube. Como resultado, es posible que se experimenten sobrecargas de rendimiento adicionales debido al uso de protocolos de seguridad exigidos por nubes públicas.
Dado que estos protocolos se han analizado en un módulo anterior, no se analizarán de nuevo en detalle. Cualquier código implementado en una nube pública debe pasar por un proceso estricto de revisiones de código fuente manuales y automatizadas, así como de análisis estáticos, y también análisis de vulnerabilidades y pruebas de penetración dinámicas. En la página siguiente se muestran las directrices para implementar aplicaciones de forma segura.
Referencias
- Rehman, M.S y Sakr, M.F (2010). Initial Findings for Provisioning Variation in Cloud Computing (Conclusiones iniciales para el aprovisionamiento de la variación en la informática en la nube), en la 2.ª conferencia internacional IEEE de 2010 sobre ciencia y tecnología de la informática en la nube (CloudCom).