ZK@3.8源码-09-单机启动流程汇总

本章节起到起承转合作用,有两个目的:

  • 从宏观上回顾ZK单机启动流程以及涉及到的重要组件
  • 为后续集群模式做铺垫

1 全局流程图

2 核心组件

只列举服务核心部分

  • ZooKeeperServer

    • ZK单机服务实例
    • 组件的外层容器,负责协调各个组件进行配合工作
  • FileTxnSnapLog

    • 文件管理器
    • 管理着快照文件和日志文件
    • 负责内存和磁盘之间的交互
  • ZKDatabase

    • 内存数据库
    • 保存着ZK数据
  • ServerCnxnFactory

    • 通信工厂
    • 负责创建具体的网络通信实现
    • 两种实现方式
      • NioServerCnxnFactory
      • NettyServerCnxnFactory
  • SessionTracker

    • 会话管理器
    • 管理着连接
    • 配合过期机制实现会话管理
    • 负责清理过期会话
  • RequestProcessor

    • 请求执行器
    • 负责客户端提交给服务端的请求
    • 采用责任链设计模式
  • RequestThrottler

    • 请求节流器
    • 负责对请求管理
    • 适配服务端处理能力进行限流机制实现

3 启动流程

上述提到的组件在启动过程中都会进行创建和启动。

4 处理请求流程

当ZK启动完成,如何受理一个客户端的请求,以整合Netty实现为例:

  • 首先,客户端请求通过网络传输,请求通过Netty进入服务端的NettyServerCnxn,此刻数据都还是字节数据,按照协议反序列化为ZK抽象的Request。
  • 然后,请求被投递到RequestThrottler组件,根据当前服务端负载情况进行限流。
  • 于此同时,在SessionTracker中登记,对这些连接进行管理,超时了需要进行关闭。
  • 之后,请求被交给RequestProcessor正式进行处理,按照定义好的责任链顺序进行依次处理:
    • PreRequestProcessor
    • SyncRequestProcessor
      • 借助FileTxnSnapLog对事务日志和数据进行写文件存盘。
    • FinalRequestProcessor
      • 将数据更新到内存数据库ZKDatabase上
      • 将本次请求的处理结果封装成约定的响应投递给NettyServerCnxn,再通过Netty将数据通过网络传输给客户端。

至此,请求流程结束。


ZK@3.8源码-09-单机启动流程汇总
https://bannirui.github.io/2023/03/08/ZK-3-8源码-09-单机启动流程汇总/
作者
dingrui
发布于
2023年3月8日
许可协议