Arquitectura cotillaArquitectura cotilla es un framework desarrollado por Ladin et al. [1992] para la implementación de servicios de alta disponibilidad. El nombre viene dado por el hecho de que los distintos gestores de réplicas “cotillean” (intercambian mensajes periódicamente) para informar al resto de las actualizaciones que han recibido de los clientes.[1][2][3] Un servicio cotilla dispone de dos tipos de operaciones:
En general, el sistema tiene que garantizar:
FasesEs importante destacar que los frontales envían la petición de los clientes a un gestor de su elección, siempre y cuando éste esté disponible y tenga tiempos de respuesta razonables. En este proceso se distinguen las siguientes fases:
Marcas temporalesComo ya sabemos, en la arquitectura cotilla (gossip) los front-end (FE) envían "queries" y "update" a un replica manager (RM) seleccionado, además garantiza que cada cliente obtiene un servicio con integridad en el tiempo y entre las réplicas. Para la resolución de consistencia, conflictos de versiones y propagación de estados u operaciones entre réplicas, cuando se produce una partición en el sistema, esta arquitectura utiliza los relojes vectoriales (vectores de marcas de tiempo). El proceso que sigue para la detección y resolución de conflictos es:
Un servicio basado en la arquitectura cotilla mejora la escalabilidad convirtiendo a la mayor parte de las réplicas en réplicas de solo lectura, sobre todo cuando el ratio de actualizaciones/lectura es pequeño. En dichas circunstancias las réplicas de solo lectura deben estar situadas cerca de los grupos de clientes y las actualizaciones deben ser recibidas por un grupo relativamente pequeño replica managers. Bajo estas circunstancias el trafico se reduce ya que las réplicas de solo lecuta no propagan mensajes "gossip" y los vectores de tiempo solo necesitan contener entradas para las réplicas actualizadas. Mensajes usadosPara explicar de manera más detallada como funciona todo este sistema, también se pueden considerar las marcas temporales y estructuras de datos que los gestores de réplicas y frontales poseen para mantener las garantías de ordenación de actualización, utilizándose para explicar cómo los gestores procesan las consultas y actualizaciones: Cada frontal tiene un vector de marcas temporales con la última versión de los datos a la que accedió (prev). El frontal adjunta prev, que contiene una entrada por cada gestor, a cada mensaje de petición a un gestor, junto con el tipo de petición (update o query).
En ambos casos, para actualizar sus versiones, el gestor intercambia mensajes de cotilleo (gossip) con otros gestores. Cuando un gestor devuelve un valor como resultado de una consulta, proporciona a su vez un nuevo vector de marcas temporales (new), debido a que es posible que las réplicas hayan sido actualizadas desde la última operación. De manera similar, una actualización también proporciona un nuevo vector (Update ID) único a la actualización. Cada marca temporal que se recibe se fusiona con la anterior para registrar la versión de los datos replicados observados por el cliente. Los clientes intercambian información accediendo al mismo servicio cotilla y comunicándose directamente entre sí. En conclusión, con este sistema se consigue una alta disponibilidad al responder al frontal lo más rápido posible y posteriormente propagar los cambios al resto de réplicas. No obstante, la necesidad de varias estructuras de datos, y de un tráfico importante de mensajes para mantener a los gestores de réplicas actualizados conlleva que surjan problemas de escalabilidad. Referencias
|
Portal di Ensiklopedia Dunia