1. 程式人生 > >ZooKeeper系列之(十六):結束篇

ZooKeeper系列之(十六):結束篇

ZooKeeper的設計原理講到這基本就結束了,有興趣的朋友可以下原始碼看看,ZooKeeper的原始碼寫的很好,很輕量級,是入門分散式系統的絕佳材料。

最後再簡單總結一下吧:

(1)ZooKeeper是什麼?

ZooKeeper是輕量級的分散式一致性儲存集群系統,在叢集間的各個機器上維護一致性的資料儲存,某些機器宕機不會影響整體叢集的正常服務。

(2)它是如何工作的

叢集有1個leader和多個follower組成,至於Observer筆者就不單獨說了。叢集啟動的時候每臺機器都是初始化狀態,這是啟動選舉過程,選舉出一個leader,選舉之後剩餘的機器就是follower,然後follower向leader傳送註冊資訊,並從leader獲取leader的儲存資料,保持和leader資料一致性。然後叢集就可以正常服務了。

對於讀請求,都是從本地返回資料給客戶端,所不同的是寫請求。

如果寫請求REQUEST傳送給leader,則leader會維護一個臨時狀態,並將寫請求作為PROPOSAL包發給所有的follower,然後follower寫WAL日子並回復ACK包給leader,leader收集到半數以上的ACK則認為叢集已經記錄下這個寫請求,這時候leader傳送COMMIT包給follower們,follower收到COMMIT之後讓寫請求的資料在本地生效。這樣leader和follower都儲存同一份寫請求資料並生效。

如果寫請求REQUEST傳送給follower,則follower會轉發給leader,然後leader同樣開始上述過程。

ZooKeeper的總流程大致就是這樣了,其實還有一款分散式儲存系統叫Etcd,速度更快效能更好,有興趣的朋友可以看筆者的電子書連結:

https://www.ituring.com.cn/book/2427

相關推薦

ZooKeeper系列結束

ZooKeeper的設計原理講到這基本就結束了,有興趣的朋友可以下原始碼看看,ZooKeeper的原始碼寫的很好,很輕量級,是入門

ZooKeeper系列服務端實現機制

服務端有3種執行方式:leader,follower,observer。leader是領導者,一個ZooKeeper叢集同一時刻最

SQL Server2012 學習 觸發器的建立與使用

接上篇部落格的內容,觸發器可以看作是一個特殊的儲存過程。本篇部落格主要關注DML和DDL觸發器對應的使用方法。1.觸發器的定義觸發器的定義如下圖。它與儲存過程的區別在於觸發器是被動呼叫的 ,即在滿足特定事件的情況下被執行,而儲存過程是在使用操作語句時主動進行呼叫。觸發器大致分

ZooKeeper系列投票選舉2

ZooKeeper的選舉過程預設使用FastLeaderElection類,FastLeaderElection啟動時啟動Mess

OpenCV探索圖像矯正技術深入探討

double gb2 教科書 長方形 strong fine open lines 導致 剛進入實驗室導師就交給我一個任務,就是讓我設計算法給圖像進行矯正。哎呀,我不太會圖像這塊啊,不過還是接下來了,硬著頭皮開幹吧! 那什麽是圖像的矯正呢?舉個例子就好明白了。 我的好朋友小

[搬運工系列]-JMeterJmeterBean shell使用(二) JmeterBean shell使用(一) JmeterBean shell使用(一)

 上一篇Jmeter之Bean shell使用(一)簡單介紹了下Jmeter中的Bean shell,本文是對上文的一個補充,主要總結下常用的幾種場景和方法,相信這些基本可以涵蓋大部分的需求。本節內容如下: 一、操作變數 二、操作屬性  三、自定義函式 四、引用外部java檔案 五、引用外

[搬運工系列]-JMeterJmeterBean shell使用(一)

一、什麼是Bean Shell BeanShell是一種完全符合Java語法規範的指令碼語言,並且又擁有自己的一些語法和方法; BeanShell是一種鬆散型別的指令碼語言(這點和JS類似); BeanShell是用Java寫成的,一個小型的、免費的、可以下載的、嵌入式的Java原始碼直譯器,

linux系列which命令

1、命令格式:   which 可執行檔名稱 2、命令功能:   which指令會在PATH變數指定的路徑中,搜尋某個系統命令的位置,並且返回第一個搜尋結果。 3、命令引數: -n  指定檔名長度,指定的長度必須大於或等於所有檔案中最長的檔名。 -p  與-n引數相同,但此處的包括了檔案的路

SpringBoot入門系列actuator監控模組入門

actuator是SpringBoot提供的一個用於監控的模組,想要在SpringBoot中使用則需要引入該jar包: <dependency> <groupId>org.springframework.boot</gro

linux網路程式設計socket通過UNIX域套接字傳遞描述符和 sendmsg/recvmsg 函式

void send_fd(int sock_fd, int send_fd) {     int ret;     struct msghdr msg;     struct cmsghdr *p_cmsg;     struct iovec vec;     char cmsgbuf[CMSG_SPACE(

Quartz.Net系列Misfire策略在SimpleScheduler和CronScheduler中的使用

1.場景 ①因為工作執行緒都在忙碌,所以導致某些Trigger得不到觸發 也就是預設10個工作執行緒而我有15個Trigger同時觸發 這就導致有5個不能被觸發,而不幸的是Trigger所關聯的Job執行時間特別長 如果某些Trigger超過指定的閾值那麼就不會觸發 ②Scheduler掛掉了。。。某些時刻又

Java學習筆記static關鍵字

ima 關鍵字 static關鍵字 es2017 java學習筆記 sta com 筆記 nbsp Java學習筆記(十六):static關鍵字

R語言學習筆記處理缺失值

ima 結果 cti img dataset case prop .com log #識別缺失值 install.packages("VIM") data(sleep,package="VIM") #列出沒有缺失值的行 sleep[complete.case

Android項目實戰QQ空間實現—— 展示說說中的評論內容並有相應點擊事件

con toast short demo append 集合 obj parent 自帶 原文:Android項目實戰(十六):QQ空間實現(一)—— 展示說說中的評論內容並有相應點擊事件大家都玩QQ空間客戶端,對於每一個說說,我們都可以評論,那麽,對於某一條評論:

用Vue來實現音樂播放器滾動列表的實現

com 作用 efault nor 大小 -s stylus BE ack 滾動列表是一個基礎組件 他是基於scroll組件實現的 在base文件夾下面創建一個list-view文件夾 裏面有list-view.vue組件 <template>

java基礎學習總結程式碼優化

程式碼優化的目標是: 1、減小程式碼的體積 2、提高程式碼執行的效率 程式碼優化細節 (1)儘量指定類、方法的final修飾符     帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.Strin

javaweb學習筆記JDBC2

批處理 當需要向資料庫傳送一批SQL語句執行時,應避免向資料庫一條條的傳送執行,而應採用JDBC的批處理機制,以提升執行效率。 實現批處理有兩種方式: ①Statement.addBatch(sql) :新增批處理命令。 優點:可以向資料庫傳送多條不同的SQL語句。 缺點:S

通證經濟大局觀理性人和機會成本

此前我們說了,由於資源的稀缺性,所以人們總是面臨各種各樣的,將有限資源用於何處的權衡取捨。那麼,人們取捨的依據又是什麼呢? 這個問題就要涉及到經濟學的另外一個假設了。這個假設是理性人,基本含義是理性的人總是力圖以自己的最小經濟代價去獲得自己的最大經濟利益。 理性人這個假設爭議很大,因

大資料Yarn的工作機制、資源排程器、任務的推測執行機制

一、Yarn概述         Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而MapReduce等運算程式則相當於運行於操作程式上的應用程式。   二、Yarn基本架

PE檔案格式學習延遲載入表

1.介紹 延遲載入表本質上跟繫結匯入表的目的是一樣的,都是為了加快程式載入檔案的速度,只不過方法不一樣。 延遲載入是指在呼叫某個DLL時才去載入,目的是為了避免在程式啟動之初就載入了不必要的DLL而浪費了時間。微軟建議在兩種情況下使用延遲載入: 程式並非在啟動時就會呼叫D