Buenas prácticas en el diseño de la escalabilidad

LIBP-0074 (Libro de pautas)

A continuación se enumeran algunos aspectos a tener en cuenta a la hora de diseñar un sistema escalable

La escalabilidad es la propiedad deseable de un sistema, una red o un proceso, que:

  • Indica su habilidad para reaccionar y adaptarse sin perder calidad,

  • Maneja el crecimiento continuo de trabajo de manera fluida,

  • Esta preparado para hacerse más grande sin perder calidad en los servicios ofrecidos.

Existen dos tipos de escalabilidad en función de la manera de crecer del sistema:

  • Escalabilidad Vertical: consiste en añadir más recursos a un sólo nodo en particular dentro de un sistema, tal como el añadir memoria o un disco duro más rápido a una computadora.

  • Escalabilidad Horizontal: consiste en agregar más nodos a un sistema, tal como añadir una computadora nueva a un programa de aplicación para espejo.

En ningún otro momento de la vida de una aplicación puede tener mayor impacto una decisión sobre la escalabilidad de la aplicación que durante la fase de diseño.

Pautas

TítuloCarácter
Funcionamiento en modo asíncronoObligatoria
Uso de recursosRecomendada
Operaciones conmutablesObligatoria
Aplicaciones intercambiablesObligatoria
Recursos y actividadesRecomendada

Funcionamiento en modo asíncrono

Ejecutar las operaciones en modo asíncrono

Cuando algunas acciones tienen que esperar a que otras acciones devuelva un resultado para poder continuar, o verificar que una acción ha sido correcta para garantizar la atomicidad, se puede producir que los procesos queden esperando a que otro libere el recurso, de forma las aplicaciones están limitadas, los recursos se convierten en origen de contención que tiene un impacto negativo en la escalabilidad.

Un modo de lograr escalabilidad es ejecutando operaciones en modo asíncrono. Cuando se funciona asíncronamente, las operaciones de larga duración hacen cola para terminar más adelante en un proceso separado.

Uso de recursos

Utilizar los recursos tan tarde como sea posible y liberarlos tan pronto como sea posible

La contienda por los recursos es la causa raíz de todos los problemas de escalabilidad. Utilice los recursos tan tarde como sea posible y libérelos tan pronto como sea posible. Cuanto menor sea el tiempo que un proceso utiliza un recurso, antes estará disponible para otro proceso.

Operaciones conmutables

Diseñar aplicaciones conmutables para reducir la contención de recursos

Dos o más operaciones son conmutables si se pueden aplicar en cualquier orden y obtener el mismo resultado. Normalmente, las operaciones que se pueden ejecutar sin transacciones son candidatos probables. De esta manera, si cuando una operación necesita de un recurso que está siendo usado, se puede ejecutar otra en lugar de esperar a que se libere el recurso.

Diseñar aplicaciones conmutables suele ser uno de los modos que menos se tienen en cuenta a la hora de reducir la contención de recursos.

Aplicaciones intercambiables

Disponer de varios recursos iguales para poder disponer indistintamente de ellos en función de si están libres u ocupados

Para crear aplicaciones intercambiables es necesario disponer de varios recursos iguales y poder disponer indistintamente de ellos en función de si están libres u ocupados. De esta manera si se va a utilizar un recurso y éste está ocupado, el sistema es capaz de buscar otro que esté libre para realizar la operación, de manera que si hay recursos libres se utilizan estos en lugar de esperar a que el primero que se solicitó quede libre.

Recursos y actividades

Particionar recursos y actividades

Particionar los recursos y las actividades minimiza las relaciones entre estos, de manera que se minimiza el riesgo de crear cuellos de botella resultantes de que un participante de la relación tarde más que el otro.

Si se particionan las actividades se puede ayudar a aliviar la carga que coloque en recursos de coste elevado, ya que no todas las actividades tienen por qué requerir del recurso para funcionar correctamente. De esta forma podremos obtener dos actividades una que si lo utilice y otra que no y ahorrar de esta manera en el coste que la ejecución del recurso pueda suponer si no es realmente necesaria su ejecución.

Por otro lado, particionar no es siempre una buena opción ya que hace el sistema más complejo. Dividir recursos que tienen dependencias puede agregar sobrecarga a una operación.

Contenidos relacionados

Recursos
Área: Arquitectura » Arquitectura Tecnológica
Código Título Tipo Carácter
RECU-0220 Conceptos sobre la escalabilidad Referencia Recomendado
RECU-0747 Operaciones en modo asíncrono Ejemplo Recomendado