Sistemas distribuidos: caracterización, diseño, mensajes y tiempo (I)

Edu Salguero
5 min readFeb 25, 2018

--

Con este artículo abro una serie de cinco publicaciones breves relacionadas con los sistemas distribuidos.

Los materiales forman parte de una recopilación de notas y resúmenes personales escritos en 2015. Después de unos años he decidido sacarlos del cajón para poder refrescar conceptos relacionados y darle un poco de vida a la cuenta de Medium, que falta le hacía…

Photo by Markus Spiske

Caracterización de los Sistemas Distribuidos

Un sistema distribuido es aquel en el cual los componentes, localizados en equipos en red, se comunican y coordinan sus acciones mediante el envío de mensajes.

Esta definición presenta las siguientes características significativas de los sistemas distribuidos:

  • concurrencia de los componentes
  • falta de un reloj global
  • fallos independientes de los componentes

Los sistemas distribuidos presentan una serie de retos:

Heterogeneidad

Al hablar de heterogeneidad nos referimos a la variedad y diferencia que podemos encontrar en los elementos que componen una red de computadoras sobre la que se ejecuta un sistema distribuido. Dicha heterogeneidad no sólo se aplica a las redes y al hardware de las computadoras, sino también a los sistemas operativos, los lenguajes de programación y las implementaciones en las que trabajan los diferentes desarrolladores.

Herramientas:

  • Protocolos de comunicación
  • APIs estándar (Middleware)
  • Sistemas abiertos

Extensibilidad y apertura (openness)

Es la característica de un sistema que permite añadirle nuevas características y servicios de forma dinámica. Se consigue mediante una buena especificación y la publicación de las interfaces de los componentes.

Seguridad

Es el elemento más importante y más complejo principalmente debido a la existencia de conexiones y equipos físicamente distribuidos. Las técnicas de encriptación pueden ser utilizadas para proporcionar la adecuada protección a los recursos compartidos cuando se transmite mediante la red. Los ataques DOS siguen siendo un problema de seguridad.

Escalabilidad

Un sistema es escalable si el aumento de demanda de servicios se puede suplir con una aportación de recursos, siempre y cuando el coste de añadir un usuario sea constante.

Los algoritmos utilizados para acceder a datos compartidos deben evitar cuellos de botella de rendimiento y los datos deben estar jerarquizados para proporcionar los mejores tiempos de acceso. Habitualmente los datos pueden estar replicados.

Herramientas:

  • Uso de software eficiente en tiempo y espacio
  • Patrones de diseño y de código para manejar eficientemente conexiones, threads, etc.
  • Uso de cachés, consistencia eventual, replicación, balanceo de carga.

Manejo de fallos

El rango de fallos en sistemas distribuidos es mayor que en cualquier otro sistema. Además, es interesante que los sistemas distribuidos «toleren» fallos.

Técnicas comunes:

  • Detección de fallos.
  • Enmascaramiento de fallos.
  • Tolerancia a fallos.
  • Recuperación frente a fallos.
  • Redundancia.

Concurrencia

Un sistema permite la concurrencia cuando provee recursos que pueden ser compartidos por varios clientes al mismo tiempo.

El control de concurrencia trata con los problemas de aislamiento y consistencia del procesamiento de transacciones. El control de concurrencia de un sistema distribuido asegura que la consistencia de los datos que se almacenan y que se procesan en el sistema se mantienen en un ambiente distribuido multiusuario.

Las técnicas habituales para asegurar un control de la concurrencia son semáforos, hilos, locks, etc. Herramientas como el uso de cachés, consistencia eventual, replicación, balanceo de carga ayudan a abordar el reto de la concurrencia.

Transparencia

Se dice que un sistema distribuido es transparente, cuando este es capaz de presentarse ante los usuarios y las aplicaciones como si fuese un sistema que corre en una sola computadora, y no como un sistema cuyos procesos y recursos están distribuidos físicamente en varias computadoras.

QoS (Quality of service)

No es suficiente con proporcionar acceso a los servicios, es importante también que este se ofrezca con unas garantías con respecto a las cualidades asociadas con dicho acceso al servicio. Dichas cualidades incluyen parámetros como rendimiento, seguridad y fiabilidad.

Modelado

Existen tres importantes y complementarias vías para el diseño de sistemas distribuidos:

Modelos físicos

Es la manera más explícita que describe un sistema, este toma la composición hardware y sus interconexiones.

Modelos arquitectónicos

Describe un sistema en términos de las tareas computacionales y de comunicación. En este modelo existen una serie de elementos arquitectónicos:

Entidades de comunicación:

Comúnmente son procesos que se comunican mediante:

  • Objetos.
  • Componentes.
  • Servicios Web.

Paradigmas de comunicación:

  • Comunicación entre procesos.
  • Invocación remota.
  • Comunicación indirecta.

Roles y responsabilidades:

Existen dos estilos arquitectónicos:

  • Modelo cliente-serviddor.
  • Comunicación de pares o peer-to-peer.

Ubicación/distribución:

Se refiere a como las entidades como objetos o servicios son distribuidos en la infraestructura física subyacente. La ubicación es crucial en la determinación de las propiedades del sistema distribuido. Afecta a aspectos tales como el rendimiento, fiabilidad y seguridad. Existen varios modelos:

  • Mapeo de servicios a múltiples servidores.
  • Caching.
  • Código móvil.
  • Agentes móviles.

Existen varios patrones arquitectónicos primitivos:

  • Capas.
  • Niveles.
  • Clientes ligeros.
  • Otros: proxy, reflection, brokerage (existencia de un broker).

Modelos fundamentales

Proporciona una perspectiva abstracta para permitir examinar aspectos individuales de un sistema distribuido. Estos aspectos son:

  • Modelos de interacción.
  • Modelos de fallos.
  • Modelos de seguridad.

Comunicación entre procesos

El envío de mensajes entre un par de procesos puede ser soportado por dos operaciones básicas: enviar y recibir.

Conceptos importante relacionados con la comunicación son:
- Sincronía y asincronía: en sincronía las operaciones de envio y recepción son bloqueantes mientras que en la forma asíncrona el uso de la operación enviar no bloquea el proceso.
- Destino de los mensajes: los mensajes son enviados al par formado por una dirección de internet y un puerto.
- Fiabiliad: una comunicación es fiable en términos de valided e integridad.
- Orden: algunas aplicaciones requieren que los mensajes sean entregados en el orden de envío, la entrega fuera de ese orden es considerado como un fallo.

Tiempo y estados globales

En un sistema distribuido el estado global se encuentra distribuido entre los nodos, dichos nodos tienen un reloj estándar y puede haber retardos en las comunicaciones lo cual puede provocar que cada nodo tenga una visión subjetiva del estado global.

Para dar una solución a este problema podríamos disponer de un reloj centralizado y preciso, pero esto no es viable por lo que la solución pasa por el tiempo distribuido. El tiempo distribuido se basa en el tiempo físico local y el tiempo lógico definido por la causalidad de los eventos.

El tiempo físico puede ser sincronizado mediante sincronización externa (se ajusta el valor a un tiempo de referencia) o interna (se realiza una sincronización dentro del sistema) que permite ordenar eventos. Existen varios algoritmos de sincronización interna:

El tiempo lógico permite ordenar los eventos de los diferentes nodos cuando la precisión de los relojes no nos permite usar el tiempo físico. Esto se apoya en la relación de causalidad entre dos eventos. Dos posibles aproximaciones:

  • Relojes de Lamport: permite establecer una relación de ordenación causal total mediante el uso de un simple contador que se incrementa monótonamente en cada proceso.
  • Relojes vectoriales: añaden a cada proceso información acerca de los relojes lógicos del resto de procesos mediante la incorporación de un vector de N entradas para cada uno de los N procesos. Permite resolver la causalidad o concurrencia de dos eventos cualesquiera permitiendo la ordenación parcial entre ellos.

En la siguiente publicación se tratarán los conceptos de coordinación y acuerdo.

Fuentes

--

--