7. Análisis del código fuente de PhxPaxos de la arquitectura general.
Contenido
1. Análisis del código fuente de PhxPaxos
2. Análisis del código fuente de PhxPaxos de los componentes de la infraestructura de red
3. Sugerencias PhxPaxos Análisis del código fuente del alumno y del destinatario
4. Análisis del código fuente de PhxPaxos del alumno
5. Análisis del código fuente de PhxPaxos de la máquina de estados
6. Análisis de fuente del mecanismo de archivo de PhxPaxos
7. Análisis de fuente de la arquitectura general de PhxPaxos
En los capítulos anteriores, presentamos los componentes de la infraestructura de red y los tres roles principales de Paxos (propuesta) receptor/ receptor/aprendiz), máquina de estados y mecanismo de punto de control. En PhxPaxos, los objetos de instancia combinan los roles anteriores. Las instancias en múltiples nodos se comunican entre sí y forman un grupo de paxos para determinar múltiples valores de manera ordenada. El diagrama de relación arquitectónica es el siguiente:
La clase de implementación de Instancia tiene alrededor de 900 líneas, que realizan principalmente cierta lógica relacionada con el procesamiento de datos de la red y no son complicadas. Lo que quiero discutir aquí es la lógica de inicialización de Instancia.
La inicialización de la instancia se completa cuando comienza el proceso. El proceso puede iniciarse por primera vez o puede reiniciarse después de una salida anormal. El reinicio restaurará la instancia a su estado previo al inicio, lo que requerirá que los datos del disco se restauren en la memoria. Para PhxPaxos, los datos en el disco se concentran principalmente en Acceptor y CheckpointMgr. Aquí, los datos en Acceptor se leen primero, luego se leen los datos en CheckpointMgr y los datos en Acceptor que no se reflejan en CheckpointMgr se vuelven a ejecutar. Finalmente, la instancia de Paxos se restaurará a su estado previo al lanzamiento:
La ID de la instancia actual se marcará como la ID de instancia seleccionada más grande.
Estrictamente hablando, llNowInstanceID no es necesariamente el ID de instancia máximo seleccionado, porque el último registro descartado por el Aceptador puede ser un "producto semiacabado" que no ha sido seleccionado, es decir, la propuesta no aún no se ha completado. Por lo tanto, utilizar llNowInstanceID como ID de instancia máxima seleccionada no es exacto. Sin embargo, el ID de instancia máximo seleccionado actualmente solo se usa para determinar la cantidad de registros de Paxos que se deben retener, y la cantidad mínima de registros de Paxos que se deben retener es 300, por lo que no hay problema.
Encima de las instancias hay grupos, cada grupo contiene una instancia y el grupo es responsable de la inicialización de la instancia:
El valor del grupo radica en la abstracción conceptual, y las instancias de diferentes nodos pueden tener diferentes estados de ejecución, es decir, diferentes ID de instancia, pero estos ID de instancia son los mismos. Además, PhxPaxos permite que existan múltiples grupos simultáneamente, cada grupo ejecuta múltiples instancias (con la misma cantidad de nodos). Sin abstraer el concepto de grupos, las instancias dentro de un grupo y las instancias entre grupos pueden confundirse fácilmente.
Dado que se permite la ejecución de varios grupos, necesitamos un administrador de grupo en PhxPaxos, esta función es la clase abstracta de Nodo, que es la clase de servicio proporcionada por toda la biblioteca de PhxPaxos al mundo exterior. Nodo: : RunNode inicia el servicio PhxPaxos de este nodo.
En este punto, se ha formado la arquitectura general de PhxPaxos:
Además de ser participantes en el protocolo Paxos, los nodos en PhxPaxos también ejecutan otro tipo de nodos, que se convierten en seguidores. .
Un seguidor especifica un nodo que ejecuta el protocolo Paxos para la sincronización de datos. No participa en el protocolo Paxos y no participa en la selección del nodo maestro de Paxos. El seguidor es más como un nodo listo para la sincronización en el sentido tradicional. Cuando el nodo del protocolo Paxos determina un valor, sincronizará los datos con el nodo seguidor. Pero hay una diferencia: el nodo Seguidor ejecuta el alumno y, cuando falta un valor, el alumno puede recuperarlo iniciando AskForLearn.
Esto finaliza el análisis del código fuente de PhxPaxos.
En general, PhxPaxos de código abierto de WeChat definitivamente merece el título de "grado de producción" en términos de diseño arquitectónico, calidad de codificación y optimización de detalles (especialmente la calidad de codificación que es encomiable).
Para obtener más información sobre PhxPaxos, consulta la WIKI oficial.