¿Por qué es necesario sincronizar los sistemas distribuidos? ¿Cuáles son los componentes necesarios para la sincronización?
Hay esta frase en el sitio web oficial de Zookeeper: ZooKeeper es un servicio centralizado para mantener información de configuración, nombrar, proporcionar sincronización distribuida y proporcionar servicios grupales. Esto describe aproximadamente lo que Zookeeper puede hacer principalmente: Gestión de configuración. , servicio de nombres, proporciona sincronización distribuida y gestión de clústeres. Entonces, ¿qué son exactamente estos servicios? ¿Por qué necesitamos un servicio así? ¿Por qué deberíamos usar Zookeeper para lograr esto? ¿Cuáles son las ventajas de usar Zookeeper? A continuación, presentaré uno por uno cuáles son y qué sistemas de código abierto se utilizan. Además del código, la gestión de la configuración en nuestras aplicaciones también incluye varias configuraciones. Por ejemplo, conexión a base de datos, etc. Generalmente, utilizamos archivos de configuración para introducir estos archivos de configuración en el código. Pero cuando tenemos solo una configuración y un servidor, y no se modifica con frecuencia, es una buena práctica usar archivos de configuración, pero si tenemos muchas configuraciones, muchos servidores necesitan esta configuración y puede ser dinámica. por lo tanto, no es una buena idea utilizar archivos de configuración. En este momento, a menudo necesitamos encontrar una manera de administrar la configuración de forma centralizada. Modificamos la configuración en este lugar centralizado y todos los que estén interesados en esta configuración pueden obtener los cambios. Por ejemplo, podemos poner la configuración en la base de datos y luego todos los servicios que deben configurarse van a esta base de datos para leer la configuración. Sin embargo, debido a que el funcionamiento normal de muchos servicios depende en gran medida de esta configuración, el servicio que proporciona servicios de configuración centralizados debe tener una alta confiabilidad. Generalmente, podemos usar un clúster para proporcionar este servicio de configuración, pero si se usa un clúster para mejorar la confiabilidad, ¿cómo garantizar la coherencia de la configuración en el clúster? En este momento, debe utilizar un servicio que implemente un protocolo de coherencia. Zookeeper es un servicio de este tipo que utiliza el protocolo de coherencia Zab para proporcionar coherencia. Muchos proyectos de código abierto ahora usan Zookeeper para mantener las configuraciones. Por ejemplo, en HBase, el cliente se conecta a Zookeeper y obtiene la información de configuración del clúster HBase necesaria antes de que se puedan realizar más operaciones. En la cola de mensajes de código abierto Kafka, Zookeeper también se utiliza para mantener la información del corredor. Zookeeper también se usa ampliamente en el marco SOA de código abierto Dubbo de Alibaba para administrar algunas configuraciones para lograr la gobernanza del servicio. Servicio de nombres El servicio de nombres es fácil de entender. Por ejemplo, para acceder a un sistema a través de la red, necesitamos conocer la dirección IP de la otra parte, pero las direcciones IP son muy hostiles para las personas. En este momento, necesitamos usar nombres de dominio para acceder. Pero la computadora no puede tener otro nombre de dominio. ¿Qué hacer? Si tenemos un mapeo de nombre de dominio a dirección IP en cada máquina, esto puede resolver parte del problema, pero ¿qué pasa si la IP correspondiente al nombre de dominio cambia? Entonces tenemos DNS. Sólo necesitamos visitar un punto conocido, y éste te dirá cuál es la IP correspondiente a este nombre de dominio. También habrá muchos problemas de este tipo en nuestras aplicaciones, especialmente cuando tenemos muchos servicios. Será muy inconveniente si guardamos la dirección del servicio localmente, pero si solo necesitamos acceder a puntos de acceso conocidos, proporcionemos un. Entrada unificada, por lo que el mantenimiento será mucho más sencillo. De hecho, los bloqueos distribuidos se presentaron en el primer artículo. Zookeeper es un servicio de coordinación distribuido. De esta forma, podemos utilizar Zookeeper para coordinar actividades entre múltiples procesos distribuidos. Por ejemplo, en un entorno distribuido, para mejorar la confiabilidad, se implementa el mismo servicio en cada servidor de nuestro clúster. Sin embargo, si cada servidor del clúster realiza una cosa, será necesario coordinarlo entre sí y la programación será muy complicada. Y si sólo dejamos operar un servicio, hay un único punto.
Otro enfoque común es utilizar bloqueos distribuidos, permitiendo que solo un servicio funcione en un momento determinado. Cuando este servicio tiene un problema, el bloqueo se libera e inmediatamente conmuta por error a otro servicio. Esto se hace en muchos sistemas distribuidos. Este diseño tiene un nombre mejor llamado Elección de Líder. Por ejemplo, Master de HBase utiliza este mecanismo. Pero cabe señalar que los bloqueos distribuidos siguen siendo diferentes de los bloqueos en el mismo proceso, por lo que deben usarse con más precaución que los bloqueos en el mismo proceso. Gestión de clústeres En un clúster distribuido, algunos nodos a menudo entran y salen debido a diversas razones, como fallas de hardware, fallas de software y problemas de red. Los nuevos nodos se unen y los antiguos salen del clúster. En este momento, otras máquinas en el clúster deben sentir este cambio y luego tomar las decisiones correspondientes en función de este cambio. Por ejemplo, somos un sistema de almacenamiento distribuido con un nodo de control central responsable de la asignación de almacenamiento. Cuando llega nuevo almacenamiento, debemos asignar nodos de almacenamiento según el estado actual del clúster. En este momento necesitamos percibir dinámicamente el estado actual del clúster. Además, por ejemplo, en una arquitectura SOA distribuida, los servicios son proporcionados por un clúster. Cuando los consumidores acceden a un servicio, necesitan utilizar algún mecanismo para descubrir qué nodos pueden proporcionar actualmente el servicio (esto también se denomina descubrimiento de servicios, por ejemplo). (, el marco SOA de código abierto de Alibaba, Dubbo, utiliza Zookeeper como mecanismo subyacente para el descubrimiento de servicios). La cola Kafka de código abierto utiliza Zookeeper como gestión en línea y fuera de línea de Cosnumer. Posdata En este artículo, enumeramos algunos servicios que Zookeeper puede proporcionar y damos algunos ejemplos en sistemas de código abierto. Más adelante comenzaremos con la instalación y configuración de Zookeeper y usaremos ejemplos para presentar con más detalle cómo usar Zookeeper. (Reimpreso)