<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PNUTS分布式的數(shù)據(jù)存儲平臺

          聯(lián)合創(chuàng)作 · 2023-10-01 06:26

          Yahoo!的PNUTS是一個(gè)分布式的數(shù)據(jù)存儲平臺,它是Yahoo!云計(jì)算平臺重要的一部分。它的上層產(chǎn)品通常也稱為Sherpa。按照官方的 描述,”PNUTS, a massively parallel and geographically distributed database system for Yahoo!’s web applications.” PNUTS顯然就深諳CAP之道,考慮到大部分web應(yīng)用對一致性并不要求非常嚴(yán)格,在設(shè)計(jì)上放棄了對強(qiáng)一致性的追求。代替的是追求更高的 availability,容錯(cuò),更快速的響應(yīng)調(diào)用請求等。

          1. PNUTS簡介及特點(diǎn)

          • 地理分布式,分布在全球多個(gè)數(shù)據(jù)中心。由于大部分Web應(yīng)用都對響應(yīng)時(shí)間要求高,因此最好服務(wù)器部署在離用戶最近的本地機(jī)房。
          • 可擴(kuò)展,記錄數(shù)可支持從幾萬條到幾億條。數(shù)據(jù)容量增加不會影響性能。
          • schema-free,即非固定表結(jié)構(gòu)。實(shí)際使用key/value存儲的,一條記錄的多個(gè)字段實(shí)際是用json方式合并存在value中。因此delete和update必須指定primary key。但也支持批量查詢。
          • 高可用性及容錯(cuò)。從單個(gè)存儲節(jié)點(diǎn)到整個(gè)數(shù)據(jù)中心不可用都不會影響前端Web訪問。
          • 適合存相對小型的記錄,不適合存儲大文件,流媒體等。
          • 弱一致性保證。

          傳統(tǒng)的數(shù)據(jù)庫提供強(qiáng)一致性保證, 通常稱為“serialization transaction”,保證調(diào)用時(shí)序的一致性。但在web應(yīng)用中不是必須,比如用戶A修改了自己的資料或上傳了圖片,他的好友B短時(shí)間不能立即看到并 不是大的問題,通常的Web應(yīng)用都可以接受。PNUTS像大部分分布式key/value系統(tǒng)類似,提供的是弱一致性的支持,也就是支持“最終一致性 (eventually consistent)”。用戶B最終會看到用戶A的修改信息。

          未夠!但最終一致性并非可以適應(yīng)所有場合,比如用戶A修改了相冊的訪問權(quán)限,設(shè)置用戶C不能訪問,然后用戶A又上傳了新的圖片,如果用戶C處于另外 一個(gè)IDC訪問,如果圖片數(shù)據(jù)先同步成功,而權(quán)限記錄后同步的話,C實(shí)際上違反了A設(shè)置的權(quán)限而看到圖片了。因此對于部分場合最終一致性是不夠的。

          2. PNUTS實(shí)現(xiàn)

          2.1 Record-level mastering 記錄級別主節(jié)點(diǎn)

          每一條記錄都有一個(gè)主記錄。比如一個(gè)印度的用戶保存的記錄master在印度機(jī)房,通常修改都會調(diào)用印度。其他地方如美國用戶看這個(gè)用戶的資料調(diào)用 的是美國數(shù)據(jù)中心的資料,有可能取到的是舊版的數(shù)據(jù)。非master機(jī)房也可對記錄進(jìn)行修改,但需要master來統(tǒng)一管理。每行數(shù)據(jù)都有自己的版本控 制,如下圖所示。

          2.2 PNUTS的結(jié)構(gòu)

          每個(gè)數(shù)據(jù)中心的PNUTS結(jié)構(gòu)由四部分構(gòu)成
          Storage Units (SU) 存儲單元
          物理的存儲服務(wù)器,每個(gè)存儲服務(wù)器上面含有多個(gè)tablets,tablets是PNUTS上的基本存儲單元。一 個(gè)tablets是一個(gè)yahoo內(nèi)部格式的hash table的文件(hash table)或是一個(gè)MySQL innodb表(ordered table)。一個(gè)Tablet通常為幾百M(fèi)。一個(gè)SU上通常會存在幾百個(gè)tablets。
          Routers
          每個(gè)tablets在哪個(gè)SU上是通過查詢r(jià)outer獲得。一個(gè)數(shù)據(jù)中心內(nèi)router通??捎蓛膳_雙機(jī)備份的單元提供。
          Tablet Controller
          router的位置只是個(gè)內(nèi)存快照,實(shí)際的位置由Tablet Controller單元決定。
          Message Broker
          與遠(yuǎn)程數(shù)據(jù)的同步是由YMB提供,它是一個(gè)pub/sub的異步消息訂閱系統(tǒng)。

          2.3 Tablets尋址與切分

          存儲分hash和ordered data store。
          以hash為例介紹,先對所有的tablets按hash值分片,比如1-10,000屬于tablets 1, 10,000到20,000屬于tablets 2,依此類推分配完所有的hash范圍。一個(gè)大型的IDC通常會存在100萬以下的tablets, 1,000臺左右的SU。tablets屬于哪個(gè)SU由routers全部加載到內(nèi)存里面,因此router訪問速度極快,通常不會成為瓶頸。按照官方的 說法,系統(tǒng)的瓶頸只存在磁盤文件hash file訪問上。
          當(dāng)某個(gè)SU訪問量過大,則可將SU中部分tablets移到相對空閑的SU,并修改tablet controller的偏移記錄。router定位tablet失效之后會自動通過tablet controller重新加載到內(nèi)存。所以切分也相對容易實(shí)現(xiàn)。
          Tim也曾經(jīng)用MySQL實(shí)現(xiàn)過類似大規(guī)模存儲的系統(tǒng),當(dāng)時(shí)的做法是把每條記錄的key屬于哪個(gè)SU的信息保存到 一個(gè)字典里面,好處是切分可以獲得更大的靈活性,可以動態(tài)增加新的tablets,而不需要切分舊的tablets。但缺點(diǎn)就是字典沒法像router這 樣,可以高效的全部加載到內(nèi)存中。所以比較而言,在實(shí)際的應(yīng)用中,按段分片會更簡單,且已經(jīng)足夠使用。

          2.4 API訪問

          支持多種級別的數(shù)據(jù)訪問API:
          • Read-any 讀取的版本有可能是舊的,返回本地IDC的數(shù)據(jù),不檢查最新版本,性能最好。
          • Read-critical(required_version) 讀取指定版本,用戶修改資料之后調(diào)用返回比當(dāng)前版本更新的版本,以保證當(dāng)前用戶看到的不是修改前的記錄。
          • Read-latest 強(qiáng)制讀取最新,可能需要執(zhí)行遠(yuǎn)程IDC調(diào)用。比如上面例子介紹的讀取權(quán)限列表的調(diào)用。
          • Write 比如更新用戶資料
          • Test-and-set-write(required version) 只有當(dāng)記錄屬于指定的版本才執(zhí)行write,比如更新用戶積分等業(yè)務(wù),這個(gè)調(diào)用有點(diǎn)類似以前介紹的atom操作。

          Write調(diào)用示意圖

          3. PNUTS疑問

          記錄級別master的問題,比如master選取如何達(dá)到效率最佳,如何面對2個(gè)修改合并沖突?合并沖突據(jù)說是需要client自行來處理,

          這篇Details on Yahoo’s distributed database提 到的平均調(diào)用latency 100ms的問題。web應(yīng)用通常對每次數(shù)據(jù)的訪問最好在10ms之內(nèi)完成,因?yàn)槊總€(gè)web頁面實(shí)際上不止一個(gè)數(shù)據(jù)訪問的調(diào)用,經(jīng)常調(diào)用10次以上db的 訪問的頁面并不少見,因此如果平均latency在100ms以上那勢必影響頁面加載速度。不過yahoo!的開發(fā)人員回復(fù)paper中的數(shù)據(jù)實(shí)際是一個(gè) 老版本的測試,目前的版本,在實(shí)際生產(chǎn)環(huán)境的pnuts的latency會在10ms以下。

          另外PNUTS為什么要用消息系統(tǒng)代替replication/undo log?有何優(yōu)點(diǎn)?

          4. PNUTS感悟

          Web應(yīng)用使用通用的存儲服務(wù)是大勢所趨,類似BigTable, Amazon Dynamo/SimpleDB這樣的方案,但是目前除非使用Amazon提供的商用SimpleDB之外幾乎沒有通用的解決方案,每個(gè)公司甚至每個(gè)項(xiàng)目 需要面對及考慮數(shù)據(jù)規(guī)模增大的問題。比如初步統(tǒng)計(jì)下國內(nèi)研究可擴(kuò)展數(shù)據(jù)存儲及訪問的項(xiàng)目就有

          • 手機(jī)之家的數(shù)據(jù)訪問層封裝DAL 2.0
          • 盛大陳思儒寫的開源項(xiàng)目Amoeba,類似MySQL proxy
          • 國內(nèi)的Erlang geek @litaocheng 曾經(jīng)對Dynamo paper深有研究,正在開發(fā)開源的erlang Dynamo實(shí)現(xiàn)e2dynoma
          • 豆瓣的doubanDB,也是類Dynamo實(shí)現(xiàn)

          當(dāng)然上面幾個(gè)只是冰山一角,大部分互聯(lián)網(wǎng)公司都有自己的數(shù)據(jù)層分布及訪問實(shí)現(xiàn),只不過沒有對外公開而已。架構(gòu)師、DBA、程序員具備這方面的實(shí)踐經(jīng) 驗(yàn)及技能當(dāng)然是好事,但是如果業(yè)界能夠有通用穩(wěn)定的解決方案來解決大家的重復(fù)工作則對整個(gè)業(yè)界更佳。PNUTS雖然聲稱會開源,但是一直沒有進(jìn)一步消息。 而且即使開源是是開放核心代碼還是全部可用于部署的程序(比如YMB等)這也是一個(gè)問題。

          介紹內(nèi)容來自:http://timyang.net/architecture/yahoo-pnuts/

          瀏覽 25
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产小电影在线观看 | 先锋av资源在线 先锋影音成人在线 | 欧美性猛交ⅩXXX乱大交吃奶 | www.麻豆网91成人久久久 | 国产精品福利视频在线观看 |