分散式系統之Quorum (NRW)演算法
基於Quorum投票的冗餘控制演算法
Quorom 機制,是一種分散式系統中常用的,用來保證資料冗餘和最終一致性的投票演算法,其主要數學思想來源於鴿巢原理。
在有冗餘資料的分散式儲存系統當中,冗餘資料物件會在不同的機器之間存放多份拷貝。但是同一時刻一個數據物件的多份拷貝只能用於讀或者用於寫。
該演算法可以保證同一份資料物件的多份拷貝不會被超過兩個訪問物件讀寫。
演算法來源於[Gifford, 1979][3][1]。 分散式系統中的每一份資料拷貝物件都被賦予一票。每一個操作必須要獲得最小的讀票數(Vr)或者最小的寫票數(Vw)才能讀或者寫。如果一個系統有V票(意味著一個數據物件有V份冗餘拷貝),那麼這最小讀寫票必須滿足:
- Vr + Vw > V
- Vw > V/2
第一條規則保證了一個數據不會被同時讀寫。當一個寫操作請求過來的時候,它必須要獲得Vw個冗餘拷貝的許可。而剩下的數量是V-Vw 不夠Vr,因此不能再有讀請求過來了。同理,當讀請求已經獲得了Vr個冗餘拷貝的許可時,寫請求就無法獲得許可了。
第二條規則保證了資料的序列化修改。一份資料的冗餘拷貝不可能同時被兩個寫請求修改。
演算法的好處
在分散式系統中,冗餘資料是保證可靠性的手段,因此冗餘資料的一致性維護就非常重要。一般而言,一個寫操作必須要對所有的冗餘資料都更新完成了,才能稱為成功結束。比如一份資料在5臺裝置上有冗餘,因為不知道讀資料會落在哪一臺裝置上,那麼一次寫操作,必須5臺裝置都更新完成,寫操作才能返回。
對於寫操作比較頻繁的系統,這個操作的瓶頸非常大。Quorum演算法可以讓寫操作只要寫完3臺就返回。剩下的由系統內部緩慢同步完成。而讀操作,則需要也至少讀3臺,才能保證至少可以讀到一個最新的資料。
Quorum的讀寫最小票數可以用來做為系統在讀、寫效能方面的一個可調節引數。寫票數Vw越大,則讀票數Vr越小,這時候系統寫的開銷就大。反之則寫的開銷就小。
相關推薦
分散式系統之Quorum (NRW)演算法
基於Quorum投票的冗餘控制演算法 Quorom 機制,是一種分散式系統中常用的,用來保證資料冗餘和最終一致性的投票演算法,其主要數學思想來源於鴿巢原理。 在有冗餘資料的分散式儲存系統當中,冗餘資料物件會在不同的機器之間存放多份拷貝。但是同一時刻一個數據物件的多份拷貝只能用於讀或者用於寫。 該演算法可
深入理解磁盤文件系統之inode(轉)
連續 blog 通過 lan 內容 打開 剩余空間 最大 .html 一、inode是什麽? 理解inode,要從文件儲存說起。 文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當於0.5KB)。 操作系統讀取硬盤的時候,不會
java分散式系統部署學習(九)ansible-playbook進階
一、併發執行 ansible預設只會建立5個程序,所以一次任務只能同時控制5臺機器執行.那如果你有大量的機器需要控制,或者你希望減少程序數,那你可以採取非同步執行.ansible的模組可以把task放進後臺,然後輪詢它.這使得在一定程序數下能讓大量需要的機器同時運作起來. 使用asy
機器學習筆記之SVM(SVR)演算法
學過SVM後,看了那麼多別人的文章,是時候自己總結一波了。權當寫的筆記供自己日後再回顧吧。 PS:結合自己在工作過程中(我這裡用SVR做股票預測)用到的知識來寫的,不會很全面,若有些知識這裡沒提及讀者
高併發服務端分散式系統設計概要(上)
又是快一年沒寫部落格了,2013年也只剩尾巴,也不知道今年都忙了些什麼。寫這篇文章的目的,主要是把今年以來學習的一些東西積澱下來,同時作為之前文章《高效能分散式計算與儲存系統設計概要》的補充與提升,然而本人水平非常有限,回頭看之前寫的文章也有許多不足,甚至是
java分散式系統部署學習(六)ansible Ad-hoc與commands模組
Ad-Hoc 是指ansible下臨時執行的一條命令,並且不需要儲存的命令,對於複雜的命令後面會說playbook。講到Ad-hoc 就要提到模組,所有的命令執行都要依賴於事先寫好的模組,預設安裝好的ansible 裡面已經自帶了很多模組,如:command、r
java分散式系統部署學習(五)ansible Dynamic Inventory
Ansible Inventory實際上是包含靜態Inventory和動態Inventory兩部分,靜態Inventory指的是在檔案/etc/ansible/hosts中指定的主機和組,Dynamic Inventory指通過外部指令碼獲取主機列表,並按照an
分散式系統閱讀筆記(八)-----分散式物件和元件
一、介紹 在分散式系統中,一個完整的中介軟體需要展現一定的對於上層程式語言的以及底層的物理設施的抽象性。而分散式物件和分散式元件恰恰是2種重要的實現方式。 1、分散式物件包集成了面向物件的語言的特徵和
通訊系統之通道(一)
通道最直觀的理解就是傳輸媒介,如電纜,天線,等訊號傳輸的通道。實際上,訊號通常要經過以下的處理,因此又可將通道繼續劃分:訊號失真:由傅立葉變換可知,通道的幅頻特性和相頻特性是一條直線,則訊號通過通道不會失真;但實際上,通道的幅頻特性和相頻特性都不會是一條直線,這是訊號通過通道
java分散式系統部署學習(四)ansible配置ansible.cfg
Ansible預設安裝好後有一個配置檔案/etc/ansible/ansible.cfg,該配置檔案中定義了ansible的主機的預設配置部分,如預設是否需要輸入密碼、是否開啟sudo認證、action_plugins外掛的位置、hosts主機組的位置、是否開啟
高併發服務端分散式系統設計概要(中)
上篇我們完成了在此分散式系統中,一個group的設計。那麼接下來,我們設計系統的其他部分。如前文所述,我們的業務及其資料以group為單位,顯然在此係統中將存在many many的groups(別告訴我你的網站總共有一個業務,像我們的“山推”,那業務是一堆一堆地),那麼由誰來管理這些groups呢?由Web
學生資訊管理系統之增(二):新增班級資訊流程
第一步:資訊載入 組合框內新增資訊(AddItem屬性) Private Sub Form_Load() comboGrade.AddItem "初中一年級" comboGrade.AddItem "初中二年級" comb
機房收費系統之總結(一)
機房收費系統涉及到的版塊比較多,因此涉及到的功能也比較多,而這些功能恰巧是需要用程式碼來實現的,下面我就來做一些分享了。 第一:如何一鍵刪除vb窗體中所有控制元件的內容,(省程式碼的操作) rem:一鍵清除vb控制元件中所有的內容 Private Sub cmdclea
學生資訊管理系統之增(三):新增成績資訊流程
一、新增學生成績資訊的一般流程 二、根據已知資訊新增未知資訊的流程 三、ExecuteSQL的查詢流程 流程簡單概括: 首先,對文字框進行判斷:是否為空,是否為數字; 其次,對文字框內容進行判斷,連線資料庫看是否
java分散式系統部署學習(三)ansible的Inventory與Patterns
Ansible的Inventory檔案,可以理解為saltstack中的salt-key中的所有minion的列表以及使用者自定義的nodegroup的概念,預設情況下這個檔案是/etc/ansible/hosts ,後面還會講到Dynamic Inventor
分散式系統閱讀筆記(一)-----分散式系統的特徵
1)引言 從今天開始,我將會開始學習分散式系統的一些理論知識,全方面的重新學習分散式的各個技術點,所以選用了原版本的英文教材<<Dstributed Sysytems Concepts A
系統學習機器學習之總結(二)--機器學習演算法比較
轉自:https://blog.csdn.net/bryan__/article/details/52026214 其實這篇文章真正出處來自:csuldw 本文主要回顧下幾個常用演算法的適應場景及其優缺點! 機器學習演算法太多了,分類、迴歸、聚類、推薦、影象識別領域等等,要想找到一個合適演算
系統學習機器學習之總結(一)--常見分類演算法優缺點
主要是參考網上各種資源,做了整理。其實,這裡更多的是從基礎版本對比,真正使用的時候,看資料,看改進後的演算法。 1. 五大流派 ①符號主義:使用符號、規則和邏輯來表徵知識和進行邏輯推理,最喜歡的演算法是:規則和決策樹 ②貝葉斯派:獲取發生的可能性來進行概率推理,最喜歡的演算法是:樸素貝葉
[原創]分散式系統之快取的微觀應用經驗談(三)【資料分片和叢集篇】
分散式系統之快取的微觀應用經驗談(三)【資料分片和叢集篇】 前言 近幾個月一直在忙些瑣事,幾乎年後都沒怎麼閒過。忙忙碌碌中就進入了2018年的秋天了,不得不感嘆時間總是如白駒過隙,也不知道收穫了什麼和失去了什麼。最近稍微休息,買了兩本與技術無關的書,其一是 Yann Martel 寫的《The
[原創]分散式系統之快取的微觀應用經驗談(四) 【互動場景篇】
分散式系統之快取的微觀應用經驗談(四) 【互動場景篇】 前言 近幾個月一直在忙些瑣事,幾乎年後都沒怎麼閒過。忙忙碌碌中就進入了2018年的秋天了,不得不感嘆時間總是如白駒過隙,也不知道收穫了什麼和失去了什麼。最近稍微休息,買了兩本與技術無關的書,其一是 Yann Martel 寫的《The