1. 程式人生 > >Zookeeper 原始碼(七)請求處理

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 : 分散式一致性原理與實踐

每天用心記錄一點點。內容也許不重要,但習慣很重要!