El proceso principal para elegir Zookeeper, combinando teoría y código fuente, ¡simplemente lea este artículo!
Como registro predeterminado del ecosistema Dubbo, Zookeeper se ha utilizado con mucha frecuencia. Aunque Alibaba lanzó nacos más tarde, es innegable que ZK sigue siendo muy bueno. Producto de código abierto y un muy buen reemplazo del registro.
ZK tiene muchas funciones. Este artículo presenta principalmente el proceso de selección del maestro de ZK (hay tres mil bellezas en el harén, solo te prefiero a ti)
Para hablar sobre el. En el proceso de selección del maestro, primero debemos comprender qué nodos tiene ZK y qué funciones desempeñan estos nodos.
El propio ZK se divide en tres tipos de nodos:
Líder: principal responsable de escribir datos, si más de la mitad están de acuerdo, transmitirá la escritura
Seguidor: Principalmente responsable de consultar Solicitar y enviar solicitudes de escritura al líder, participar en las elecciones y escribir votos
Observar: también responsable de consultar solicitudes y enviar solicitudes de escritura al líder, no participa en la votación; y solo recibe resultados pasivamente;
El nodo que obtiene más de la mitad de los votos se convierte en el nodo líder.
Hay un criterio para todo, lo bueno es mejor que lo malo, lo malo es mejor que lo peor. No hay dolor en el mundo. El dolor es el resultado de buscarlo, Haiyan. pequeño. Ups, te escapaste.
Existen tres indicadores o dimensiones al comparar ZK:
(1) Plazo
(2) ID de transacción (ID de transacción en ZK)
(3) Número de nodos (el número de cada nodo en el clúster)
Con base en los tres indicadores anteriores, se puede sacar la conclusión final: elija el que tenga un término mayor y elija el ID de transacción para el mismo término. Mayor, si los dos primeros son iguales, elija el que tenga mayor número de nodos.
¿Es así de sencillo? Sí. Las reglas son muy simples, pero el código fuente sigue siendo muy complicado.
El código fuente parece aburrido, pero como artesano, ¿cómo es posible que no sepas cómo hacerlo? Primero solucionemos el proceso del código para que todos puedan ver mejor el contenido de la cuarta parte. .
El nodo primero vota por sí mismo y luego transmite
El nodo recibe el mensaje en un bucle interno
Después de recibir el mensaje
Si el mensaje está vacío, reenvíelo o establezca una conexión.
Si el mensaje no está vacío y el receptor del mensaje y el líder de votación son nodos legítimos, vaya al siguiente paso.
Si el nodo es un nodo de búsqueda
Compare el voto del nodo actual con el voto recibido para determinar si es necesario enviarlo nuevamente y registre el voto
Juzgue cada uno El número de votos registrados veces, si más de la mitad de los votos, el estado del nodo está establecido
La lógica de seleccionar un líder comienza al comienzo de lookForLeader, al igual que la primera parte de la pirámide. La lógica de seleccionar un líder comienza desde lookForLeader, al igual que el primer ladrillo de la pirámide. Primero veamos el primer ladrillo de la selección lookForLeader de ZK. Cuando miremos el código fuente por primera vez, asegúrese de comprender la línea principal. Ignore el punto de partida, espere hasta que la línea principal esté completamente despejada antes de tratar con la línea esclava, para no caer en un laberinto.
El siguiente es el código principal de votación, por favor vea los comentarios:
Actualizar el voto o votar por:
Método de envío de notificación:
山花Ella se estaba riendo en el monte. El mensaje había sido enviado. Debe ser el momento de recibir los votos. La forma de operar el código de recepción aún está en lookForLeader:
Recoge el código para continuar. Discusión y visualización del envío de votos. Del primer capítulo de este artículo, sabemos que el nodo Observe no participa en la votación, solo reenvía solicitudes de escritura y recibe datos de forma pasiva. por lo que también podemos ver en el código:
Cuando el estado del nodo que envía el voto es SIGUIENTE y PRINCIPAL, significa que la elección del nodo emisor se ha completado, por lo que el método de procesamiento lógico es el Lo mismo. Esta parte es demasiado larga, por lo que no la discutiremos en profundidad por el momento. Los amigos interesados pueden enviar un mensaje privado. También puedo agregar mi cuenta de WeChat M_P_E_D para comunicarme.
Finalmente es hora de llegar al evento principal. Echemos un vistazo al estado MIRANDO del código:
Ponemos el método totalOrderPredicate al frente, que en realidad implementa las reglas para. elegir al líder.
El camino es largo y largo, pero seré el mejor del mundo. Seguiré caminando y tendré un futuro prometedor.
El camino es largo y largo, y buscaré arriba y abajo.