Zookeeper 原始碼(七)請求處理
阿新 • • 發佈:2018-11-14
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 檢查等。
參考:
- 《Zookeeper請求處理》:https://www.cnblogs.com/leesf456/p/6140503.html
https://www.cnblogs.com/leesf456/p/6438411.html - 從 Paxos 到 Zookeeper : 分散式一致性原理與實踐
每天用心記錄一點點。內容也許不重要,但習慣很重要!