阿里云徐立:面向容器和 Serverless Computing 的存储创新
*作者:徐立
云原生的創新源泉
云原生趨勢下,應用容器化比例正在快速增長,Kubernetes 也已成為云原生時代新的基礎設施。 Forrester 預測到 2022 年,全球組織/公司在生產環境運行容器化應用。從今天不足?30%的比例將大幅度提升到超過 75%,企業應用容器化的趨勢勢不可擋。我們可以看到兩個普遍的現象。首先,在云上托管 Kubernetes 已經成為企業上云及運行容器的優先選擇。另外,用戶使用容器的方式也在改變,從無狀態應用到核心企業應用再到數據智能應用,越來越多的企業使用容器來部署生產級別、復雜度高和高性能計算的有狀態應用。比如 Web 服務、內容資料庫、數據庫,甚至 DevOps、AI/大數據應用等。
隨著基礎設施從物理機到虛擬機,到以 Kubernetes 為代表的容器環境,甚至到 Serverless 的逐漸演進,今天的計算和應用正在面臨巨大的變化。這種變化使得資源粒度越來越細,生命周期越來越短,計算按需使用。
從用戶視角來看云原生帶來的存儲變化,最明顯的就是用戶使用存儲界面發生上移,和應用不直接相關的存儲服務從應用層下沉到云平臺,用戶更關心應用。
舉例來說,傳統形態用戶需要關心所有硬件和軟件,逐漸過渡到用戶關心虛擬機、操作系統和整個應用軟件棧,到今天在 Serverless 里演變成用戶只關心應用業務和代碼。系統資源從物理資源層、虛擬化資源層上升到應用開發層,用戶無需關心底層的基礎設施。
在這樣的技術體系下,存儲的能力的演變主要體現在以下 3 個方面:
1、高密
虛擬機時代,一個虛擬機就對應一個完整的存儲空間,可以用其存儲整個應用所需要的所有數據相關的訪問和存儲需求。在Serverless 函數計算環境,應用被切分為一個個函數,對應的資源都需要存儲管理,因此,存儲的密度發生了很大的變化,存儲密度更高。
2、彈性
隨著應用拆分的粒度越來越細化,存儲密度逐漸提升,Serverless 函數計算大規模實例需要高并發啟動,存儲需要極致彈性的能力。
3、極速
從Serverless 函數計算的角度來看,函數是整個進程的一個部分,生命周期自然變短。由此出現大量短生命周期的容器實例。隨著生命周期越來越短,需要存儲快速掛載/卸載,快速訪問。
隨著服務界面發生上移,存儲管控界面被重塑,內置存儲和外置存儲變得更加清晰。Serverless 環境里,用戶可見界面是外置存儲(包括文件存儲和對象存儲),而內置存儲(包括鏡像存儲和臨時存儲)對用戶是不可見的,內置存儲由阿里云來管理,提供了創新的機會。
鏡像加速的技術創新
阿里巴巴容器規模化部署的挑戰
阿里巴巴容器規?;渴鹬饕媾R的挑戰體現在以下幾個方面:
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 技術方案對比如下圖所示:
基于文件系統的 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 的數據路徑如下圖所示,虛線之下是內核態,虛線之上是用戶態。DADI 將鏡像抽象為虛擬塊設備,并在其上容器應用掛載常規文件系統如 ext4。當用戶應用讀取數據時候,讀取請求先通過常規的文件系統處理,文件系統將請求轉換為虛擬塊設備的一次或者多次讀取。對塊設備的讀取請求被轉發到用戶態的 DADI 模塊,最后轉換為一個或者多個 Layer 的隨機讀取。
DADI 鏡像采用塊存儲+分層技術,每層只記錄被增量修改的數據塊,支持壓縮以及實時的按需解壓縮;支持按需傳輸,只傳輸用到的數據塊下載使用;DADI 還可以采用 P2P 傳輸架構,一傳十、十傳百,在大規模集群內將網絡流量均衡到所有多個節點上去。
DADI 關鍵技術解讀
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 已經在阿里巴巴集團規?;\行,在阿里巴巴的生產環境內大規模部署。數據顯示 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 云盤為用戶提供高可用、高可靠、高性能的塊級隨機訪問服務,并提供原生快照數據保護和跨域容災等豐富的企業特性。
面向現代化應用的彈性供給云盤 ESSD 具備兩個關鍵特性:
- 云盤掛載密度提升 4 倍,單實例最大支持 64 塊云盤
- 性能與容量完全解耦,用戶需求不需要預先設定,按需而定。
舉例來說,為了應對很多用戶面臨的問題:無法準確預估業務峰值,在性能配置上難以做好精準規劃。如果性能配置預留過高,會造成日常資源的大量閑置浪費;而如果性能預留不足,業務突發洪峰會造成業務受損。我們推出了 ESSD Auto PL 云盤,它支持性能指定配置的同時,支持按業務負載自動伸縮,單盤可以自動提升到最高 100 萬 IOPS 性能,為不可預期的突發訪問提供安全便捷的性能自動配置。
持久存儲 - 容器網絡文件系統 CNFS
針對容器中使用文件存儲的優勢和挑戰,阿里云存儲團隊與容器服務團隊共同推出了容器網絡文件系統 CNFS,內置在阿里云托管的 Kubernetes 服務 ACK 中。CNFS 通過將阿里云的文件存儲抽象為一個 K8s 對象(CRD)進行獨立管理,包括創建、刪除、描述、掛載,監控及擴容等運維操作,使用戶可以在享受容器使用文件存儲帶來的便捷的同時,提高文件存儲的性能和數據安全,并提供容器一致的聲明式管理。
CNFS 在可訪問性、彈性擴容、性能優化、可觀測性、數據保護、聲明式等六個方面針對容器存儲進行了深度優化,使其與開源方案相比具有以下明顯優勢:
- 在存儲類型方面,CNFS 支持文件存儲,目前支持阿里云文件存儲 NAS
- 支持 Kubernetes 兼容的聲明式生命周期管理,可以一站式管理容器和存儲
- 支持 PV 的在線擴容、自動擴容,針對容器彈性伸縮特性優化
- 支持更好的和 Kubernetes 結合的數據保護,包括 PV 快照、回收站、刪除保護、數據加密、數據災備等
- 支持應用級別的應用一致性快照,自動分析應用配置和存儲依賴,一鍵備份、一鍵還原
- 支持 PV 級別監控
- 支持更好的訪問控制,提高共享文件系統的權限安全,包括目錄級 Quota、ACL
- 提供性能優化,針對文件存儲的小文件讀寫,提供更優化的性能
- 成本優化,提供低頻介質及轉換策略,降低存儲成本
最佳實踐
數據庫容器化使用 ESSD 云盤高密掛載的最佳實踐
數據庫容器化使用 ESSD 云盤高密掛載的業務場景主要面臨的需求是:數據庫部署模式從虛擬機向容器化發展,持續提升彈性和可移植性,簡化部署。容器部署密度隨著 CPU 核數線性增長,需要持久化存儲提升掛載密度。數據庫作為 IO 密集型業務,對單機存儲性能提出更高要求。
我們的解決方案是數據庫使用 g6se 存儲增強型實例,單實例提供最高 64 塊云盤掛載密度,g6se 存儲增強型實例,提供最高 100 萬 IOPS,4GB 存儲吞吐,適配單機高密部署的性能需求。
數據庫容器化使用 ESSD 云盤高密掛載的優勢是:
- 高密掛載:相比上代實例,云盤掛載密度提升 400%,提升數據庫實例單機部署密度。
- 高性能:單機最高 100 萬 IOPS,多個云盤之間 IO 天然隔離,提供穩定可預期讀寫性能。
- 高彈性:ESSD 云盤 支持 IA 快照,快照立即可用實現只讀實例的秒級創建。
- 高可靠性:云盤基于 9 個 9 數據庫可靠性設計,同時支持快照、異步復制等數據保護手段,解決軟硬件故障帶來的數據安全風向。
Prometheus 監控服務使用文件存儲的最佳實踐
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 文件系統接口,無需任何改造
- 高性能: 支持并發訪問,性能滿足瞬間拉起索引查詢,同步進行數據加載以及低時延索引查詢 + 寫入
- 高彈性: 存儲空間不需預配置,按需使用,按量計費,適配容器彈性能力
總結
面向容器和 Serverless Computing 的存儲創新發展驅動了存儲視角的新變化,整個存儲界面上移,開發者更加專屬于應用本身,基礎設施的運維盡量被托管。存儲供給的特性更加高密、彈性、極速。
以上為大家分享了阿里云容器存儲的技術創新,包括 DADI 鏡像加速技術,為容器規?;瘑拥於撕芎玫幕A,ESSD 云盤提供極致性能,CNFS 容器網絡文件系統提供極致的用戶體驗。
隨時云原生創新序幕拉開,云原生存儲創新剛剛走出第一步,相信和各位行業專家一起開創和 Reinvent 存儲的創新機會。
更多關于阿里云容器網絡文件系統 CNFS 的技術能力、應用場景和使用方式,請點擊“閱讀原文”了解。
總結
以上是生活随笔為你收集整理的阿里云徐立:面向容器和 Serverless Computing 的存储创新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 独家交付秘籍,你确定不点开看看?
- 下一篇: 如何利用 “集群流控” 保障微服务的稳定