分布式系統介紹-PNUTS

PNUTS是Yahoo!的分布式數據庫系統,支持地域上分布的大規模并發操作。它根據主鍵的范圍區間或者其哈希值的范圍區間將表拆分為表單元(Tablet),多個表單元存儲在一個服務器上。一個表單元控制器根據服務器的負載情況,進行表單元的遷移和拆分。每條記錄的數據都沒有固定的模式(采用JSON格式的文本)


組件

?

  • 區域(Region):一個區域包含全部表的數據和相關組件。
  • 表單元控制器(Tablet controller):一個表單元是是表中被劃分出來的一組記錄的集合。表單元控制器管理著表單元的創建,切分,維護存儲單元與表單元的映射關系。有主備服務器來保證其可用性。
  • 路由器(Router):根據從表單元控制器中讀取到的信息將數據路由到正確的存儲單元。另外也支持數據的聚合。
  • 存儲單元(Storage unit):存儲表單元。可以是一個Ulix文件系統(hash表)或者MySQL InnoDB(順序表)
  • 消息中間件(YMB):分發備份記錄到其他的Region或者更新通知給客戶端。

?

一致性

? ? ? ? ? 由于PNUTS設計數據分布在地理上的不同位置,所以它沒有采用代價比較高的事務操作。另外由于最終一致性可能會出現一些不希望看到的中間結果,所以PNUTS主要實現一種時序上的一致性。

? ? ? ? ??在每條記錄中,有一個字段標志該記錄Master所屬的區域,所有的更新先發往Master,由Master將數據同步到其他的備份中。為了避免插入操作的沖突,表也分為主備,所有的記錄插入操作都先在主表上執行。在底層,通過消息中間件(YMB, Yahoo! Message Broker)來保證數據分發的順序。

? ? ? ? ??另外每條記錄都有一個版本號,由應用根據自己的需要,來決定讀寫記錄的方式: 可以讀取任意的備份,也可以讀取最新的記錄,或者讀取指定的版本,在寫的時候既可以直接覆蓋,也可以實現樂觀鎖的控制。通過這種方式,來保證應用的讀寫一致性和寫讀一致性。


可用性

? ? ? ? ? 數據的可用性主要是通過YMB來保證,YMB也同時管理日志,數據發布到YMB視為數據的提交,初始時YMB將數據寫到兩個服務器的日志中, 只有當數據分發到所有的區域上后,YMB才將日志刪除。

? ? ? ? ? 在一條記錄的master區域不可用時,應用程序可以決定是否繼續更新,如果更新則需要手動解決潛在的沖突。

? ? ? ? ? 客戶端支持自動的failover


高性能

? ? ? ? ? 主要通過本地化操作實現,系統統計最近三次請求的來源,將master遷移到相應的Region中。

? ? ? ? ? 表單元控制器檢測系統的負載情況,通過遷移或者拆分tablet來均衡負載。

? ? ? ? ? 另外,數據拷貝的傳輸為異步操作。? ? ? ? ?


? ? ? ? ?



? ? ? ? ??



?

轉載于:https://www.cnblogs.com/suncoolcat/p/3402475.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jmeter BeanShell學習(一) - BeanShell取樣器(二)

利用BeanShell取樣器獲取接口返回的JSON格式的結果,并將該結果寫入到文件。 第一步:添加BeanShell取樣器 前面幾個取樣器的內容查看: https://blog.csdn.net/goodnameused/article/details/96985514 第二步:查看返回的結果格式 …

在數據庫中outlet、code、outline為聯合組件。hibarnate插入可如此插入

hibarnate對象的映射文件如下 <id name"outlet" type"string"> <column name"OUTLET" length"10" /> <generator class"assigned" /> </id> <!-- <property name"code" type"…

日怎么沒人告訴我這博客可以改博文界面的顯示寬度的

于是我妥妥的回歸了。 weebly雖然定制功能強大&#xff0c;還能穿越時空發博文&#xff0c;但是太麻煩了&#xff0c;而且用著也不像一個博客。 既然解決了這個問題&#xff0c;那Lofter除了行間距也沒什么缺點了&#xff0c;接著用吧&#xff0c;反正weebly也傳不了大圖&#…

160 - 50 DueList.5

環境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查殼 可以看出程序有加殼&#xff0c;那么我們下一步就是脫殼了。 0x01 脫殼 看上去沒什么特別的地方&#xff0c;就直接 單步跟蹤法 來脫殼吧 近call F7&#xff0c;遠call F8 來到這里 哈&…

firefox瀏覽器中silverlight無法輸入問題

firefox瀏覽器中silverlight無法輸入問題今天用firefox瀏覽silverlight網頁&#xff0c;想在文本框中輸入內容&#xff0c;卻沒想到silverlight插件意外崩潰了。google一下&#xff0c;發現這是firefox的設置問題&#xff0c;解決方法如下&#xff1a; 1、在Firefox瀏覽器地址欄…

關鍵路徑的概念和算法

AOE網&#xff1a;在一個表示工程的帶權有向圖中&#xff0c;用頂點表示事件&#xff0c;用有向邊表示活動&#xff0c;邊上的權值表示活動的持續時間&#xff0c;稱這樣的有向圖叫做邊表示活動的網&#xff0c;簡稱AOE網。AOE網中沒有入邊的頂點稱為始點&#xff08;或源點&am…

160 - 51 DueList.6

環境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查殼 發現程序沒有加殼&#xff0c;那么我們可以直接分析了。 0x01 分析 運行程序看一看 看到錯誤信息的字符串后我們可以直接搜索了。 可以看到程序會比較輸入的長度是否為8位&#xff0c;如…

寬帶上行速率和下行速率的區別

本文由廣州寬帶網http://www.ymeibai.com/整理發布&#xff0c;廣州電信寬帶報裝&#xff0c;上廣州寬帶網。 我們一般所說的4M寬帶&#xff0c;6M寬帶&#xff0c;都是指寬帶的下行速率&#xff0c;可以理解為就是下載的速度&#xff0c;平時我們用迅雷、或者網頁下載軟件時&a…

LazyInitializationException--由于session關閉引發的異常

1,頁面中進行person.department.departmentName的讀取 2,Action 中只讀取了person&#xff0c;事務作用在Service的方法中 3,后臺會有org.hibernate.LazyInitializationException出現 因為&#xff1a;Action中Service方法結束之前&#xff0c;session已經關閉了轉載于:https:/…

160 - 52 egis.1

環境&#xff1a;windows xp 工具&#xff1a; 1、OllyDBG 2、exeinfo 3、IDA 0x00 查殼 加了UPX殼&#xff0c;那么就要脫殼了。可以使用單步法來脫殼。 UPX殼還是比較簡單的&#xff0c;開頭pushad&#xff0c;找個popad&#xff0c;然后就是jmp了。 然后就可以用OD來…

玩轉MySQL之Linux下的簡單操作(服務啟動與關閉、啟動與關閉、查看版本)

小弟今天記錄一下在Linux系統下面的MySQL的簡單使用&#xff0c;如下&#xff1a; 服務啟動與關閉 啟動與關閉 查看版本 環境 Linux版本&#xff1a;centeros 6.6&#xff08;下面演示&#xff09;&#xff0c;Ubuntu 12.04&#xff08;參見文章末尾紅色標注字體&#xff09; M…

實驗八第二題

轉載于:https://www.cnblogs.com/huangsilinlana/p/3411550.html

c++ boost多線程學習(一)

本次學習相關資料如下&#xff1a; Boost C 庫 第 6 章 多線程&#xff08;大部分代碼的來源&#xff09; Boost程序庫完全開發指南 - 深入C“準”標準庫 第三版 羅劍鋒著 頭文件&#xff1a; #include <stdio.h> #include <string.h> #include <boost\versio…

C#中什么是泛型

所謂泛型是指將類型參數化以達到代碼復用提高軟件開發工作效率的一種數據類型。一種類型占位符&#xff0c;或稱之為類型參數。我們知道一個方法中&#xff0c;一個變量的值可以作為參數&#xff0c;但其實這個變量的類型本身也可以作為參數。泛型允許我們在調用的時候再指定這…

敏捷自動化測試(1)—— 我們的測試為什么不夠敏捷?

測試是為了保證軟件的質量&#xff0c;敏捷測試關鍵是保證可以持續、及時的對軟件質量情況進行全面的反饋。由于在敏捷開發過程中每個迭代都會增加功能、修復缺陷或重構代碼&#xff0c;所以在完成當前迭代新增特性測試工作的同時&#xff0c;還要通過回歸測試來保證歷史功能不…

學習c++

目錄 一 、 boost庫&#xff1a; 1. 多線程 c boost多線程學習&#xff08;一&#xff09; 二 、數據庫&#xff1a; 三、socket編程&#xff1a; c socket學習&#xff08;1.1&#xff09; c socket學習&#xff08;1.2&#xff09; c socket學習&#xff08;1.3&#x…

mysql5.6與mysql5.5不同

1.編譯階段 要明白with與without的區別&#xff0c;選項值分1和0&#xff0c;或者對應為on或off&#xff0c;代表支持與不支持&#xff1b;with的1&#xff08;on&#xff09;與without的0&#xff08;off&#xff09;是同樣的&#xff0c;with的0&#xff08;off&#xff09;與…

c++ 基本排序算法學習

C實現排序算法 代碼地址 vector<unsigned int> cVec; int nSize cVec.size();1 冒泡排序 算法思路&#xff1a; 每兩兩相鄰的數值都會比較大小&#xff0c;前面比后面大的時候就交換位置&#xff0c;否則就不動。 代碼&#xff1a; void BubbleSort() {//優化&#x…

ios 程序學習

馬上著手開發iOS應用程序&#xff1a;五、提交應用與尋找信息 2013-01-11 15:36 佚名 apple.com 我要評論(0) 字號&#xff1a;T | T本文介紹了您已經學習完如何開發一個優秀的iOS應用之后&#xff0c;應該掌握的內容&#xff0c;包括將您的應用提交到App Store讓其他人下載&am…

解決SimpleButton被移除后保持OVER狀態

假設場景中有一SimpleButton叫testBtn,執行下面操作&#xff1a;1.鼠標移上testBtn&#xff0c; testBtn狀態變為OVER2.移除testBtn&#xff0c;removeChild(testBtn)3.5秒后重新添加testBtn到場景此時&#xff0c;看見testBtn還是OVER狀態。解決方法&#xff1a;1.記錄testBtn…