亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

OpenStack Object Storage(Swift)架構、原理

系統 1909 0

?簡介

OpenStack Object Storage(Swift) OpenStack 開源云計算項目的子項目之一。Swift使用普通的服務器來構建 冗余的 可擴展的 分布式 對象存儲 集群,存儲容量可達PB級。Swift的是用Python開發,前身是 Rackspace Cloud Files 項目,隨著Rackspace加入到OpenStack社區,Racksapce也將Cloud Files的代碼貢獻給了社區,并逐漸形成現在Swift。Swift最新的發型版本為essex?1.4.6。

功能

Swift提供的服務與AWS S3相同,可以用以下用途:

  • 作為IaaS的存儲服務
  • 與OpenStack Compute對接,為其存儲鏡像
  • 文檔存儲
  • 存儲需要長期保存的數據,例如log
  • 存儲網站的圖片,縮略圖等

Swift使用RESTful API對外提供服務,目前 1.4.6版本所提供的功能:

  • Account(存儲賬戶)的GET、HEAD
  • Container(存儲容器,與S3的bucket相同)的GET、PUT、HEAD、DELETE
  • Object(存儲對象)的GET、PUT、HEAD、DELETE、DELETE
  • Account、Container、Object的元數據支持
  • 大文件(無上限,單個無文件最大5G,大于5G的文件在客戶端切分上傳,并上傳manifest文件)、
  • 訪問控制、權限控制
  • 臨時對象存儲(過期對象自動刪除)
  • 存儲請求速率限制
  • 臨時鏈接(讓任何用戶訪問對象,不需要使用Token)
  • 表單提交(直接從HTML表單上傳文件到Swift存儲,依賴與臨時鏈接)
  • 靜態WEB站點(用Swift作為靜態站點的WEB服務器)

架構

上圖為Swift的基本架構。

? ? ? ? 在介紹Swift的架構之前,先介紹一下OpenStack的 設計原理

  1. Scalability and elasticity are our main goals (可擴展性和伸縮性是我們的主要目標)
  2. Any feature that limits our main goals must be optional (任何影響到可擴展性和伸縮性的功能都必須是可選的)
  3. Everything should be asynchronous,If you can't do something asynchronously, see #2 (所有的環節必須是異步的,如果不能異步實現,參考第二條設計原理)
  4. All required components must be horizontally scalable (所有的基礎組件必須能橫向擴展)
  5. Always use shared nothing architecture? (SN) ?or? sharding ,If you can't Share nothing/shard, see #2 (始終使用無共享的架構,如果不能實現,參見第二條)
  6. Distribute everything,especially logic. Move logic to where state naturally exists.(所有的都是分布式的,尤其是邏輯。把邏輯放在狀態應該存在的地方)
  7. Accept eventual consistency and use it where it is appropriate. (接受最終一致性,并在適合的條件下使用)
  8. Test everything (充足的測試)

依賴組件

  • Memcached,分布式緩存系統,在swift中主要被用于token和account信息,container信息的存儲
  • Sqlite,輕量級數據庫引擎,在swift中主要被用于管理account和container數據庫
  • rsync,遠程同步工具,用于storage node之間的數據同步
  • XFS文件系統
  • WSGI,Python Web服務網關接口,通過paste.deploy工具包管理swift各服務進程、中間件的處理流程
  • Eventlet,Python搞并發網絡編程庫,swift所有的服務器進程均依賴于該庫

主要組件

  • Ring文件 在基本架構圖中,我并沒有畫出ring文件,但是它卻是整個Swift中最重要的組件。ring文件是由一致性哈希算法生成,它的主要作用是存儲名字到位置的映射。 ring文件分為三類,分別是:account.ring,container.ring,object.ring。 對于account的請求,就能通過account_name查詢account.ring得到{'/account_name' : account_db_position}的映射,從而知道account數據庫文件在集群的位置; 對于container的請求,通過account_name和container_name查詢container.ring文件,得到{'/account_name/container_name' : container_db_position}的映射; 對于object的請求,通過account_name,container_name,object_name查詢object.ring文件,得到{'/account_name/container_name/object_name' : object_position}的映射; Ring文件作為一個靜態文件存儲在每個節點的/etc/swift目錄下,被用于各節點之間的位置查詢,使得swift的內部網絡是一個P2P網絡,不依賴某幾個節點進行位置查詢,避免了單點瓶頸。 生成ring文件的一致性哈希算法不但為數據的冗余性,分區容忍性提供了保證,也為整體架構上實現性能、容量的橫向擴展奠定了基礎。 Ring的詳細構造過程將在下一節介紹。
  • proxy-server proxy-server是proxy node中唯一運行的服務進程,也是swift集群的endpoint,向用戶提供RESTful API。 對于用戶的請求,proxy-server會根據配置文件的配置,將請求交給各個中間件進行處理,其中最重要的就是Auth中間件(認證),在處理完成后會根據請求路徑將請求轉發給相應的storage node中的account-server。container-server或object-server進程處理。 swift集群的流入數據和流出數據都需要經過proxy-server,proxy-server不會對數據進行緩存。
  • auth-server 驗證服務進程,為用戶生成token和驗證每個請求的token及token的權限。swift的驗證服務是作為一個中間件被proxy-server使用,是可選的,可以自己開發,也可以使用OpenStack Keystone。Keystone是官方開發的驗證服務,使用Keystone可以無縫的與其它OpenStack項目整合。
  • account-server account-server是storage node中負責處理對account的GET、HEAD、PUT、DELETE、RELICATION請求的服務進程,account-server使用sqlite的數據庫文件保存account的相關信息。
  • container-server container-server是storage node中負責處理對container的GET、HEAD、PUT、DELETE、RELICATION請求的服務進程,container-server使用sqlite的數據庫文件保存container的相關信息。
  • object-server object-server是storage node中負責處理對object的GET、HEAD、PUT、PSOT、DELETE、RELICATION請求的服務進程,object-server直接操作object,并利用XFS文件系統的xattr包存object的元數據。
  • account-auditor、container-auditor、object-auditor 這三個進程運行在storage node中,分別檢測account的db文件,container的db文件,object是否損壞,如果損壞,將會向存儲有其它副本的storage node請求副本,替換損壞的。
  • account-replicator、container-replicator、object-replicator 這三個進程運行在storage node中,分別負責account的db文件,container的db文件,object在集群中副本的同步。 例如,一個object在swift集群中通常被存儲在3個不同的storage node中,對于一個PUT /account/container/object的請求,proxy-server會根據?/account/container/object查詢ring文件,得到該object應該存儲的節點列表(長度為3),proxy-server會將請求轉發到這三個節點。如果只有兩個節點寫入成功,就認為這次PUT操作成功。寫入失敗的節點在一段時間后將會得到寫入成功的節點object-replicator進程推送過來的數據。
  • container-updater、account-updater 這兩個進程運行在storage node中,負責container數據庫和account數據庫的異步更新。使用異步更新的原因:在請求來量大時,container-server和account-server不能實時處理對數據庫更新的請求,這些請求將被本地化到隊列中,由updater進程進行異步更新。

原理

Swift利用一致性哈希算法構建了一個冗余的可擴展的分布式對象存儲集群。下面將引用我的同事 http://www.cnblogs.com/yuxc/ 的文章對ring實現原理進行講解。 鏈接: http://vdisk.weibo.com/s/1rqxy

特性

總結

經過對Swift原理、代碼的學習研究以及一系列地測試,我認為Swift簡單、冗余、可擴展的架構保證了它能作為IaaS的一個基礎服務。至于服務的可用率能達到幾個9需要看運營這個服務的公司的運維能力。如果要達到像AWS S3這種規模的服務,還需要對Swift的部份組件進行優化。 ?

OpenStack Object Storage(Swift)架構、原理及特性


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩一区二区视频免费看 | 国产精品天堂 | 香蕉视频网站在线播放 | 综合亚洲欧美日韩一区二区 | 久久成人综合网 | 人人夜| 成人国产精品免费网站 | 99热这里只有精品国产在热久久 | 一七六九1769视频免费观看 | 波多野野结衣1区二区 | 中文字幕免费在线看线人动作大片 | 99热999| 久久青草免费免费91线频观看 | 日本一级毛片视频无遮挡免费 | 久在线 | 在线免费不卡视频 | 国产成人精视频在线观看免费 | 久热这里只有精品6 | 欧美成人亚洲国产精品 | 按摩理论片 | 精品成人在线视频 | 久久性生活片 | 玖玖在线播放 | 国产爱v | 免费女人18毛片a级毛片视频 | 青青久草在线 | 欧美国产精品久久 | 99精品在线播放 | 四虎国产精品免费观看 | 中文字幕一区二区在线观看 | 91sao国产在线观看 | 四虎在线精品观看免费 | 国产精品综合一区二区 | 九九精品影院 | 久久99这里只有精品国产 | 五月综合激情网 | 天天爱天天操 | 深夜福利在线免费观看 | 精品国产自在现线看久久 | 一级特级欧美aaaaa毛片 | 国产特级片 |