圖1 Swift部署架構(gòu)

主要組件

Proxy Server

Proxy Server是提供Swift API的服務(wù)器進(jìn)程,負(fù)責(zé)Swift其余組件間的相互通信。對(duì)于每個(gè)客戶端的請(qǐng)求,它將在Ring中查詢Account、Container或Object的位置,并且相應(yīng)地轉(zhuǎn)發(fā)請(qǐng)求。Proxy提供了Rest-full API,并且符合標(biāo)準(zhǔn)的HTTP協(xié)議規(guī)范,這使得開發(fā)者可以快捷構(gòu)建定制的Client與Swift交互。

Storage Server

Storage Server提供了磁盤設(shè)備上的存儲(chǔ)服務(wù)。在Swift中有三類存儲(chǔ)服務(wù)器:Account、Container和Object。其中Container服務(wù)器負(fù)責(zé)處理Object的列表,Container服務(wù)器并不知道對(duì)象存放位置,只知道指定Container里存的哪些Object。這些Object信息以sqlite數(shù)據(jù)庫(kù)文件的形式存儲(chǔ)。Container服務(wù)器也做一些跟蹤統(tǒng)計(jì),例如Object的總數(shù)、Container的使用情況。

Consistency Servers

在磁盤上存儲(chǔ)數(shù)據(jù)并向外提供Rest-ful API并不是難以解決的問題,最主要的問題在于故障處理。Swift的Consistency Servers的目的是查找并解決由數(shù)據(jù)損壞和硬件故障引起的錯(cuò)誤。主要存在三個(gè)Server:Auditor、Updater和Replicator。 Auditor運(yùn)行在每個(gè)Swift服務(wù)器的后臺(tái)持續(xù)地掃描磁盤來檢測(cè)對(duì)象、Container和賬號(hào)的完整性。如果發(fā)現(xiàn)數(shù)據(jù)損壞,Auditor就會(huì)將該文件移動(dòng)到隔離區(qū)域,然后由Replicator負(fù)責(zé)用一個(gè)完好的拷貝來替代該數(shù)據(jù)。圖2給出了隔離對(duì)象的處理流圖。 在系統(tǒng)高負(fù)荷或者發(fā)生故障的情況下,Container或賬號(hào)中的數(shù)據(jù)不會(huì)被立即更新。如果更新失敗,該次更新在本地文件系統(tǒng)上會(huì)被加入隊(duì)列,然后Updaters會(huì)繼續(xù)處理這些失敗了的更新工作,其中由Account Updater和Container Updater分別負(fù)責(zé)Account和Object列表的更新。 Replicator的功能是處理數(shù)據(jù)的存放位置是否正確并且保持?jǐn)?shù)據(jù)的合理拷貝數(shù),它的設(shè)計(jì)目的是Swift服務(wù)器在面臨如網(wǎng)絡(luò)中斷或者驅(qū)動(dòng)器故障等臨時(shí)性故障情況時(shí)可以保持系統(tǒng)的一致性。

分享到

tangrong

相關(guān)推薦