自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Atlas:百度Key-value云數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)揭秘

云計(jì)算 其他數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)
本文介紹百度云使用的key-value存儲(chǔ)系統(tǒng)atlas的設(shè)計(jì),思路相當(dāng)贊。

MSST 2015的論文(論文在這里)介紹百度云使用的key-value存儲(chǔ)系統(tǒng)atlas的設(shè)計(jì),思路相當(dāng)贊。簡(jiǎn)單總結(jié)一下,建議想深入學(xué)習(xí)的同學(xué)直接閱讀論文。

存儲(chǔ)場(chǎng)景

百度云94%的文件在[128KB-256KB]之間,所以atlas主要針對(duì)小文件存儲(chǔ)

百度云前面有CDN,到達(dá)atlas的請(qǐng)求基本都是隨機(jī)訪問(wèn),atlas是隨機(jī)訪問(wèn)的存儲(chǔ)引擎,不支持range操作

總體架構(gòu)

 

enter image description here

atlas主要由PIS和RBS兩個(gè)部分組成,下面將分別介紹

PIS存儲(chǔ)接口

 

enter image description here

atlas的PIS模塊(patch and index slice)直接面向用戶,與其他KV存儲(chǔ)引擎類似,暴露put/get/delete接口,不同的是atlas的key是規(guī)定長(zhǎng)度128字節(jié)的GUID。

PIS以slot(slice)為單位進(jìn)行數(shù)據(jù)管理,用戶的key-value會(huì)分散存儲(chǔ)到多個(gè)slot里,put時(shí)atlas的客戶端會(huì)根據(jù)key計(jì)算hash,并對(duì)slot數(shù)量取模,將key路由至某個(gè)slot,每個(gè)slot單獨(dú)進(jìn)行數(shù)據(jù)管理。

 

enter image description here

PIS的primary副本接收到用戶的put請(qǐng)求,會(huì)將請(qǐng)求轉(zhuǎn)發(fā)至多個(gè)secondary副本,每個(gè)副本都將value追加至本地patch(類似于log文件),并記錄key的value在patch里的位置信息(offset、length),當(dāng)patch到達(dá)64MB時(shí),patch將不再寫入數(shù)據(jù),PIS會(huì)產(chǎn)生一個(gè)新的patch文件用于寫,同時(shí)會(huì)將寫滿的patch以block的形式存儲(chǔ)到RBS里,patch存儲(chǔ)至RBS時(shí),RBS會(huì)分配一個(gè)唯一的blockid,此時(shí)PIS將key==>(blockid、length、offset)的映射關(guān)系寫入index模塊(一個(gè)類似于 google leveldb的系統(tǒng))。

PIS接收到get請(qǐng)求時(shí),首先在patch里查找key是否存儲(chǔ),如果存在則直接從patch讀取value,返回給用戶;如果key在 patch里不存在,則在index里查找,如果index里未找到,則說(shuō)明atlas并沒(méi)有存儲(chǔ)這個(gè)key;如果在index里找到,則根據(jù)(blockid、length、offset)從RBS里讀取value,返回給用戶。

PIS處理delete請(qǐng)求與leveldb類似,會(huì)新寫入一條該key的記錄,標(biāo)示為key已刪除。

#p#

RBS接口

 

enter image description here

RBS(raid-like block storage)提供block的讀寫刪接口,block長(zhǎng)度固定為64MB,RBS里block只能整個(gè)寫入和刪除,但支持部分讀取。

RBS包含一個(gè)中心管理節(jié)點(diǎn)(master-slave結(jié)構(gòu)),以及一組存儲(chǔ)節(jié)點(diǎn)(part-server),寫入block時(shí),RBS不再使用傳統(tǒng)的多副本來(lái)保證數(shù)據(jù)可靠性,而是通過(guò)erasure-code來(lái)保證,極大的節(jié)省存儲(chǔ)成本。

64MB的block會(huì)被RBS的客戶端切分成8個(gè)8MB的part,通過(guò)8+4的erasure code計(jì)算出4個(gè)4MB的part,總共12個(gè)part;寫入時(shí),首先從中心節(jié)點(diǎn)請(qǐng)求分配一個(gè)唯一的blockid,同時(shí)分配12個(gè) part-server用于寫入12個(gè)part(實(shí)際上給了15個(gè)part-server信息,3個(gè)是備用的,如果存儲(chǔ)12個(gè)part時(shí),有某些part 存儲(chǔ)失敗,直接使用備用的part-server,而不用重新向中心節(jié)點(diǎn)發(fā)送新的請(qǐng)求,減少了與中心節(jié)點(diǎn)的交互次數(shù));當(dāng)12個(gè)part存儲(chǔ)成功后,將 part與part-server的對(duì)應(yīng)關(guān)系更新至中心節(jié)點(diǎn)。

當(dāng)需要訪問(wèn)某個(gè)block時(shí),RBS客戶端向從中心管理節(jié)點(diǎn)查詢block所在的part-server,然后從part-server讀取數(shù)據(jù);如果讀取的part-server當(dāng)時(shí)處于故障狀態(tài),會(huì)讀取block內(nèi)其他至少8個(gè)part,來(lái)恢復(fù)該part-server里的數(shù)據(jù)。

刪除空間回收

PIS里index里的key==>(block, length, offset)信息、RBS里的block==>create-time信息會(huì)被推送到離線的hadoop集群,每天計(jì)算哪些block是比較老的 (比如2周以前創(chuàng)建的),并且有效的使用空間低于某個(gè)閾值(比如80%),這批block被認(rèn)為是需要回收的,atlas將block里有效的數(shù)據(jù)(沒(méi)被刪除或覆蓋)重新寫入一份,即可將block刪除掉。

博文出處:http://blog.yunnotes.net/index.php/baidu-atlas-key-value-store/

責(zé)任編輯:Ophira 來(lái)源: Yun Notes
相關(guān)推薦

2010-07-19 10:05:56

ibmdw存儲(chǔ)系統(tǒng)

2016-04-15 13:45:48

2016-06-15 14:21:09

2016-11-17 11:24:32

數(shù)據(jù)庫(kù)大數(shù)據(jù)

2018-03-07 10:35:45

云計(jì)算存儲(chǔ)系統(tǒng)

2020-12-31 20:32:47

AI

2014-07-25 17:12:39

數(shù)據(jù)庫(kù)WOT2014MongoDB

2013-06-27 10:23:30

百度云百度開放云

2018-06-15 08:23:55

Key-Value數(shù)據(jù)庫(kù)MVCC

2024-02-27 07:27:58

云原生推薦系統(tǒng)架構(gòu)云原生技術(shù)棧

2016-10-13 15:19:34

百度

2013-04-24 10:37:38

百度地圖云存儲(chǔ)

2012-05-28 22:51:53

百度

2020-05-29 11:03:21

IBM

2013-07-01 16:36:26

百度云推送免費(fèi)云推送移動(dòng)開發(fā)

2013-07-16 15:05:03

云推送極光推送

2012-10-19 09:47:30

百度云百度音樂(lè)云計(jì)算

2025-01-17 08:17:55

2013-01-16 09:56:48

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)