Dependent component:
1. Memcached
Distributed caching system, mainly in the swift for the token and account information, the container information storage
2. Sqlite
Lightweight database engine in the swift is mainly used to manage the account and the container database
3. rsync
Remote synchronization tool for data synchronization between the storage node
4. XFS
File system
5. WSGI
Python Web services gateway interface, package management tool through paste.deploy swift various service processes, middleware processes
6. Eventlet
Python engage in concurrent network programming library, swift all server processes are dependent on the library
Major components:
1. 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文件的一致性哈希算法不但為數據的冗餘性,分區容忍性提供了保證,也為整體架構上實現性能、容量的橫向擴展奠定了基礎。
2. 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不會對數據進行緩存。
3. auth-server
驗證服務進程,為用戶生成token和驗證每個請求的token及token的權限。 swift的驗證服務是作為一個中間件被proxy-server使用,是可選的,可以自己開發,也可以使用OpenStack Keystone。 Keystone是官方開發的驗證服務,使用Keystone可以無縫的與其它OpenStack項目整合。
4. account-server
account-server是storage node中負責處理對account的GET、HEAD、PUT、DELETE、RELICATION請求的服務進程,account-server使用sqlite的數據庫文件保存account的相關信息
5. container-server
container-server是storage node中負責處理對container的GET、HEAD、PUT、DELETE、RELICATION請求的服務進程,container-server使用sqlite的數據庫文件保存container的相關信息。
6. object-server
object-server是storage node中負責處理對object的GET、HEAD、PUT、PSOT、DELETE、RELICATION請求的服務進程,object-server直接操作object,並利用XFS文件系統的xattr包存object的元數據。
7. account-auditor、container-auditor、object-auditor
這三個進程運行在storage node中,分別檢測account的db文件,container的db文件,object是否損壞,如果損壞,將會向存儲有其它副本的storage node請求副本,替換損壞的。
8. 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進程推送過來的數據。
9. container-updater、account-updater
這兩個進程運行在storage node中,負責container數據庫和account數據庫的異步更新。使用異步更新的原因:在請求來量大時,container-server和account-server不能實時處理對數據庫更新的請求,這些請求將被本地化到隊列中,由updater進程進行異步更新。
留言
張貼留言