中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

OpenstackSwift原理、架構(gòu)與API介紹-創(chuàng)新互聯(lián)

背景與概覽

Swift 最初是由 Rackspace 公司開(kāi)發(fā)的高可用分布式對(duì)象存儲(chǔ)服務(wù),并于 2010 年貢獻(xiàn)給 OpenStack 開(kāi)源社區(qū)作為其最初的核心子項(xiàng)目之一,為其 Nova 子項(xiàng)目提供虛機(jī)鏡像存儲(chǔ)服務(wù)。Swift 構(gòu)筑在比較便宜的標(biāo)準(zhǔn)硬件存儲(chǔ)基礎(chǔ)設(shè)施之上,無(wú)需采用 RAID(磁盤(pán)冗余陣列),通過(guò)在軟件層面引入一致性散列技術(shù)和數(shù)據(jù)冗余性,犧牲一定程度的數(shù)據(jù)一致性來(lái)達(dá)到高可用性和可伸縮性,支持多租戶(hù)模式、容器和對(duì)象讀寫(xiě)操作,適合解決互聯(lián)網(wǎng)的應(yīng)用場(chǎng)景下非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)問(wèn)題。

成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),朝陽(yáng)網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:朝陽(yáng)等地區(qū)。朝陽(yáng)做網(wǎng)站價(jià)格咨詢(xún):13518219792

此項(xiàng)目是基于 Python 開(kāi)發(fā)的,采用 Apache 2.0 許可協(xié)議,可用來(lái)開(kāi)發(fā)商用系統(tǒng)。

基本原理

一致性散列(Consistent Hashing)

面對(duì)海量級(jí)別的對(duì)象,需要存放在成千上萬(wàn)臺(tái)服務(wù)器和硬盤(pán)設(shè)備上,首先要解決尋址問(wèn)題,即如何將對(duì)象分布到這些設(shè)備地址上。Swift 是基于一致性散列技術(shù),通過(guò)計(jì)算可將對(duì)象均勻分布到虛擬空間的虛擬節(jié)點(diǎn)上,在增加或刪除節(jié)點(diǎn)時(shí)可大大減少需移動(dòng)的數(shù)據(jù)量;虛擬空間大小通常采用 2 的 n 次冪,便于進(jìn)行高效的移位操作;然后通過(guò)獨(dú)特的數(shù)據(jù)結(jié)構(gòu) Ring(環(huán))再將虛擬節(jié)點(diǎn)映射到實(shí)際的物理存儲(chǔ)設(shè)備上,完成尋址過(guò)程。

圖 1. 一致性散列

如圖 1 中所示,以逆時(shí)針?lè)较蜻f增的散列空間有 4 個(gè)字節(jié)長(zhǎng)共 32 位,整數(shù)范圍是[0~232-1];將散列結(jié)果右移 m 位,可產(chǎn)生 232-m個(gè)虛擬節(jié)點(diǎn),例如 m=29 時(shí)可產(chǎn)生 8 個(gè)虛擬節(jié)點(diǎn)。在實(shí)際部署的時(shí)候需要經(jīng)過(guò)仔細(xì)計(jì)算得到合適的虛擬節(jié)點(diǎn)數(shù),以達(dá)到存儲(chǔ)空間和工作負(fù)載之間的平衡。

數(shù)據(jù)一致性模型(Consistency Model)

按照 Eric Brewer 的 CAP(Consistency,Availability,Partition Tolerance)理論,無(wú)法同時(shí)滿(mǎn)足 3 個(gè)方面,Swift 放棄嚴(yán)格一致性(滿(mǎn)足 ACID 事務(wù)級(jí)別),而采用最終一致性模型(Eventual Consistency),來(lái)達(dá)到高可用性和無(wú)限水平擴(kuò)展能力。為了實(shí)現(xiàn)這一目標(biāo),Swift 采用 Quorum 仲裁協(xié)議(Quorum 有法定投票人數(shù)的含義):

(1)定義:N:數(shù)據(jù)的副本總數(shù);W:寫(xiě)操作被確認(rèn)接受的副本數(shù)量;R:讀操作的副本數(shù)量

(2)強(qiáng)一致性:R+W>N,以保證對(duì)副本的讀寫(xiě)操作會(huì)產(chǎn)生交集,從而保證可以讀取到最新版本;如果 W=N,R=1,則需要全部更新,適合大量讀少量寫(xiě)操作場(chǎng)景下的強(qiáng)一致性;如果 R=N,W=1,則只更新一個(gè)副本,通過(guò)讀取全部副本來(lái)得到最新版本,適合大量寫(xiě)少量讀場(chǎng)景下的強(qiáng)一致性。

(3)弱一致性:R+W<=N,如果讀寫(xiě)操作的副本集合不產(chǎn)生交集,就可能會(huì)讀到臟數(shù)據(jù);適合對(duì)一致性要求比較低的場(chǎng)景。

Swift 針對(duì)的是讀寫(xiě)都比較頻繁的場(chǎng)景,所以采用了比較折中的策略,即寫(xiě)操作需要滿(mǎn)足至少一半以上成功 W >N/2,再保證讀操作與寫(xiě)操作的副本集合至少產(chǎn)生一個(gè)交集,即 R+W>N。Swift 默認(rèn)配置是 N=3,W=2>N/2,R=1 或 2,即每個(gè)對(duì)象會(huì)存在 3 個(gè)副本,這些副本會(huì)盡量被存儲(chǔ)在不同區(qū)域的節(jié)點(diǎn)上;W=2 表示至少需要更新 2 個(gè)副本才算寫(xiě)成功;當(dāng) R=1 時(shí)意味著某一個(gè)讀操作成功便立刻返回,此種情況下可能會(huì)讀取到舊版本(弱一致性模型);當(dāng) R=2 時(shí),需要通過(guò)在讀操作請(qǐng)求頭中增加 x-newest=true 參數(shù)來(lái)同時(shí)讀取 2 個(gè)副本的元數(shù)據(jù)信息,然后比較時(shí)間戳來(lái)確定哪個(gè)是最新版本(強(qiáng)一致性模型);如果數(shù)據(jù)出現(xiàn)了不一致,后臺(tái)服務(wù)進(jìn)程會(huì)在一定時(shí)間窗口內(nèi)通過(guò)檢測(cè)和復(fù)制協(xié)議來(lái)完成數(shù)據(jù)同步,從而保證達(dá)到最終一致性。如圖 2 所示:

圖 2. Quorum 協(xié)議示例

環(huán)的數(shù)據(jù)結(jié)構(gòu)

環(huán)是為了將虛擬節(jié)點(diǎn)(分區(qū))映射到一組物理存儲(chǔ)設(shè)備上,并提供一定的冗余度而設(shè)計(jì)的,其數(shù)據(jù)結(jié)構(gòu)由以下信息組成:

  • 存儲(chǔ)設(shè)備列表、設(shè)備信息包括唯一標(biāo)識(shí)號(hào)(id)、區(qū)域號(hào)(zone)、權(quán)重(weight)、IP 地址(ip)、端口(port)、設(shè)備名稱(chēng)(device)、元數(shù)據(jù)(meta)。

  • 分區(qū)到設(shè)備映射關(guān)系(replica2part2dev_id 數(shù)組)

  • 計(jì)算分區(qū)號(hào)的位移(part_shift 整數(shù),即圖 1 中的 m)

以查找一個(gè)對(duì)象的計(jì)算過(guò)程為例:

圖 3. 環(huán)的數(shù)據(jù)機(jī)構(gòu)

使用對(duì)象的層次結(jié)構(gòu) account/container/object 作為鍵,使用 MD5 散列算法得到一個(gè)散列值,對(duì)該散列值的前 4 個(gè)字節(jié)進(jìn)行右移操作得到分區(qū)索引號(hào),移動(dòng)位數(shù)由上面的 part_shift 設(shè)置指定;按照分區(qū)索引號(hào)在分區(qū)到設(shè)備映射表(replica2part2dev_id)里查找該對(duì)象所在分區(qū)的對(duì)應(yīng)的所有設(shè)備編號(hào),這些設(shè)備會(huì)被盡量選擇部署在不同區(qū)域(Zone)內(nèi),區(qū)域只是個(gè)抽象概念,它可以是某臺(tái)機(jī)器,某個(gè)機(jī)架,甚至某個(gè)建筑內(nèi)的機(jī)群,以提供高級(jí)別的冗余性,建議至少部署 5 個(gè)區(qū)域;權(quán)重參數(shù)是個(gè)相對(duì)值,可以來(lái)根據(jù)磁盤(pán)的大小來(lái)調(diào)節(jié),權(quán)重越大表示可分配的空間越多,可部署更多的分區(qū)。

Swift 為賬戶(hù),容器和對(duì)象分別定義了的環(huán),查找賬戶(hù)和容器的是同樣的過(guò)程。

數(shù)據(jù)模型

Swift 采用層次數(shù)據(jù)模型,共設(shè)三層邏輯結(jié)構(gòu):Account/Container/Object(即賬戶(hù)/容器/對(duì)象),每層節(jié)點(diǎn)數(shù)均沒(méi)有限制,可以任意擴(kuò)展。這里的賬戶(hù)和個(gè)人賬戶(hù)不是一個(gè)概念,可理解為租戶(hù),用來(lái)做頂層的隔離機(jī)制,可以被多個(gè)個(gè)人賬戶(hù)所共同使用;容器代表封裝一組對(duì)象,類(lèi)似文件夾或目錄;葉子節(jié)點(diǎn)代表對(duì)象,由元數(shù)據(jù)和內(nèi)容兩部分組成,如圖 4 所示:

圖 4. Swift 數(shù)據(jù)模型

系統(tǒng)架構(gòu)

Swift 采用完全對(duì)稱(chēng)、面向資源的分布式系統(tǒng)架構(gòu)設(shè)計(jì),所有組件都可擴(kuò)展,避免因單點(diǎn)失效而擴(kuò)散并影響整個(gè)系統(tǒng)運(yùn)轉(zhuǎn);通信方式采用非阻塞式 I/O 模式,提高了系統(tǒng)吞吐和響應(yīng)能力。

圖 5. Swift 系統(tǒng)架構(gòu)

Swift 組件包括:

  • 代理服務(wù)(Proxy Server):對(duì)外提供對(duì)象服務(wù) API,會(huì)根據(jù)環(huán)的信息來(lái)查×××地址并轉(zhuǎn)發(fā)用戶(hù)請(qǐng)求至相應(yīng)的賬戶(hù)、容器或者對(duì)象服務(wù);由于采用無(wú)狀態(tài)的 REST 請(qǐng)求協(xié)議,可以進(jìn)行橫向擴(kuò)展來(lái)均衡負(fù)載。

  • 認(rèn)證服務(wù)(Authentication Server):驗(yàn)證訪問(wèn)用戶(hù)的身份信息,并獲得一個(gè)對(duì)象訪問(wèn)令牌(Token),在一定的時(shí)間內(nèi)會(huì)一直有效;驗(yàn)證訪問(wèn)令牌的有效性并緩存下來(lái)直至過(guò)期時(shí)間。

  • 緩存服務(wù)(Cache Server):緩存的內(nèi)容包括對(duì)象服務(wù)令牌,賬戶(hù)和容器的存在信息,但不會(huì)緩存對(duì)象本身的數(shù)據(jù);緩存服務(wù)可采用 Memcached 集群,Swift 會(huì)使用一致性散列算法來(lái)分配緩存地址。

  • 賬戶(hù)服務(wù)(Account Server):提供賬戶(hù)元數(shù)據(jù)和統(tǒng)計(jì)信息,并維護(hù)所含容器列表的服務(wù),每個(gè)賬戶(hù)的信息被存儲(chǔ)在一個(gè) SQLite 數(shù)據(jù)庫(kù)中。

  • 容器服務(wù)(Container Server):提供容器元數(shù)據(jù)和統(tǒng)計(jì)信息,并維護(hù)所含對(duì)象列表的服務(wù),每個(gè)容器的信息也存儲(chǔ)在一個(gè) SQLite 數(shù)據(jù)庫(kù)中。

  • 對(duì)象服務(wù)(Object Server):提供對(duì)象元數(shù)據(jù)和內(nèi)容服務(wù),每個(gè)對(duì)象的內(nèi)容會(huì)以文件的形式存儲(chǔ)在文件系統(tǒng)中,元數(shù)據(jù)會(huì)作為文件屬性來(lái)存儲(chǔ),建議采用支持?jǐn)U展屬性的 XFS 文件系統(tǒng)。

  • 復(fù)制服務(wù)(Replicator):會(huì)檢測(cè)本地分區(qū)副本和遠(yuǎn)程副本是否一致,具體是通過(guò)對(duì)比散列文件和高級(jí)水印來(lái)完成,發(fā)現(xiàn)不一致時(shí)會(huì)采用推式(Push)更新遠(yuǎn)程副本,例如對(duì)象復(fù)制服務(wù)會(huì)使用遠(yuǎn)程文件拷貝工具 rsync 來(lái)同步;另外一個(gè)任務(wù)是確保被標(biāo)記刪除的對(duì)象從文件系統(tǒng)中移除。

  • 更新服務(wù)(Updater):當(dāng)對(duì)象由于高負(fù)載的原因而無(wú)法立即更新時(shí),任務(wù)將會(huì)被序列化到在本地文件系統(tǒng)中進(jìn)行排隊(duì),以便服務(wù)恢復(fù)后進(jìn)行異步更新;例如成功創(chuàng)建對(duì)象后容器服務(wù)器沒(méi)有及時(shí)更新對(duì)象列表,這個(gè)時(shí)候容器的更新操作就會(huì)進(jìn)入排隊(duì)中,更新服務(wù)會(huì)在系統(tǒng)恢復(fù)正常后掃描隊(duì)列并進(jìn)行相應(yīng)的更新處理。

  • 審計(jì)服務(wù)(Auditor):檢查對(duì)象,容器和賬戶(hù)的完整性,如果發(fā)現(xiàn)比特級(jí)的錯(cuò)誤,文件將被隔離,并復(fù)制其他的副本以覆蓋本地?fù)p壞的副本;其他類(lèi)型的錯(cuò)誤會(huì)被記錄到日志中。

  • 賬戶(hù)清理服務(wù)(Account Reaper):移除被標(biāo)記為刪除的賬戶(hù),刪除其所包含的所有容器和對(duì)象。

API

Swift 通過(guò) Proxy Server 向外提供基于 HTTP 的 REST 服務(wù)接口,對(duì)賬戶(hù)、容器和對(duì)象進(jìn)行 CRUD 等操作。在訪問(wèn) Swift 服務(wù)之前,需要先通過(guò)認(rèn)證服務(wù)獲取訪問(wèn)令牌,然后在發(fā)送的請(qǐng)求中加入頭部信息 X-Auth-Token。下面是請(qǐng)求返回賬戶(hù)中的容器列表的示例:

GET /v1/<account> HTTP/1.1
Host: storage.swift.com
X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
響應(yīng)頭部信息中包含狀態(tài)碼 200,容器列表包含在響應(yīng)體中:
HTTP/1.1 200 Ok
Date: Thu, 07 Jan 2013 18:57:07 GMT
Server: Apache
Content-Type: text/plain; charset=UTF-8
Content-Length: 32

p_w_picpaths
movies
documents
backups

Swift 支持的所有操作可以總結(jié)為表 1:

表 1. Swift RESTful API 總結(jié)
資源類(lèi)型URLGETPUTPOSTDELETEHEAD
賬戶(hù)/account/獲取容器列表---獲取賬戶(hù)元數(shù)據(jù)
容器/account/container獲取對(duì)象列表創(chuàng)建容器更新容器元數(shù)據(jù)刪除容器獲取容器元數(shù)據(jù)
對(duì)象/account/container/object獲取對(duì)象內(nèi)容和元數(shù)據(jù)創(chuàng)建、更新或拷貝對(duì)象更新對(duì)象元數(shù)據(jù)刪除對(duì)象獲取對(duì)象元數(shù)據(jù)

詳細(xì)的 API 規(guī)范可以參考開(kāi)發(fā)者指南。應(yīng)用開(kāi)發(fā)可采用 Swift 項(xiàng)目本身已經(jīng)包含的 Python 的綁定實(shí)現(xiàn);如果使用其它編程語(yǔ)言,可以參考 Rackspace 兼容 Swift 的 Cloud Files API,支持 Java,.Net,Ruby,PHP 等語(yǔ)言綁定。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:OpenstackSwift原理、架構(gòu)與API介紹-創(chuàng)新互聯(lián)
地址分享:http://www.rwnh.cn/article46/dhhoeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、全網(wǎng)營(yíng)銷(xiāo)推廣小程序開(kāi)發(fā)、響應(yīng)式網(wǎng)站、微信公眾號(hào)關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
道真| 蓬莱市| 仁化县| 武川县| 肇源县| 磐石市| 长乐市| 扎赉特旗| 龙南县| 黎平县| 兰州市| 黑山县| 当阳市| 西峡县| 若羌县| 六安市| 铜鼓县| 师宗县| 开阳县| 永靖县| 托克托县| 濮阳县| 海门市| 库车县| 上林县| 镇赉县| 大丰市| 高要市| 垣曲县| 香格里拉县| 乌审旗| 囊谦县| 原平市| 吴堡县| 兴安县| 波密县| 萨嘎县| 海阳市| 澄城县| 宁武县| 突泉县|