天天看點

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

面向容器和 Serverless Computing 的存儲創新發展驅動了存儲視角的新變化,整個存儲界面上移,開發者更加專屬于應用本身,基礎設施的運維盡量被托管。存儲供給的特性更加高密、彈性、極速。

*作者:徐立

雲原生趨勢下,應用容器化比例正在快速增長,Kubernetes 也已成為雲原生時代新的基礎設施。 Forrester 預測到 2022 年,全球組織/公司在生産環境運作容器化應用。從今天不足 30%的比例将大幅度提升到超過 75%,企業應用容器化的趨勢勢不可擋。我們可以看到兩個普遍的現象。首先,在雲上托管 Kubernetes 已經成為企業上雲及運作容器的優先選擇。另外,使用者使用容器的方式也在改變,從無狀态應用到核心企業應用再到資料智能應用,越來越多的企業使用容器來部署生産級别、複雜度高和高性能計算的有狀态應用。比如 Web 服務、内容資料庫、資料庫,甚至 DevOps、AI/大資料應用等。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

随着基礎設施從實體機到虛拟機,到以 Kubernetes 為代表的容器環境,甚至到 Serverless 的逐漸演進,今天的計算和應用正在面臨巨大的變化。這種變化使得資源粒度越來越細,生命周期越來越短,計算按需使用。

從使用者視角來看雲原生帶來的存儲變化,最明顯的就是使用者使用存儲界面發生上移,和應用不直接相關的存儲服務從應用層下沉到雲平台,使用者更關心應用。

舉例來說,傳統形态使用者需要關心所有硬體和軟體,逐漸過渡到使用者關心虛拟機、作業系統和整個應用軟體棧,到今天在 Serverless 裡演變成使用者隻關心應用業務和代碼。系統資源從實體資源層、虛拟化資源層上升到應用開發層,使用者無需關心底層的基礎設施。

在這樣的技術體系下,存儲的能力的演變主要展現在以下 3 個方面:

1、高密

虛拟機時代,一個虛拟機就對應一個完整的存儲空間,可以用其存儲整個應用所需要的所有資料相關的通路和存儲需求。在Serverless 函數計算環境,應用被切分為一個個函數,對應的資源都需要存儲管理,是以,存儲的密度發生了很大的變化,存儲密度更高。

2、彈性

随着應用拆分的粒度越來越細化,存儲密度逐漸提升,Serverless 函數計算大規模執行個體需要高并發啟動,存儲需要極緻彈性的能力。

3、極速

從Serverless 函數計算的角度來看,函數是整個程序的一個部分,生命周期自然變短。由此出現大量短生命周期的容器執行個體。随着生命周期越來越短,需要存儲快速挂載/解除安裝,快速通路。

随着服務界面發生上移,存儲管控界面被重塑,内置存儲和外置存儲變得更加清晰。Serverless 環境裡,使用者可見界面是外置存儲(包括檔案存儲和對象存儲),而内置存儲(包括鏡像存儲和臨時存儲)對使用者是不可見的,内置存儲由阿裡雲來管理,提供了創新的機會。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

阿裡巴巴容器規模化部署主要面臨的挑戰展現在以下幾個方面:

1、業務體量大。 叢集規模大,高達十萬量級;所有應用全部容器化,并且應用鏡像大,通常以數十 GB 大小為主。

2、更快的部署速度。 業務規模持續增長,要求雲平台可以快速的部署應用,才能夠處理業務增長,尤其雙十一大促時緊急擴容,難以事前對各服務準确預估容量。

3、然而大規模的建立或者更新容器叢集依然很慢,主要原因是容器部署鏡像的下載下傳和解壓很慢,主要的技術挑戰如下:

• 時間開銷大:時間開銷 ∝ 鏡像大小 * 節點數;一千節點就需要存一千份鏡像;

• CPU 時間開銷大: gzip解壓慢,且隻能串行解壓;

• I/O 壓力大: 下載下傳、解壓兩輪寫盤,包括衆多節點同時寫盤,對雲盤産生“共振”;

• 記憶體占用擾動: 對主控端 page cache 産生嚴重擾動;

• 但是有效資料占比少: 啟動時平均僅需鏡像資料的6.4%。

應對以上技術挑戰,大規模容器部署的關鍵需求抽象總結為三點:

1、按需: 下載下傳解壓速度足夠快、資料按需通路和按需傳輸。

2、增量分層: 資料解耦,通過 OCI-Artifacts 标準 overlayfs 把層次做劃分,增量資料,時間資源使用更有效。

3、Remote Image : 采用遠端鏡像技術,改變鏡像格式,同時減少本地資源的消耗。

Remote Image 主要有兩種技術實作的方式,一種是基于檔案系統,第二種是基于塊裝置。Remote Image 技術方案對比如下圖所示:

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

基于檔案系統的 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 的随機讀取。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

DADI 鏡像采用塊存儲+分層技術,每層隻記錄被增量修改的資料塊,支援壓縮以及實時的按需解壓縮;支援按需傳輸,隻傳輸用到的資料塊下載下傳使用;DADI 還可以采用 P2P 傳輸架構,一傳十、十傳百,在大規模叢集内将網絡流量均衡到所有多個節點上去。

DADI 增量鏡像可以通過基于塊+分層技術來實作,其中每個層對應于一個 LBA 的變更。DADI 的關鍵技術包括遠端鏡像的細粒度按需傳輸,高效的線上解壓縮,基于 trace 讀取,用于處理突發工作的 P2P 傳輸技術。DADI 在提高部署應用的靈活性和彈性方面非常有效。

1、分層塊裝置 Overlay Block Device

每層記錄被增量修改的變長資料塊 LBA,不涉及檔案/檔案系統的概念,以 512 位元組為最小粒度。快速索引,支援變長記錄,以節省記憶體,各記錄的 LBA 不重疊,支援高效的區間查詢。

2、原生支援可寫層

提供追加寫檔案和随機寫稀疏檔案兩種模式建構 DADI 鏡像。隻讀層,每個隻讀都可以按照不同類型的大小,每層查詢區間,速度極快。可寫層由存儲原始資料(Raw Data)和存儲索引(Index)兩部分組成,接受 append only 組織而成。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

3、ZFile 壓縮格式

标準壓縮檔案格式,例如 gz,bz2,xz 等,無法高效的進行随機讀寫操作,無論讀取壓縮檔案中的哪一部分,都需要從頭部開始解壓,為了支援 layer blob 的壓縮并同時支援遠端鏡像的按需讀取,DADI 引入了 ZFile 壓縮格式。ZFile 的壓縮格式如下圖所示,按固定大小資料塊壓縮,隻解壓讀到的資料塊,支援多種有效的壓縮算法,包括 lz4,zstd,gzip 等,采用通用格式,不綁定于 DADI。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

4、基于 Trace 預取

記錄應用過程中的讀取日志、隻記位置、不記資料本身。在應用冷啟動時,若已有 trace 記錄,則 DADI 将根據trace提前把資料預取回本地,采用高并發讀取,更加高效。Trace 作為一個特殊的 layer 存于 image,專門用于加速,使用者不可見,未來可容納其他加速檔案。如下圖綠色部分表示加速層、容納 trace 檔案以及其他檔案。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

5、按需 P2P 傳輸

在我們的生産環境中,有幾個關鍵應用程式已經部署在數千台伺服器上,并且包含高達數 GB 的 Layer,這些應用程式的部署給 Registry 和網絡基礎設施帶來了巨大壓力。為了更好的處理此類大型應用,DADI 将最近使用的資料塊緩存在每個主控端的本地磁盤上,采用 P2P 的方式在主機之間傳輸資料。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

1、采用樹形拓撲結構分發資料

• 各個節點均緩存最近使用過的資料塊

• 跨節點請求大機率命中父節點自己的 cache

• 未命中的請求會遞歸向上傳遞,直到 registr

2、拓撲結構由 root 節點動态維護

• 每個 layer 單獨一個傳輸拓撲

3、每個機房單獨部署一組 root

• 多節點高可用架構

• 基于一緻性哈希的分工

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

我們将 DADI 容器啟動延遲與 .tgz 鏡像、Slacker、CRFS、LVM 和 P2P 鏡像下載下傳進行了比較,使用 DockerHub.com 上的 WordPress 鏡像,我們觀測單執行個體的冷啟動延遲,所有伺服器和主機位于同一資料中心。如左圖所示,結果表明,使用 DADI 可以明顯減少容器的冷啟動時間。

我們在公共雲上建立了 1000 個 VM,并将他們用做容器的主機。在每個主機上啟動 10 個容器,總共 10000 個容器。測試使用 Python 編寫的一個小程式 Agility,通路 HTTP 伺服器并在服務端記錄時間。如右圖所示,結果表明 DADI 的冷啟動在 3 秒之内快速完成。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

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 Computing 的存儲創新

上面我們談到了 Serverless 應用架構的新範式,現在我們看到一個趨勢,從虛拟機到普通容器,再逐漸演變為神龍裸金屬部署安全容器。從存儲的布局角度來看,其面臨的顯而易見的挑戰是更加高密和多租戶。

容器接入技術趨勢: 計算層基于 ECS + 普通容器的架構向基于神龍 + 安全容器架構演進,單節點密度達到 2000,單執行個體規格最小粒度記憶體 128MB,1/12 CPU。容器接入技術的趨勢,帶來了 I/O 資源放大的挑戰。

阿裡雲存儲在端接入上有自己的思考,存儲分為内置存儲(鏡像和臨時存儲)和外置存儲(檔案系統/共享檔案系統、大資料檔案系統、資料庫檔案系統等)。

存儲系統如何和底層更好的連接配接?存儲接入容器的方式是通過 virtio 的能力解除安裝到神龍Moc 卡上,神龍 Moc 卡 + virtio 的通路和底層存儲服務更好的關聯。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

ESSD 雲盤為使用者提供高可用、高可靠、高性能的塊級随機通路服務,并提供原生快照資料保護和跨域容災等豐富的企業特性。

面向現代化應用的彈性供給雲盤 ESSD 具備兩個關鍵特性:

雲盤挂載密度提升 4 倍,單執行個體最大支援 64 塊雲盤

性能與容量完全解耦,使用者需求不需要預先設定,按需而定。

舉例來說,為了應對很多使用者面臨的問題:無法準确預估業務峰值,在性能配置上難以做好精準規劃。如果性能配置預留過高,會造成日常資源的大量閑置浪費;而如果性能預留不足,業務突發洪峰會造成業務受損。我們推出了 ESSD Auto PL 雲盤,它支援性能指定配置的同時,支援按業務負載自動伸縮,單盤可以自動提升到最高 100 萬 IOPS 性能,為不可預期的突發通路提供安全便捷的性能自動配置。

針對容器中使用檔案存儲的優勢和挑戰,阿裡雲存儲團隊與容器服務團隊共同推出了容器網絡檔案系統 CNFS,内置在阿裡雲托管的 Kubernetes 服務 ACK 中。CNFS 通過将阿裡雲的檔案存儲抽象為一個 K8s 對象(CRD)進行獨立管理,包括建立、删除、描述、挂載,監控及擴容等運維操作,使使用者可以在享受容器使用檔案存儲帶來的便捷的同時,提高檔案存儲的性能和資料安全,并提供容器一緻的聲明式管理。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

CNFS 在可通路性、彈性擴容、性能優化、可觀測性、資料保護、聲明式等六個方面針對容器存儲進行了深度優化,使其與開源方案相比具有以下明顯優勢:

在存儲類型方面,CNFS 支援檔案存儲,目前支援阿裡雲檔案存儲 NAS

支援 Kubernetes 相容的聲明式生命周期管理,可以一站式管理容器和存儲

支援 PV 的線上擴容、自動擴容,針對容器彈性伸縮特性優化

支援更好的和 Kubernetes 結合的資料保護,包括 PV 快照、資源回收筒、删除保護、資料加密、資料災備等

支援應用級别的應用一緻性快照,自動分析應用配置和存儲依賴,一鍵備份、一鍵還原

支援 PV 級别監控

支援更好的通路控制,提高共享檔案系統的權限安全,包括目錄級 Quota、ACL

提供性能優化,針對檔案存儲的小檔案讀寫,提供更優化的性能

成本優化,提供低頻媒體及轉換政策,降低存儲成本

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

資料庫容器化使用 ESSD 雲盤高密挂載的業務場景主要面臨的需求是:資料庫部署模式從虛拟機向容器化發展,持續提升彈性和可移植性,簡化部署。容器部署密度随着 CPU 核數線性增長,需要持久化存儲提升挂載密度。資料庫作為 IO 密集型業務,對單機存儲性能提出更高要求。

我們的解決方案是資料庫使用 g6se 存儲增強型執行個體,單執行個體提供最高 64 塊雲盤挂載密度,g6se 存儲增強型執行個體,提供最高 100 萬 IOPS,4GB 存儲吞吐,适配單機高密部署的性能需求。

資料庫容器化使用 ESSD 雲盤高密挂載的優勢是:

高密挂載:相比上代執行個體,雲盤挂載密度提升 400%,提升資料庫執行個體單機部署密度。

高性能:單機最高 100 萬 IOPS,多個雲盤之間 IO 天然隔離,提供穩定可預期讀寫性能。

高彈性:ESSD 雲盤 支援 IA 快照,快照立即可用實作隻讀執行個體的秒級建立。

高可靠性:雲盤基于 9 個 9 資料庫可靠性設計,同時支援快照、異步複制等資料保護手段,解決軟硬體故障帶來的資料安全風向。

阿裡雲徐立:面向容器和 Serverless Computing 的存儲創新

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 的技術能力、應用場景和使用方式,請點選“閱讀原文”了解。

繼續閱讀