亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

OpenStack的Swift組件詳解

 更新時(shí)間:2021年04月27日 09:57:43   作者:萌萌哥的春天  
這篇文章主要介紹了OpenStack的Swift組件,對swift感興趣的同學(xué),可以參考下

一:簡介

背景

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

2. Swift 包括2個(gè)組成部分,一個(gè)是代理服務(wù)(proxy),一個(gè)是存儲(chǔ)服務(wù)(storage)。

  • 代理服務(wù)是Swift內(nèi)部存儲(chǔ)的拓?fù)溥壿?,即一個(gè)具體文件位于哪個(gè)存儲(chǔ)節(jié)點(diǎn)的哪個(gè)區(qū)上。它同時(shí)是一個(gè)web服務(wù)器,通過http或https對外提供REST API服務(wù)。
  • 存儲(chǔ)服務(wù)是負(fù)責(zé)文件存儲(chǔ)的服務(wù),由3個(gè)組件組成:account-server、container-server、object-server。其中object-server負(fù)責(zé)具體的文件存儲(chǔ),container-server包含到每個(gè)object的索引,account-server包含到每個(gè)container 的索引。

原理

1. 一致性散列(Consistent Hashing):Swift 是基于一致性散列技術(shù),通過計(jì)算可將對象均勻分布到虛擬空間的虛擬節(jié)點(diǎn)上,在增加或刪除節(jié)點(diǎn)時(shí)可大大減少需移動(dòng)的數(shù)據(jù)量;虛擬空間大小通常采用 2 的 n 次冪,便于進(jìn)行高效的移位操作;然后通過獨(dú)特的數(shù)據(jù)結(jié)構(gòu) Ring(環(huán))再將虛擬節(jié)點(diǎn)映射到實(shí)際的物理存儲(chǔ)設(shè)備上,完成尋址過程。

  • 1. 平衡性:平衡性是指哈希的結(jié)果能夠盡可能的分布到所有的緩沖中去,這樣可以使得所有緩沖空間能夠都得到利用。為了更好的滿足平衡性,引入了虛擬節(jié)點(diǎn)概念,虛擬節(jié)點(diǎn)是實(shí)際節(jié)點(diǎn)在hash空間的復(fù)制品,一個(gè)實(shí)際節(jié)點(diǎn)對應(yīng)若干個(gè)虛擬節(jié)點(diǎn),這個(gè)對應(yīng)的個(gè)數(shù)也稱為復(fù)制個(gè)數(shù),虛擬節(jié)點(diǎn)在hash空間以hash值排列。
  • 2. 單調(diào)性:單調(diào)性是指如果已經(jīng)有些內(nèi)容通過Hash分派到相應(yīng)的緩沖中,又有新的緩沖加入到系統(tǒng)中,哈希的結(jié)果應(yīng)能夠保證原有已分配的內(nèi)容可以被映射到原有或者新的緩沖中區(qū),而不會(huì)被映射到舊的或者其他緩沖區(qū)。
  • 3. 分散性:在分布式環(huán)境中,客戶端可能看不到所有的緩沖,而只能看到其中一部分。當(dāng)終端希望通過哈希過程將內(nèi)容映射到緩沖上時(shí),由于不同的客戶端所看到的緩沖范圍可能不同,從而導(dǎo)致得到的Hash結(jié)果不一致,導(dǎo)致結(jié)果相同的內(nèi)容被映射到不用的緩沖區(qū)中。這種情況應(yīng)該被避免,因?yàn)檫@將會(huì)導(dǎo)致相同的內(nèi)容將會(huì)被映射到不同緩沖區(qū)中,降低了系統(tǒng)的存儲(chǔ)效率。
  • 4. 負(fù)載:負(fù)載時(shí)對分散性要求的另一個(gè)維度。既然相同的內(nèi)容可能被映射到不同的緩沖中去,那么對于同一個(gè)緩沖而言,就有可能被不同的用戶映射不同的內(nèi)容。與分散性一樣,這種情況應(yīng)該被避免。
  • 5. 如圖所示,以逆時(shí)針方向遞增的散列空間有 4 個(gè)字節(jié)長共 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)過仔細(xì)計(jì)算得到合適的虛擬節(jié)點(diǎn)數(shù),以達(dá)到存儲(chǔ)空間和工作負(fù)載之間的平衡。

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

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

  • 定義:N:數(shù)據(jù)的副本總數(shù);W:寫操作被確認(rèn)接受的副本數(shù)量;R:讀操作的副本數(shù)量
  •  強(qiáng)一致性:R+W>N,以保證對副本的讀寫操作會(huì)產(chǎn)生交集,從而保證可以讀取到最新版本;如果 W=N,R=1,則需要全部更新,適合大量讀少量寫操作場景下的強(qiáng)一致性;如果 R=N,W=1,則只更新一個(gè)副本,通過讀取全部副本來得到最新版本,適合大量寫少量讀場景下的強(qiáng)一致性。
  •  弱一致性:R+W<=N,如果讀寫操作的副本集合不產(chǎn)生交集,就可能會(huì)讀到臟數(shù)據(jù);適合對一致性要求比較低的場景。

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

3. 環(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í)號(id)、區(qū)域號(zone)、權(quán)重(weight)、IP 地址(ip)、端口(port)、設(shè)備名稱(device)、元數(shù)據(jù)(meta)。
  • 分區(qū)到設(shè)備映射關(guān)系(replica2part2dev_id 數(shù)組)。
  • 計(jì)算分區(qū)號的位移(part_shift 整數(shù))。

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

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

Swift 采用層次數(shù)據(jù)模型,共設(shè)三層邏輯結(jié)構(gòu):Account/Container/Object(即賬戶/容器/對象),每層節(jié)點(diǎn)數(shù)均沒有限制,可以任意擴(kuò)展。

賬戶和個(gè)人賬戶不是一個(gè)概念,可理解為租戶,用來做頂層的隔離機(jī)制,可以被多個(gè)個(gè)人賬戶所共同使用;

容器代表封裝一組對象,類似文件夾或目錄;葉子節(jié)點(diǎn)代表對象,由元數(shù)據(jù)和內(nèi)容兩部分組成,如圖所示:

特性

1.大量對象的存儲(chǔ)(Storageoflargenumberofobjects)。

2. 大對象的存儲(chǔ)(Storageoflargesizedobjects)。

3. 數(shù)據(jù)冗余(DataRedundancy)。

4. 檔案能力——存儲(chǔ)大數(shù)據(jù)集(Archivalcapabilities-Workwithlargedatasets)。

5. 虛擬機(jī)和云應(yīng)用的數(shù)據(jù)容器(Datacontainerforvirtualmachinesandcloudapps)。

6. 流媒體的能力(MediaStreamingcapabilities)。

7. 對象存儲(chǔ)安全(Securestorageofobjects)。

8. 備份和檔案(Backupandarchival)。

9. 極高的擴(kuò)展性(Extremescalability)

二:架構(gòu)

核心架構(gòu)

組件詳解

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

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

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

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

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

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

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

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

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

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

Swift對CAP的支持程度

1. CAP概述:美國著名科學(xué)家,Berkerly大學(xué)Brewer教授提出的一個(gè)分布式系統(tǒng)不能同時(shí)滿足一致性,可用性和分區(qū)容錯(cuò)性這三個(gè)需求,最多只能同時(shí)滿足兩個(gè)。重要屬性:

  • 一致性(Consistency):任何一個(gè)讀操作總是能讀取到之前完成的寫操作結(jié)果,也就是在分布式環(huán)境中,多點(diǎn)的數(shù)據(jù)是一致的。
  • 可用性(Availability):每一個(gè)操作總是能夠在確定的時(shí)間內(nèi)返回,也就是系統(tǒng)隨時(shí)都是可用的。
  • 分區(qū)可容忍性(ToleranceofnetworkPartition):在出現(xiàn)網(wǎng)絡(luò)分區(qū)(比如斷網(wǎng))的情況下,分離的系統(tǒng)也能正常運(yùn)行。

2. Swift對CAP的支持

  • Consistency:Swift的一致性歸為弱一致性模型。Swift 由 updater 保證最終一致性,auditor 保證存儲(chǔ)對象的完整性。Swift 只能保證數(shù)據(jù)的最終一致性,即,如果upload(update也是一種upload)一個(gè)object,從其他客戶端GET這個(gè)object,不一定是最新的。
  • Availability:基于python對hash的原生支持,swift中廣泛使用了hash算法。比如均衡ring中partition的分布,objectupdate備份策略。sqlite控制account/container/object的相關(guān)信息,簡化了維護(hù)成本。

三:常用操作

以上就是OpenStack的Swift組件詳解的詳細(xì)內(nèi)容,更多關(guān)于OpenStack的Swift的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何刪掉編程中的?Switch?語句

    如何刪掉編程中的?Switch?語句

    多重方法是一種有趣的方式,可以幫你擺脫令人討厭的?switch,這篇文章主要介紹了如何刪掉編程中的?Switch?語句,需要的朋友可以參考下
    2022-09-09
  • 初探Swift3.0帶來的變化匯總

    初探Swift3.0帶來的變化匯總

    這個(gè)周末抽空看了下swift3.0的變化,今天小編通過本教程給大家分享Swift3.0帶來的變化,非常不錯(cuò),感興趣的朋友參考下吧
    2016-12-12
  • 用Swift編寫自動(dòng)錄音器

    用Swift編寫自動(dòng)錄音器

    這篇文章主要介紹了用Swift編寫自動(dòng)錄音器,有需要的朋友可以借鑒下
    2015-07-07
  • Swift之UITabBarController 導(dǎo)航控制器的自定義

    Swift之UITabBarController 導(dǎo)航控制器的自定義

    本文給大家介紹swift導(dǎo)航控制器之UITabBarController,本文通過代碼實(shí)例給大家講解swift導(dǎo)航控制器,導(dǎo)航控制器類繼承UITabBarController,代碼簡單易懂,需要的朋友可以參考下
    2015-10-10
  • Swift5中從原始文本創(chuàng)建字符串的方法

    Swift5中從原始文本創(chuàng)建字符串的方法

    這篇文章主要給大家介紹了關(guān)于Swift5中從原始文本創(chuàng)建字符串的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Swift5具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • swift語言Codable?用法及原理詳解

    swift語言Codable?用法及原理詳解

    這篇文章主要為大家介紹了swift語言Codable?用法及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 詳解Swift中的下標(biāo)訪問用法

    詳解Swift中的下標(biāo)訪問用法

    在Swift中我們可以用subscript函數(shù)來定義下標(biāo),從而通過下標(biāo)來訪問數(shù)組與字典等數(shù)據(jù)結(jié)構(gòu),這里我們就來詳解Swift中的下標(biāo)訪問用法:
    2016-07-07
  • Swift Extension擴(kuò)展得使用詳細(xì)介紹

    Swift Extension擴(kuò)展得使用詳細(xì)介紹

    在swift中,extension與Objective-C的category有點(diǎn)類似,但是extension比起category來說更加強(qiáng)大和靈活,它不僅可以擴(kuò)展某種類型或結(jié)構(gòu)體的方法,同時(shí)它還可以與protocol等結(jié)合使用,編寫出更加靈活和強(qiáng)大的代碼
    2022-09-09
  • 詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕

    詳解如何在SwiftUI中創(chuàng)建懸浮操作按鈕

    懸浮操作按鈕(Floating Action Button, FAB)是一種在 Android 和 Material Design 中使用的 UI 元素,它用于觸發(fā)特定屏幕的主要操作,下面我們就來詳細(xì)介紹一下如何在SwiftUI中創(chuàng)建懸浮操作按鈕,需要的朋友可以參考下
    2023-10-10
  • Swift讓輸入框跟隨鍵盤彈起避免輸入輸入法擋住輸入框問題

    Swift讓輸入框跟隨鍵盤彈起避免輸入輸入法擋住輸入框問題

    這篇文章主要介紹了Swift讓輸入框跟隨鍵盤彈起避免輸入輸入法擋住輸入框問題的完美解決方案,本文分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2016-11-11

最新評論