Descripción
Los sistemas de computación en la nube son ejemplos de sistemas escalables en los que cada aplicación podría llegar a utilizar un alto número de recursos, en función de la carga que vaya soportando en cada momento. Para lograr esa escalabilidad se debe utilizar de manera apropiada un conjunto de estrategias de replicación de componentes, combinadas con el diseño de algoritmos descentralizados, la distribución de los datos persistentes entre los nodos participantes y el uso de mecanismos de comunicación asíncrona. Esto permitirá distribuir la responsabilidad de la gestión de datos y tareas entre múltiples nodos que colaborarán sin necesidad de sincronizarse o bien minimizando el número de puntos en los que alguna sincronización sea necesaria.
Las necesidades de sincronización dependen también del grado de consistencia que se desee mantener entre la información gestionada por cada uno de los nodos servidores. Por tanto, para conseguir una alta escalabilidad habrá que utilizar algún modelo relajado de consistencia. La consistencia relajada también permitirá superar algunas situaciones de división de la red de comunicaciones, según se enuncia en el teorema CAP.
Los servicios elásticos pueden considerarse una evolución de los servicios escalables. Para ello, un servicio escalable debe tener también una gestión autónoma. Para lograrla se utilizarán algunos mecanismos de monitorización del rendimiento actual de los nodos en los que se haya desplegado cada aplicación, combinados con estrategias adecuadas para equilibrar la carga. Además, cuando dicha carga vaya disminuyendo se reducirá el número de nodos utilizados por la aplicación, minimizando así el consumo de recursos.
Los principios que se acaban de exponer en los párrafos anteriores condicionan el diseño y la arquitectura de servicios distribuidos escalables, potencialmente elásticos. Este seminario describe esos principios y los aplica sobre algunos ejemplos prácticos.