成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Openstack Swift 開源云存儲技術解析

運維 系統運維 OpenStack
OpenStack Swift 開源項目提供了彈性可伸縮、高可用的分布式對象存儲服務,適合存儲大規模非結構化數據。本文將深入介紹 Swift 的基本設計原理、對稱式的系統架構和 RESTful API。

OpenStack Swift 原理、架構與 API 介紹

背景與概覽

Swift 最初是由 Rackspace 公司開發的高可用分布式對象存儲服務,并于 2010 年貢獻給 OpenStack 開源社區作為其最初的核心子項目之一,為其 Nova 子項目提供虛機鏡像存儲服務。Swift 構筑在比較便宜的標準硬件存儲基礎設施之上,無需采用 RAID(磁盤冗余陣列),通過在軟件層面引入一致性散列技術和數據冗余性,犧牲一定程度的數據一致性來達到高可用性和可伸縮性,支持多租戶模式、容器和對象讀寫操作,適合解決互聯網的應用場景下非結構化數據存儲問題。

此項目是基于 Python 開發的,采用 Apache 2.0 許可協議,可用來開發商用系統。

基本原理

一致性散列(Consistent Hashing)

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

圖 1. 一致性散列

如圖 1 中所示,以逆時針方向遞增的散列空間有 4 個字節長共 32 位,整數范圍是[0~232-1];將散列結果右移 m 位,可產生 232-m個虛擬節點,例如 m=29 時可產生 8 個虛擬節點。在實際部署的時候需要經過仔細計算得到合適的虛擬節點數,以達到存儲空間和工作負載之間的平衡。

數據一致性模型(Consistency Model)

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

(1)定義:N:數據的副本總數;W:寫操作被確認接受的副本數量;R:讀操作的副本數量

(2)強一致性:R+W>N,以保證對副本的讀寫操作會產生交集,從而保證可以讀取到最新版本;如果 W=N,R=1,則需要全部更新,適合大量讀少量寫操作場景下的強一致性;如果 R=N,W=1,則只更新一個副本,通過讀取全部副本來得到最新版本,適合大量寫少量讀場景下的強一致性。

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

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

圖 2. Quorum 協議示例

環的數據結構

環是為了將虛擬節點(分區)映射到一組物理存儲設備上,并提供一定的冗余度而設計的,其數據結構由以下信息組成:

存儲設備列表、設備信息包括唯一標識號(id)、區域號(zone)、權重(weight)、IP 地址(ip)、端口(port)、設備名稱(device)、元數據(meta)。

分區到設備映射關系(replica2part2dev_id 數組)

計算分區號的位移(part_shift 整數,即圖 1 中的 m)

以查找一個對象的計算過程為例:

 

圖 3. 環的數據機構

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

Swift 為賬戶,容器和對象分別定義了的環,查找賬戶和容器的是同樣的過程。

數據模型

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

圖 4. Swift 數據模型

系統架構

Swift 采用完全對稱、面向資源的分布式系統架構設計,所有組件都可擴展,避免因單點失效而擴散并影響整個系統運轉;通信方式采用非阻塞式 I/O 模式,提高了系統吞吐和響應能力。

圖 5. Swift 系統架構

Swift 組件包括:

◆代理服務(Proxy Server):對外提供對象服務 API,會根據環的信息來查找服務地址并轉發用戶請求至相應的賬戶、容器或者對象服務;由于采用無狀態的 REST 請求協議,可以進行橫向擴展來均衡負載。

◆認證服務(Authentication Server):驗證訪問用戶的身份信息,并獲得一個對象訪問令牌(Token),在一定的時間內會一直有效;驗證訪問令牌的有效性并緩存下來直至過期時間。

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

◆賬戶服務(Account Server):提供賬戶元數據和統計信息,并維護所含容器列表的服務,每個賬戶的信息被存儲在一個 SQLite 數據庫中。

◆容器服務(Container Server):提供容器元數據和統計信息,并維護所含對象列表的服務,每個容器的信息也存儲在一個 SQLite 數據庫中。

◆對象服務(Object Server):提供對象元數據和內容服務,每個對象的內容會以文件的形式存儲在文件系統中,元數據會作為文件屬性來存儲,建議采用支持擴展屬性的 XFS 文件系統。

◆復制服務(Replicator):會檢測本地分區副本和遠程副本是否一致,具體是通過對比散列文件和高級水印來完成,發現不一致時會采用推式(Push)更新遠程副本,例如對象復制服務會使用遠程文件拷貝工具 rsync 來同步;另外一個任務是確保被標記刪除的對象從文件系統中移除。

◆更新服務(Updater):當對象由于高負載的原因而無法立即更新時,任務將會被序列化到在本地文件系統中進行排隊,以便服務恢復后進行異步更新;例如成功創建對象后容器服務器沒有及時更新對象列表,這個時候容器的更新操作就會進入排隊中,更新服務會在系統恢復正常后掃描隊列并進行相應的更新處理。

◆審計服務(Auditor):檢查對象,容器和賬戶的完整性,如果發現比特級的錯誤,文件將被隔離,并復制其他的副本以覆蓋本地損壞的副本;其他類型的錯誤會被記錄到日志中。

◆賬戶清理服務(Account Reaper):移除被標記為刪除的賬戶,刪除其所包含的所有容器和對象。

API

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

  1. GET /v1/<account> HTTP/1.1 
  2. Host: storage.swift.com 
  3. X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb 

響應頭部信息中包含狀態碼 200,容器列表包含在響應體中:

  1. HTTP/1.1 200 Ok 
  2. Date: Thu, 07 Jan 2013 18:57:07 GMT 
  3. Server: Apache 
  4. Content-Type: text/plain; charset=UTF-8 
  5. Content-Length: 32 
  6. images 
  7. movies 
  8. documents 
  9. backups 

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

表 1. Swift RESTful API 總結

詳細的 API 規范可以參考開發者指南。應用開發可采用 Swift 項目本身已經包含的 Python 的綁定實現;如果使用其它編程語言,可以參考 Rackspace 兼容 Swift 的 Cloud Files API,支持 Java,.Net,Ruby,PHP 等語言綁定。

結束語

OpenStack Swift 作為穩定和高可用的開源對象存儲被很多企業作為商業化部署,如新浪的 App Engine 已經上線并提供了基于 Swift 的對象存儲服務,韓國電信的 Ucloud Storage 服務。有理由相信,因為其完全的開放性、廣泛的用戶群和社區貢獻者,Swift 可能會成為云存儲的開放標準,從而打破 Amazon S3 在市場上的壟斷地位,推動云計算在朝著更加開放和可互操作的方向前進。

責任編輯:黃丹 來源: developerworks
相關推薦

2017-10-18 08:47:53

云存儲技術UFile

2012-07-09 14:16:33

OpenStack架構

2012-07-12 16:00:32

OpenStackSwift架構

2014-11-27 13:29:29

OpenStackSwift開源

2013-04-16 09:30:08

OpenStack開源云

2011-11-08 09:58:01

OpenStack

2013-07-25 09:13:57

SwiftStackOpenStackSwift對象存儲

2012-05-23 10:03:28

OpenStack云計算

2013-07-25 09:12:48

OpenStackSwift對象存儲對象存儲

2013-08-08 10:14:52

云存儲云計算

2015-08-25 11:17:13

OpenStack對象存儲Swift

2018-11-13 09:49:11

存儲云存儲云備份

2012-09-12 17:04:53

OpenStack云計算存儲

2014-11-10 10:15:59

云技術OpenStack開源

2012-09-13 11:06:03

IBMdW

2012-09-11 17:10:40

OpenStack

2015-04-17 09:11:34

2016-10-19 22:24:04

OpenStack云計算OpenStack N

2013-10-18 11:01:30

OpenStack云計算開源

2017-01-03 17:18:02

開源OpenStack
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伦理午夜电影免费观看 | 国产精品毛片无码 | 日韩精品一区二区三区在线观看 | 亚洲第1页| 国产日韩欧美中文 | 91佛爷在线观看 | 亚洲网站在线观看 | 欧美成年黄网站色视频 | 久久国产精品视频 | 亚洲欧美日韩国产综合 | 中文字幕亚洲精品 | 久久久久久蜜桃一区二区 | 欧美日韩视频在线播放 | 在线观看国产wwwa级羞羞视频 | 成人精品| 欧美日韩在线视频观看 | 亚洲免费视频在线观看 | 亚洲第一在线 | 中文字幕在线视频网站 | 国产污视频在线 | 欧美成人精品一区二区男人看 | 亚洲精品女人久久久 | 午夜影院在线观看视频 | 午夜精品在线观看 | 欧美精品欧美精品系列 | 日本精品网站 | 综合久久综合久久 | 自拍视频在线观看 | 久久精品在线 | 亚洲一页 | 日韩h| 九九热在线免费视频 | 日本一区二区三区四区 | 亚洲精品一区二区三区 | 九色在线观看 | 欧美日韩国产一区 | 国产精品久久久久aaaa樱花 | 黄色片视频免费 | 久久国产精品免费 | 欧洲精品码一区二区三区免费看 | 国内自拍视频在线观看 |