国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
OpenStack Object Storage(Swift)架構(gòu)、原理及特性 | Ale...

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

 簡介

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

功能

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

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

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

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

架構(gòu)

上圖為Swift的基本架構(gòu)。

        在介紹Swift的架構(gòu)之前,先介紹一下OpenStack的設(shè)計原理

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

依賴組件

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

主要組件

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

原理

Swift利用一致性哈希算法構(gòu)建了一個冗余的可擴(kuò)展的分布式對象存儲集群。下面將引用我的同事http://www.cnblogs.com/yuxc/的文章對ring實現(xiàn)原理進(jìn)行講解。

鏈接:http://vdisk.weibo.com/s/1rqxy

特性

總結(jié)

經(jīng)過對Swift原理、代碼的學(xué)習(xí)研究以及一系列地測試,我認(rèn)為Swift簡單、冗余、可擴(kuò)展的架構(gòu)保證了它能作為IaaS的一個基礎(chǔ)服務(wù)。至于服務(wù)的可用率能達(dá)到幾個9需要看運營這個服務(wù)的公司的運維能力。如果要達(dá)到像AWS S3這種規(guī)模的服務(wù),還需要對Swift的部份組件進(jìn)行優(yōu)化。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
OpenStack對象存儲——Swift
openstack入門之swift基礎(chǔ)三:swift能干什么,不能干什么及相關(guān)概念
OpenStack的架構(gòu)詳解(11)
OpenStack架構(gòu)(中文翻譯)
Swift Architectural Overview — Swift v1.3-dev...
FastDFS的配置、部署與API使用解讀(1)Get Started with FastDFS
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服