【Zookeeper】原始碼分析之請求處理鏈(一)

leesf發表於2017-02-17

一、前言

  前面已經分析了Watcher機制的主要程式碼,現在接著分析Zookeeper中的請求處理鏈,其是Zookeeper的主要特點之一。

二、總體框圖

  對於請求處理鏈而言,所有請求處理器的父介面為RequestProcessor,其框架圖如下

  

  說明:

  AckRequestProcessor,將前一階段的請求作為ACK轉發給Leader。

  CommitProcessor,將到來的請求與本地提交的請求進行匹配,這是因為改變系統狀態的本地請求的返回結果是到來的請求。

  FinalRequestProcessor,通常是請求處理鏈的最後一個處理器。

  FollowerRequestProcessor,將修改了系統狀態的請求轉發給Leader。

  ObserverRequestProcessor,同FollowerRequestProcessor一樣,將修改了系統狀態的請求轉發給Leader。

  PrepRequestProcessor,通常是請求處理鏈的第一個處理器。

  ProposalRequestProcessor,將請求轉發給AckRequestProcessor和SyncRequestProcessor。

  ReadOnlyRequestProcessor,是ReadOnlyZooKeeperServer請求處理鏈的第一個處理器,將只讀請求傳遞給下個處理器,拋棄改變狀態的請求。

  SendAckRequestProcessor,傳送ACK請求的處理器。

  SyncRequestProcessor,傳送Sync請求的處理器。

  ToBeAppliedRequestProcessor,維護toBeApplied列表,下個處理器必須是FinalRequestProcessor並且FinalRequestProcessor必須同步處理請求。

  UnimplementedRequestProcessor,用於管理未知請求。

三、RequestProcessor原始碼分析

  RequestProcessor是所有處理器的父介面,其定義了處理器的處理方法,其原始碼如下 

public interface RequestProcessor {
    @SuppressWarnings("serial")
    public static class RequestProcessorException extends Exception {
        public RequestProcessorException(String msg, Throwable t) {
            super(msg, t);
        }
    }

    void processRequest(Request request) throws RequestProcessorException;

    void shutdown();
}

  說明:RequestProcessor原始碼非常簡單,內部類RequestProcessorException,用來表示處理過程中的出現的異常,而processRequest和shutdown方法則是核心方法,是子類必須要實現的方法,處理的主要邏輯在processRequest中,通過processRequest方法可以將請求傳遞到下個處理器,通常是單執行緒的。而shutdown表示關閉處理器,其意味著該處理器要關閉和其他處理器的連線。

四、總結

  本篇博文主要學習了RequestProcessor的相關原始碼,其定義了處理器的處理邏輯,也分析其子類的大體介紹,之後會詳細分析各個處理器的原始碼,謝謝各位園友的觀看~

相關文章