En informática , la elasticidad se define como "el grado en el que un sistema es capaz de adaptarse a los cambios de carga de trabajo mediante el aprovisionamiento y desaprovisionamiento de recursos de manera autónoma , de modo que en cada momento los recursos disponibles coincidan lo más posible con la demanda actual". [1] [2] La elasticidad es una característica definitoria que diferencia la computación en la nube de los paradigmas de computación distribuida propuestos anteriormente , como la computación en red . La adaptación dinámica de la capacidad, por ejemplo, alterando el uso de los recursos informáticos , para satisfacer una carga de trabajo variable se denomina "computación elástica". [3] [4]
En el mundo de los sistemas distribuidos existen diversas definiciones según los autores, algunas considerando los conceptos de escalabilidad una subparte de la elasticidad, otras como algo distinto.
Ilustremos la elasticidad con un ejemplo sencillo de un proveedor de servicios que desea ejecutar un sitio web en una nube IaaS . En un momento dado , el sitio web no es popular y una sola máquina (normalmente una máquina virtual ) es suficiente para atender a todos los usuarios de la web. En otro momento , el sitio web se vuelve popular de repente, por ejemplo, como resultado de una multitud repentina , y una sola máquina ya no es suficiente para atender a todos los usuarios. Según la cantidad de usuarios web que acceden simultáneamente al sitio web y los requisitos de recursos del servidor web , es posible que se necesiten diez máquinas. Un sistema elástico debería detectar esta condición de inmediato y proporcionar nueve máquinas adicionales desde la nube, de modo de atender a todos los usuarios web de manera receptiva.
En ese momento , el sitio web se vuelve impopular nuevamente. Las diez máquinas que están asignadas actualmente al sitio web están en su mayoría inactivas y una sola máquina sería suficiente para atender a los pocos usuarios que acceden al sitio web. Un sistema elástico debería detectar esta condición de inmediato y desaprovisionar nueve máquinas y liberarlas en la nube.
La elasticidad tiene como objetivo hacer coincidir la cantidad de recursos asignados a un servicio con la cantidad de recursos que realmente necesita, evitando el aprovisionamiento excesivo o insuficiente. El aprovisionamiento excesivo , es decir, la asignación de más recursos de los necesarios, debe evitarse ya que el proveedor de servicios a menudo tiene que pagar por los recursos que se asignan al servicio. Por ejemplo, una instancia extragrande Amazon EC2 M4 cuesta 0,239 USD /hora. Si un servicio ha asignado dos máquinas virtuales cuando solo se necesita una, el proveedor de servicios desperdicia 2095 USD cada año. Por lo tanto, los gastos del proveedor de servicios son más altos de lo óptimo y sus ganancias se reducen.
Se debe evitar el aprovisionamiento insuficiente , es decir, la asignación de menos recursos de los necesarios, ya que de lo contrario el servicio no puede prestar un buen servicio a sus usuarios. En el ejemplo anterior, el aprovisionamiento insuficiente del sitio web puede hacer que parezca lento o inaccesible. Los usuarios web acaban desistiendo de acceder a él, por lo que el proveedor del servicio pierde clientes. A largo plazo, los ingresos del proveedor disminuirán, lo que también reducirá sus beneficios.
Un problema potencial es que la elasticidad lleva tiempo. El usuario puede adquirir una máquina virtual (VM) en la nube en cualquier momento; sin embargo, puede llevar varios minutos que la VM adquirida esté lista para usarse. El tiempo de inicio de la VM depende de factores como el tamaño de la imagen, el tipo de VM, la ubicación del centro de datos, la cantidad de VM, etc. [5] Los proveedores de la nube tienen diferentes rendimientos de inicio de VM. Esto implica que cualquier mecanismo de control diseñado para aplicaciones elásticas debe considerar en su proceso de decisión el tiempo necesario para que las acciones de elasticidad surtan efecto, [6] como el aprovisionamiento de otra VM para un componente de aplicación específico.
Las aplicaciones elásticas pueden asignar y desasignar recursos (como máquinas virtuales) a pedido de componentes de aplicaciones específicos. Esto hace que los recursos de la nube sean volátiles, y las herramientas de monitoreo tradicionales que asocian datos de monitoreo con un recurso particular (es decir, máquina virtual), como Ganglia o Nagios , ya no son adecuadas para monitorear el comportamiento de aplicaciones elásticas. Por ejemplo, durante su vida útil, un nivel de almacenamiento de datos de una aplicación elástica puede agregar y eliminar máquinas virtuales de almacenamiento de datos debido a los requisitos de costo y rendimiento, lo que varía la cantidad de máquinas virtuales utilizadas. Por lo tanto, se necesita información adicional para monitorear aplicaciones elásticas, como asociar la estructura lógica de la aplicación sobre la infraestructura virtual subyacente. [7] Esto, a su vez, genera otros problemas, como cómo agregar datos de múltiples máquinas virtuales para extraer el comportamiento del componente de la aplicación que se ejecuta sobre esas máquinas virtuales, ya que es posible que sea necesario agregar diferentes métricas de manera diferente (por ejemplo, se podría promediar el uso de la CPU, se podría sumar la transferencia de red).
Al implementar aplicaciones en infraestructuras en la nube (IaaS/PaaS), se deben tener en cuenta los requisitos de las partes interesadas para garantizar un comportamiento adecuado de la elasticidad. Si bien tradicionalmente se intentaría encontrar el equilibrio óptimo entre costo y calidad o rendimiento, para los usuarios de la nube del mundo real, los requisitos con respecto al comportamiento son más complejos y apuntan a múltiples dimensiones de elasticidad (por ejemplo, SYBL [8] ).
Las aplicaciones en la nube pueden ser de distintos tipos y complejidades, con múltiples niveles de artefactos implementados en capas. El control de dichas estructuras debe tener en cuenta una variedad de cuestiones, un enfoque en este sentido es rSYBL. [9] Para el control de múltiples niveles, los sistemas de control deben considerar el impacto que tiene el control de nivel inferior sobre los de nivel superior y viceversa (por ejemplo, controlar máquinas virtuales, contenedores web o servicios web al mismo tiempo), así como los conflictos que pueden aparecer entre varias estrategias de control de varios niveles. [10] Las estrategias elásticas en las nubes pueden aprovechar los métodos de teoría de control (por ejemplo, el control predictivo se ha experimentado en escenarios de la nube y ha demostrado ventajas considerables con respecto a los métodos reactivos). [11]
{{cite book}}
: Mantenimiento CS1: fecha y año ( enlace )