今天我們就來分析一下基於容器的portworx儲存、乙個基於資料和控制面的容器定義儲存技術和產品。
portworx是一家美國儲存初創公司,它研發了業界第乙個容器定義儲存系統portworx。portworx提供了全新的、統一的scale out儲存棧,其核心架構是共享的、松耦合的、分布式、基於元資料的塊儲存層(卷、塊裝置、全域性共享卷和檔案訪問等)。portworx本身作為容器服務的方式部署,在每個集群節點呈現為px的容器。
portworx架構和原理
每個px容器來識別伺服器節點的硬體、檢測磁碟型別、容量和整體服務能力和型別。系統根據每個節點的能力匹配業務對儲存需求,進行排程和io分發。
每個px容器根據授權和集群id發現其他節點。通過這種方式,每乙個px節點就可以感知整個儲存系統的拓撲結構和參與集群的節點(支援資料中心內部和跨資料中心部署)。通過整體拓撲就可以感知整個集群的region、機架部署情況,當然,也可以感知集群內不同節點的能力。
儲存控制面
儲存的供給方式是通過容排程器來實現,儲存資源通過編排網路分配給具體的容器例項,px已經支援與多種容器排程、編排工具整合,如主流的kubernetes、swarm、mesosphere、spark等,px通過控制面協議建立合適的儲存卷給上層容器例項使用,基於應用容器的io等sla要求,px可以自動分配滿足要求的儲存卷。在kubernetes排程器中,儲存卷是以kubernetes pod的方式提供給應用容器。
卷是以thin的方式來分配的,可以做到按需靈活伸縮。每個卷的容量是打散在集群節點上的,所以增值特性如,快照、塊大小等都可以容器卷的原則來分配。
資料面訪問
portworx提供資料訪問路徑和位置,一旦把卷配置給正在執行的應用容器後,px就處在資料路徑的位置;並根據上層容器應用對應的儲型別(卷、塊裝置或全域性共享卷等)連線到上層容器上。
當上層應用容器寫入資料時,資料塊和對應的元資料會根據演算法分布到不同的節點上增強可靠性。這些卷是容器可定址卷,可以基於容器定址,所以具備內容定址儲存的優勢。
生命週期管理
每個px容器維護著應用容器卷的生命週期管理,這些卷可以被轉殖、分級儲存、或移動到s3公有雲上。px同時維護著每個卷的io活動歷史記錄,並向上提供cli和pxctl命令介面和gui介面,方便運營維護和系統管理。
portworx應用場景
portworx提供了業界第乙個儲存解決方案專為容器。不像傳統儲存,portworx容器定義儲存是基於應用需求規模實現彈性伸縮。面向容器化應用的軟體定義儲存,強調container defined storage,實現從控制面到資料面完整的方案,portworx提出「容器定義的儲存」,相比vm儲存提出更細sla要求、容器粒度的企業儲存特性要求,容器應用對儲存的新要求需要進一步分析。
portworx其在docker hub中有openstorage開源專案;另外,提供了開發者和企業級兩個版本,開發者版本只包含基於容器的scale out快儲存、分布式的檔案訪問、基於容器粒度的控制和cli命令列介面;企業版增加了多集群管理、單一檔案命名空間、容量**和管理、gui管理介面。
portworx可執行於伺服器或ec2、容器等基礎設施,並且支援分離部署和超融合部署,portworx的主要亮點簡單總結如下:
portworx容器定義儲存本身很簡單,採用基本的分布式方法和商業x86硬體作為融合儲存節點,並能實現節點快速伸縮。最主要的就是可以與任何乙個docker排程整合,自動實現儲存資源按需供給。
portworx從控制面和資料面完整地為容器提供儲存,資料面供給能力更高、更快、更強;控制面可以廣泛對接docker、kubernetes、mesos等計算與集群管理系統。如vsan/vvol/cinder,這種比較開放的架構,可以通過pwx cds 控制器構建面向容器控制面生態。
portworx認為容器定義儲存應具備這些能力(個人觀點,可能不是太全面):
1.容器定義儲存應該分控制面和資料面實現,控制面基於 kubernetes、swarm、mesosphere、spark等 容器排程、編排工具自動實現儲存分配,滿足應用容器的sla要求;資料面提供更高、更快、更強的儲存供給能力,並可以實現基於應用容器定址的能力。
2.應用容器卷的分配、管理應該是以容器為單位, 所有增值特性如,快照、遠端複製等都基於容器的原則來實現。
3.容器定義儲存應該是高度自癒、輕量高效、應用容器感知的系統。自癒、高效我覺得傳統儲存都具備,但是輕量、容器感知還需要加強。portworx採用容器實現分布式scale out容器定義儲存,可以提供裸金屬效能、啟動快和資源佔用率低等特點。
順序容器的定義
順序容器 容器介面卡 vector 支援快速隨機訪問 stack 後進先出 lifo list 支援快速插入 刪除 queue 先進先出 fifo deque 雙端佇列 priority queue 有優先順序管理的佇列 1 容器型別的操作集合形成了以下層次結構 1 一些操作適用於所有容器型別 2 ...
儲存過程定義
return status 是乙個可選的整型變數,儲存儲存過程的返回狀態。這個變數在用於 execute 語句前,必須在批處理 儲存過程或函式中宣告過。在用於喚醒呼叫標量值使用者定義函式時,return status 變數可以是任何標量資料型別。procedure name 是擬呼叫的儲存過程的完全...
STL 容器記憶體儲存結構
vector的使用參見 vector的記憶體儲存空間是連續的,會先申請一篇特定大小的空間,當空間用完之後會進行擴容,擴容之後,需要將原先記憶體空間中的內容拷貝到新的記憶體空間中,最後把原來的空間釋放還給記憶體,示意圖如下所示。list的使用參見 list在每次插入乙個元素或刪除乙個元素的時候,就需要...