Parque blog de pruebas de diseño

Esquema del curso:

Inicio código fuente proceso de análisis de
la estructura de almacenamiento de registro de transacciones instantánea de
un proceso de puesta en
puntos de conocimiento:

estructura de ingeniería introducido
para iniciar el proceso de visión macro de
la agrupación inicia un flujo detallado
mecanismo de servicio Netty
1. La introducción de estructuras de ingeniería
de proyectos Dirección: https://github.com/apache/zookeeper.git

etiqueta de la rama: 3.5.5

zookeeper-recetas: Ejemplo Fuente
empleado del zoológico-cliente: C cliente lenguaje
empleado del zoológico-servidor: la fuente principal
2. Iniciar SIPOC:
Fotos

[] Start ejemplo muestra:
servidor ** **: ZooKeeperServerMain

** Cliente: ZooKeeperMain **

3. Iniciar el clúster en detalle el proceso de
configuración de la carga:

ZOOKEEPER iniciar el proceso de pila

QuorumPeerMain # initializeAndRun // iniciar el proyecto
QuorumPeerConfig # de análisis de carga // config configuración
QuorumPeerConfig # parseProperties // config de análisis de configuración
nueva DatadirCleanupManager // construir un limpiador de datos
DatadirCleanupManager # inicio // iniciar una tarea programada para instantáneas claras expiró
pila Código:

# QuorumPeerMain principal // iniciar principal método
QuorumPeerConfig # de análisis // archivo zoo.cfg carga
QuorumPeerConfig # parseProperties // resolución de configuración
DatadirCleanupManager # inicio // iniciar una tarea programada para borrar el registro
QuorumPeerConfig # isDistributed // determinar si el modelo de clúster
ServerCnxnFactory # createFactory () // crear un servicio por defecto en NIO, recomendado Netty
// crear un administrador de conglomerado de inicialización /
QuorumPeerMain # getQuorumPeer
QuorumPeer # setTxnFactory
nueva gestión // archivo de datos FileTxnSnapLog nueva para la detección de la instantánea y el archivo de registro
/
* inicializar la base de datos * /
nueva nueva ZKDatabase
ZKDatabase # createDataTree // crear un árbol de datos, todos los nodos se almacenan en este
// iniciar el clúster: iniciar un hilo, mientras que
QuorumPeer # inicio //
QuorumPeer # loadDataBase // a partir de los archivos de instantáneas y archivos de registro a nodo de carga y llenado Datatree ir
QuorumPeer # startServerCnxnFactory / / start Netty o servicio java nio, puerto abierto 2181
AdminServer # inicio // iniciar los servicios de gestión, Netty http puerto por defecto es el servicio 8080
QuorumPeer # startLeaderElection // comenzar el proceso de elección
quorumPeer.join () // evitar que el proceso principal para salir de
descripciones de procesos:

método principal para iniciar
el archivo de configuración de carga zoo.cfg
configuración analizar
crear una fábrica de servicio
de crear procesos de gestión de cluster
establece el administrador de archivos de base de datos
puesta en marcha de una base de datos
.... ajustes
comienzan comenzar el hilo de administración de clústeres
de datos de carga en el nodo de memoria
iniciar el servicio Netty, el puerto abierto cliente
inicie el administrador de servicio HTTP, el puerto por defecto 8080
para iniciar el proceso de elección
se unen hilo de gestión para evitar salidas de proceso principal
proceso 4.netty servicio de inicio:
servicio de diagrama de clases UML

imagen

Configuración de los parámetros de inicio Netty

-Dzookeeper.serverCnxnFactory = org.apache.zookeeper.server.NettyServerCnxnFactory
inicialización:

Código clave:

flujo de la tubería de inicialización

clase channelHandler es un procesador de mensajes interno es de hormigón.

protegida initchannel void (SocketChannel ch) lanza la excepción {
tubería ChannelPipeline = ch.pipeline ();
si (seguro) {
initSSL (tubería);
}
Pipeline.addLast ( "servercnxnfactory", channelHandler);
}
ChannelHandler类结构图片

La pila de ejecución:

NettyServerCnxnFactory # NettyServerCnxnFactory // inicializar fábrica de servicio de Netty

NettyUtils.newNioOrEpollEventLoopGroup // crear grupo de hilos IO
NettyUtils # newNioOrEpollEventLoopGroup () // crear un grupo de subproceso de trabajo
ServerBootstrap # childHandler (io.netty.channel.ChannelHandler) // Añadir tubería de impulsión
NettyServerCnxnFactory # inicio // puerto de enlace, e iniciar el servicio de Netty
crear una conexión:

Cada vez que una nueva conexión de cliente entra, entra en este método para crear el objeto NettyServerCnxn. Y se añade a la forma de realización de cnxns

La pila de ejecución

CnxnChannelHandler # channelActive

La construcción del nuevo NettyServerCnxn // conector
NettyServerCnxnFactory # addCnxn // añadió al conector, y se agrupan en base al cliente IP
ipMap.get (dir) // basados en IP grupo
leyó un mensaje: la pila de ejecución

CnxnChannelHandler # channelRead

NettyServerCnxn # procesarMensaje // procesamiento de mensajes
NettyServerCnxn # receiveMessage // mensaje recibido
ZooKeeperServer # processPacket procesamiento // paquete de mensajes
org.apache.zookeeper.server.Request // paquete de peticiones de objetos
org.apache.zookeeper.server.ZooKeeperServer # submitRequest // Enviar solicitud
org.apache.zookeeper.server.RequestProcessor los processRequest // # solicitud de procesamiento de
dos registros de transacciones de instantánea de estructura de almacenamiento,
esquema:
ZK todos los datos se almacenan en la memoria, es decir, en zkDataBase. Sin embargo, todos los cambios son para el registro de datos ZK para el registro de transacciones, y se genera la instantánea cuando un cierto número de veces que se escribirá. Se ha comprometido a realizar copias de seguridad de datos. Sufijo es ZXID (lo único que ID).

registro de transacciones: cada CRUD, el archivo de registro que se almacenan en el
registro de instantáneas: todos los datos almacenados en el momento especificado del nodo
estructura de almacenamiento:
zkDdataBase zk base de datos es la clase base para todos los nodos que están almacenados en la clase, y Zk datos para realizar cualquier cambio se basarán en la clase. datos zk almacenada se lleva a cabo por Datatree el objeto, que era un mapa para el almacenamiento.

imagen

UML 类 图:

imagen

Leer registro de instantáneas:

org.apache.zookeeper.server.SnapshotFormatter
leer el registro de transacciones:

org.apache.zookeeper.server.LogFormatter
instantánea de la configuración:
directorio de registro de transacciones dataLogDir
zookeeper.preAllocSize espacio de disco previamente abierto para la posterior escrito al registro de transacciones, el 64M predeterminado
después de zookeeper.snapCount ser snapCount veces cada salida del registro de transacciones, desencadenando una instantánea el valor predeterminado es 100.000
el número de instantáneas retenido borra automáticamente cuando autopurge.snapRetainCount
intervalo de limpieza autopurge.purgeInterval, en horas -1 significa no borra automáticamente.
Snapshot proceso de carga:

ZooKeeperServer # loadData // carga de datos
FileTxnSnapLog # // restaurar restaurar los datos
FileSnap # deserializar () // deserializar datos
FileSnap # findNValidSnapshots // encuentran una instantánea válida
Util # sortDataDir // ordenar los archivos basa en el sufijo
persistence.Util # isValidSnapshot // verificar archivo de instantánea válido

Supongo que te gusta

Origin www.cnblogs.com/sunxinxin/p/12555948.html
Recomendado
Clasificación