Zookeeper 源码请求处理

Posted binarylei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper 源码请求处理相关的知识,希望对你有一定的参考价值。

Zookeeper 源码(七)请求处理

以单机启动为例讲解 Zookeeper 是如何处理请求的。先回顾一下单机时的请求处理链。

// 单机包含 3 个请求链:PrepRequestProcessor -> SyncRequestProcessor -> FinalRequestProcessor
protected void setupRequestProcessors() {
    RequestProcessor finalProcessor = new FinalRequestProcessor(this);
    RequestProcessor syncProcessor = new SyncRequestProcessor(this,
            finalProcessor);
    ((SyncRequestProcessor)syncProcessor).start();
    firstProcessor = new PrepRequestProcessor(this, syncProcessor);
    ((PrepRequestProcessor)firstProcessor).start();
}

请求的调用链如下:

PrepRequestProcessor.processRequest() <- ZooKeeperServer.submitRequest() <- ZooKeeperServer.processPacket() <- NettyServerCnxn.receiveMessage() <- CnxnChannelHandler.processMessage() <- CnxnChannelHandler.messageReceived() 
public interface RequestProcessor {
    public static class RequestProcessorException extends Exception {
        public RequestProcessorException(String msg, Throwable t) {
            super(msg, t);
        }
    }

    void processRequest(Request request) throws RequestProcessorException;

    void shutdown();
}

一、PrepRequestProcessor

PrepRequestProcessor 是服务器的请求预处理器,能够识别出当前客户端是否是事务请求,对于事务请求,进行一系列预处理,如创建请求事务头,事务体,会话检查,ACL 检查等。

参考:

  1. 《Zookeeper请求处理》:https://www.cnblogs.com/leesf456/p/6140503.html
    https://www.cnblogs.com/leesf456/p/6438411.html
  2. 从 Paxos 到 Zookeeper : 分布式一致性原理与实践

每天用心记录一点点。内容也许不重要,但习惯很重要!


以上是关于Zookeeper 源码请求处理的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper(13)源码分析-请求处理链

zookeeper源码解析--请求处理--PrepRequestProcessor

zookeeper源码分析:选举流程和请求处理

zookeeper(16)源码分析-ZAB协议

ZooKeeper客户端源码——向服务端发起请求(顺序响应+同步阻塞+异步回调)

zookeeper(15)源码分析-服务器