面向容器和 Serverless Computing 的存儲創新發展驅動了存儲視角的新變化,整個存儲界面上移,開發者更加專屬于應用本身,基礎設施的運維盡量被托管。存儲供給的特性更加高密、彈性、極速。
*作者:徐立
雲原生趨勢下,應用容器化比例正在快速增長,Kubernetes 也已成為雲原生時代新的基礎設施。 Forrester 預測到 2022 年,全球組織/公司在生産環境運作容器化應用。從今天不足 30%的比例将大幅度提升到超過 75%,企業應用容器化的趨勢勢不可擋。我們可以看到兩個普遍的現象。首先,在雲上托管 Kubernetes 已經成為企業上雲及運作容器的優先選擇。另外,使用者使用容器的方式也在改變,從無狀态應用到核心企業應用再到資料智能應用,越來越多的企業使用容器來部署生産級别、複雜度高和高性能計算的有狀态應用。比如 Web 服務、内容資料庫、資料庫,甚至 DevOps、AI/大資料應用等。
随着基礎設施從實體機到虛拟機,到以 Kubernetes 為代表的容器環境,甚至到 Serverless 的逐漸演進,今天的計算和應用正在面臨巨大的變化。這種變化使得資源粒度越來越細,生命周期越來越短,計算按需使用。
從使用者視角來看雲原生帶來的存儲變化,最明顯的就是使用者使用存儲界面發生上移,和應用不直接相關的存儲服務從應用層下沉到雲平台,使用者更關心應用。
舉例來說,傳統形态使用者需要關心所有硬體和軟體,逐漸過渡到使用者關心虛拟機、作業系統和整個應用軟體棧,到今天在 Serverless 裡演變成使用者隻關心應用業務和代碼。系統資源從實體資源層、虛拟化資源層上升到應用開發層,使用者無需關心底層的基礎設施。
在這樣的技術體系下,存儲的能力的演變主要展現在以下 3 個方面:
1、高密
虛拟機時代,一個虛拟機就對應一個完整的存儲空間,可以用其存儲整個應用所需要的所有資料相關的通路和存儲需求。在Serverless 函數計算環境,應用被切分為一個個函數,對應的資源都需要存儲管理,是以,存儲的密度發生了很大的變化,存儲密度更高。
2、彈性
随着應用拆分的粒度越來越細化,存儲密度逐漸提升,Serverless 函數計算大規模執行個體需要高并發啟動,存儲需要極緻彈性的能力。
3、極速
從Serverless 函數計算的角度來看,函數是整個程序的一個部分,生命周期自然變短。由此出現大量短生命周期的容器執行個體。随着生命周期越來越短,需要存儲快速挂載/解除安裝,快速通路。
随着服務界面發生上移,存儲管控界面被重塑,内置存儲和外置存儲變得更加清晰。Serverless 環境裡,使用者可見界面是外置存儲(包括檔案存儲和對象存儲),而内置存儲(包括鏡像存儲和臨時存儲)對使用者是不可見的,内置存儲由阿裡雲來管理,提供了創新的機會。
阿裡巴巴容器規模化部署主要面臨的挑戰展現在以下幾個方面:
1、業務體量大。 叢集規模大,高達十萬量級;所有應用全部容器化,并且應用鏡像大,通常以數十 GB 大小為主。
2、更快的部署速度。 業務規模持續增長,要求雲平台可以快速的部署應用,才能夠處理業務增長,尤其雙十一大促時緊急擴容,難以事前對各服務準确預估容量。
3、然而大規模的建立或者更新容器叢集依然很慢,主要原因是容器部署鏡像的下載下傳和解壓很慢,主要的技術挑戰如下:
• 時間開銷大:時間開銷 ∝ 鏡像大小 * 節點數;一千節點就需要存一千份鏡像;
• CPU 時間開銷大: gzip解壓慢,且隻能串行解壓;
• I/O 壓力大: 下載下傳、解壓兩輪寫盤,包括衆多節點同時寫盤,對雲盤産生“共振”;
• 記憶體占用擾動: 對主控端 page cache 産生嚴重擾動;
• 但是有效資料占比少: 啟動時平均僅需鏡像資料的6.4%。
應對以上技術挑戰,大規模容器部署的關鍵需求抽象總結為三點:
1、按需: 下載下傳解壓速度足夠快、資料按需通路和按需傳輸。
2、增量分層: 資料解耦,通過 OCI-Artifacts 标準 overlayfs 把層次做劃分,增量資料,時間資源使用更有效。
3、Remote Image : 采用遠端鏡像技術,改變鏡像格式,同時減少本地資源的消耗。
Remote Image 主要有兩種技術實作的方式,一種是基于檔案系統,第二種是基于塊裝置。Remote Image 技術方案對比如下圖所示:
基于檔案系統的 Remote Image 技術的主要特點是直接提供檔案系統接口,是容器 Image 的自然擴充。複雜度高,穩定性、優化和進階功能的實作難度大。在通用性上,和作業系統綁定,能力固定,不一定比對所有應用。同時攻擊面較大。行業代表主要是 Google CRFS,Microsoft Azure Project Teleport,AWS SparseFS。
基于塊裝置實作的 Remote Image 技術的主要特點是可配合正常檔案系統一起使用,如 ext4;普通容器、安全容器、虛拟機均可直接使用。複雜度、穩定性、優化和進階功能更容易實作。在通用性上,與作業系統和檔案系統解綁,應用可自由選擇最合适的檔案系統,如 NTFS,作為依賴打包進 Image。并且攻擊面較小。
阿裡巴巴選擇了 Date Accelerator for Disaggregated Infrastructure (簡稱為 DADI),同時進行了規模性驗證。
DADI 是阿裡巴巴的獨創性的技術方案。DADI 鏡像服務是一種可以做到靈活又彈性部署應用的分層塊級鏡像服務。DADI 徹底摒棄了傳統容器啟動的瀑布類型(即下載下傳、解包、啟動),實作了遠端鏡像的細粒度按需加載,容器啟動前不在需要部署鏡像,容器在建立後可以立即啟動。
DADI 的資料路徑如下圖所示,虛線之下是核心态,虛線之上是使用者态。DADI 将鏡像抽象為虛拟塊裝置,并在其上容器應用挂載正常檔案系統如 ext4。當使用者應用讀取資料時候,讀取請求先通過正常的檔案系統處理,檔案系統将請求轉換為虛拟塊裝置的一次或者多次讀取。對塊裝置的讀取請求被轉發到使用者态的 DADI 子產品,最後轉換為一個或者多個 Layer 的随機讀取。
DADI 鏡像采用塊存儲+分層技術,每層隻記錄被增量修改的資料塊,支援壓縮以及實時的按需解壓縮;支援按需傳輸,隻傳輸用到的資料塊下載下傳使用;DADI 還可以采用 P2P 傳輸架構,一傳十、十傳百,在大規模叢集内将網絡流量均衡到所有多個節點上去。
DADI 增量鏡像可以通過基于塊+分層技術來實作,其中每個層對應于一個 LBA 的變更。DADI 的關鍵技術包括遠端鏡像的細粒度按需傳輸,高效的線上解壓縮,基于 trace 讀取,用于處理突發工作的 P2P 傳輸技術。DADI 在提高部署應用的靈活性和彈性方面非常有效。
1、分層塊裝置 Overlay Block Device
每層記錄被增量修改的變長資料塊 LBA,不涉及檔案/檔案系統的概念,以 512 位元組為最小粒度。快速索引,支援變長記錄,以節省記憶體,各記錄的 LBA 不重疊,支援高效的區間查詢。
2、原生支援可寫層
提供追加寫檔案和随機寫稀疏檔案兩種模式建構 DADI 鏡像。隻讀層,每個隻讀都可以按照不同類型的大小,每層查詢區間,速度極快。可寫層由存儲原始資料(Raw Data)和存儲索引(Index)兩部分組成,接受 append only 組織而成。
3、ZFile 壓縮格式
标準壓縮檔案格式,例如 gz,bz2,xz 等,無法高效的進行随機讀寫操作,無論讀取壓縮檔案中的哪一部分,都需要從頭部開始解壓,為了支援 layer blob 的壓縮并同時支援遠端鏡像的按需讀取,DADI 引入了 ZFile 壓縮格式。ZFile 的壓縮格式如下圖所示,按固定大小資料塊壓縮,隻解壓讀到的資料塊,支援多種有效的壓縮算法,包括 lz4,zstd,gzip 等,采用通用格式,不綁定于 DADI。
4、基于 Trace 預取
記錄應用過程中的讀取日志、隻記位置、不記資料本身。在應用冷啟動時,若已有 trace 記錄,則 DADI 将根據trace提前把資料預取回本地,采用高并發讀取,更加高效。Trace 作為一個特殊的 layer 存于 image,專門用于加速,使用者不可見,未來可容納其他加速檔案。如下圖綠色部分表示加速層、容納 trace 檔案以及其他檔案。
5、按需 P2P 傳輸
在我們的生産環境中,有幾個關鍵應用程式已經部署在數千台伺服器上,并且包含高達數 GB 的 Layer,這些應用程式的部署給 Registry 和網絡基礎設施帶來了巨大壓力。為了更好的處理此類大型應用,DADI 将最近使用的資料塊緩存在每個主控端的本地磁盤上,采用 P2P 的方式在主機之間傳輸資料。
1、采用樹形拓撲結構分發資料
• 各個節點均緩存最近使用過的資料塊
• 跨節點請求大機率命中父節點自己的 cache
• 未命中的請求會遞歸向上傳遞,直到 registr
2、拓撲結構由 root 節點動态維護
• 每個 layer 單獨一個傳輸拓撲
3、每個機房單獨部署一組 root
• 多節點高可用架構
• 基于一緻性哈希的分工
我們将 DADI 容器啟動延遲與 .tgz 鏡像、Slacker、CRFS、LVM 和 P2P 鏡像下載下傳進行了比較,使用 DockerHub.com 上的 WordPress 鏡像,我們觀測單執行個體的冷啟動延遲,所有伺服器和主機位于同一資料中心。如左圖所示,結果表明,使用 DADI 可以明顯減少容器的冷啟動時間。
我們在公共雲上建立了 1000 個 VM,并将他們用做容器的主機。在每個主機上啟動 10 個容器,總共 10000 個容器。測試使用 Python 編寫的一個小程式 Agility,通路 HTTP 伺服器并在服務端記錄時間。如右圖所示,結果表明 DADI 的冷啟動在 3 秒之内快速完成。
DADI 已經在阿裡巴巴集團規模化運作,在阿裡巴巴的生産環境内大規模部署。資料顯示 DADI 在 10000個主控端上啟動 10000 個容器僅需3-4 秒。DADI 完美應對雙十一大促洪峰,目前在阿裡巴巴集團内部已經部署了接近十萬台伺服器主控端,支援集團 Sigma、搜尋、UC 等業務線上、離線應用超過 2 萬個,極大提高了應用釋出、擴容效率,體驗如絲般順滑。我們在全球最大的電子商務平台之一的生産環境中使用 DADI 的經驗表明,DADI 在提高部署應用的靈活性和彈性方面非常有效。
現在,DADI 正在通過貢獻社群的方式更好地釋放雲原生技術紅利,也希望與更多企業和開發者共建容器鏡像标準。
目前 DADI 已經開放了支援 Contained(docker 尚不支援 remote image),支援節點直連 Registry + 本地緩存技術,支援建構、轉換鏡像。
未來還會開放 P2P 按需傳輸:将 P2P 子系統重新設計為 Registry 的延伸,将支援共享存儲,如 nfs、hdfs、ceph、glusterfs 等,全局 Registry +機房共享存儲 + 節點本地緩存 + P2P 資料傳輸,建構機房内緩存。
大家可通過檢視以下 Github 的連結了解更多資訊:
控制平面 (for containerd):
https://github.com/alibaba/accelerated-container-image
資料平面(overlaybd):
https://github.com/alibaba/overlaybd
上面我們談到了 Serverless 應用架構的新範式,現在我們看到一個趨勢,從虛拟機到普通容器,再逐漸演變為神龍裸金屬部署安全容器。從存儲的布局角度來看,其面臨的顯而易見的挑戰是更加高密和多租戶。
容器接入技術趨勢: 計算層基于 ECS + 普通容器的架構向基于神龍 + 安全容器架構演進,單節點密度達到 2000,單執行個體規格最小粒度記憶體 128MB,1/12 CPU。容器接入技術的趨勢,帶來了 I/O 資源放大的挑戰。
阿裡雲存儲在端接入上有自己的思考,存儲分為内置存儲(鏡像和臨時存儲)和外置存儲(檔案系統/共享檔案系統、大資料檔案系統、資料庫檔案系統等)。
存儲系統如何和底層更好的連接配接?存儲接入容器的方式是通過 virtio 的能力解除安裝到神龍Moc 卡上,神龍 Moc 卡 + virtio 的通路和底層存儲服務更好的關聯。
ESSD 雲盤為使用者提供高可用、高可靠、高性能的塊級随機通路服務,并提供原生快照資料保護和跨域容災等豐富的企業特性。
面向現代化應用的彈性供給雲盤 ESSD 具備兩個關鍵特性:
雲盤挂載密度提升 4 倍,單執行個體最大支援 64 塊雲盤
性能與容量完全解耦,使用者需求不需要預先設定,按需而定。
舉例來說,為了應對很多使用者面臨的問題:無法準确預估業務峰值,在性能配置上難以做好精準規劃。如果性能配置預留過高,會造成日常資源的大量閑置浪費;而如果性能預留不足,業務突發洪峰會造成業務受損。我們推出了 ESSD Auto PL 雲盤,它支援性能指定配置的同時,支援按業務負載自動伸縮,單盤可以自動提升到最高 100 萬 IOPS 性能,為不可預期的突發通路提供安全便捷的性能自動配置。
針對容器中使用檔案存儲的優勢和挑戰,阿裡雲存儲團隊與容器服務團隊共同推出了容器網絡檔案系統 CNFS,内置在阿裡雲托管的 Kubernetes 服務 ACK 中。CNFS 通過将阿裡雲的檔案存儲抽象為一個 K8s 對象(CRD)進行獨立管理,包括建立、删除、描述、挂載,監控及擴容等運維操作,使使用者可以在享受容器使用檔案存儲帶來的便捷的同時,提高檔案存儲的性能和資料安全,并提供容器一緻的聲明式管理。
CNFS 在可通路性、彈性擴容、性能優化、可觀測性、資料保護、聲明式等六個方面針對容器存儲進行了深度優化,使其與開源方案相比具有以下明顯優勢:
在存儲類型方面,CNFS 支援檔案存儲,目前支援阿裡雲檔案存儲 NAS
支援 Kubernetes 相容的聲明式生命周期管理,可以一站式管理容器和存儲
支援 PV 的線上擴容、自動擴容,針對容器彈性伸縮特性優化
支援更好的和 Kubernetes 結合的資料保護,包括 PV 快照、資源回收筒、删除保護、資料加密、資料災備等
支援應用級别的應用一緻性快照,自動分析應用配置和存儲依賴,一鍵備份、一鍵還原
支援 PV 級别監控
支援更好的通路控制,提高共享檔案系統的權限安全,包括目錄級 Quota、ACL
提供性能優化,針對檔案存儲的小檔案讀寫,提供更優化的性能
成本優化,提供低頻媒體及轉換政策,降低存儲成本
資料庫容器化使用 ESSD 雲盤高密挂載的業務場景主要面臨的需求是:資料庫部署模式從虛拟機向容器化發展,持續提升彈性和可移植性,簡化部署。容器部署密度随着 CPU 核數線性增長,需要持久化存儲提升挂載密度。資料庫作為 IO 密集型業務,對單機存儲性能提出更高要求。
我們的解決方案是資料庫使用 g6se 存儲增強型執行個體,單執行個體提供最高 64 塊雲盤挂載密度,g6se 存儲增強型執行個體,提供最高 100 萬 IOPS,4GB 存儲吞吐,适配單機高密部署的性能需求。
資料庫容器化使用 ESSD 雲盤高密挂載的優勢是:
高密挂載:相比上代執行個體,雲盤挂載密度提升 400%,提升資料庫執行個體單機部署密度。
高性能:單機最高 100 萬 IOPS,多個雲盤之間 IO 天然隔離,提供穩定可預期讀寫性能。
高彈性:ESSD 雲盤 支援 IA 快照,快照立即可用實作隻讀執行個體的秒級建立。
高可靠性:雲盤基于 9 個 9 資料庫可靠性設計,同時支援快照、異步複制等資料保護手段,解決軟硬體故障帶來的資料安全風向。
Prometheus 的實作方式是Prometheus server 主要用于抓取和存儲資料。Client libraries 可以用來連接配接 server 并進行查詢等操作,push gateway 用于批量,短期的監控資料的歸總節點,主要用于業務資料彙報等。不同 exporter 用于不同場景下的資料收集,如收集 MongoDB 資訊 MongoDB exporter。
Prometheus 的核心存儲 TSDB ,類似 LSM tree 的存儲引擎。我們看到一個趨勢,存儲引擎多節點資料同步,需要引入 Paxos 一緻性協定。中小型客戶在管理引擎的時候,管理一緻性協定的時候難度非常大,架構将計算和存儲分離,計算是無狀态的,TSDB 的存儲的引擎釋放給分布式檔案系統,天然需要 NAS 共享檔案系統。
Prometheus 監控服務使用檔案存儲的優勢是:
共享高可用: 多 Pod 共享 NAS 持久化存儲,計算節點 Failover 實作容器應用的高可用。
0 改造: 分布式 POSIX 檔案系統接口,無需任何改造
高性能: 支援并發通路,性能滿足瞬間拉起索引查詢,同步進行資料加載以及低延遲時間索引查詢 + 寫入
高彈性: 存儲空間不需預配置,按需使用,按量計費,适配容器彈性能力
以上為大家分享了阿裡雲容器存儲的技術創新,包括 DADI 鏡像加速技術,為容器規模化啟動奠定了很好的基礎,ESSD 雲盤提供極緻性能,CNFS 容器網絡檔案系統提供極緻的使用者體驗。
随時雲原生創新序幕拉開,雲原生存儲創新剛剛走出第一步,相信和各位行業專家一起開創和 Reinvent 存儲的創新機會。
更多關于阿裡雲容器網絡檔案系統 CNFS 的技術能力、應用場景和使用方式,請點選“閱讀原文”了解。