英特爾DAOS分布式異步存儲系統(tǒng)


隨著數(shù)據(jù)呈指數(shù)級增長,分布式存儲系統(tǒng)不僅成為了數(shù)據(jù)中心的核心,同時也成了其主要的瓶頸。數(shù)據(jù)訪問延遲高、可擴展性差、管理大型數(shù)據(jù)集難度大、缺乏查詢功能,這些都是常常會遇到的阻礙。傳統(tǒng)存儲系統(tǒng)是針對旋轉介質和 POSIX輸入/輸出 (I/O) 所設計的。這類存儲系統(tǒng)出現(xiàn)了巨大的性能瓶頸,很難通過升級來支持新的數(shù)據(jù)模型和下一代工作流程。
存儲需求不斷發(fā)展,而需要處理的數(shù)據(jù)集也在持續(xù)增加,這使得消除數(shù)據(jù)與計算之間的障礙變得愈發(fā)迫切。存儲不再由具有大量流寫入的傳統(tǒng)工作負載(例如檢查點/重啟)主導,而是越來越多地受到新主流存儲的復雜 I/O 模式的支配。高性能數(shù)據(jù)分析工作負載正在生成大量隨機讀取和寫入。人工智能 (AI) 工作負載的讀取需求遠超傳統(tǒng)高性能計算 (HPC) 工作負載。從設備流向高性能計算集群的數(shù)據(jù)需要更高的服務質量 (QoS) 以避免數(shù)據(jù)丟失。
現(xiàn)在,數(shù)據(jù)訪問速度變得與寫入帶寬同等重要。數(shù)據(jù)集的查詢、分析、過濾和轉換有賴于新的存儲語義。所以,能夠允許全新工作流程將高性能計算、大數(shù)據(jù)和人工智能相結合以進行數(shù)據(jù)交換和通信的單一存儲平臺非常重要。
英特爾長期致力于為以數(shù)據(jù)為中心的計算構建完全開源的軟件生態(tài)系統(tǒng),并針對英特爾架構和非易失性存儲器 (NVM) 技術(包括英特爾傲騰持久內存和固態(tài)盤)進行了全面優(yōu)化。分布式異步對象存儲 (DAOS) 是英特爾構建的百億億次級 (exascale) 存儲堆棧的基礎。DAOS 是一種開源軟件定義橫向擴展對象存儲,可為高性能計算應用提供高帶寬、低延遲和高 IOPS 的存儲容器。下一代以數(shù)據(jù)為中心的工作流程將結合仿真、數(shù)據(jù)分析和人工智能,而 DAOS 能夠為其提供支持。

與主要針對旋轉介質設計的傳統(tǒng)存儲堆棧不同,DAOS 針對全新 NVM 技術進行了重新構建。此外,DAOS 還是一套輕量級的系統(tǒng),可在用戶空間中端對端地運行,并能完全繞開操作系統(tǒng)。DAOS 沒有延續(xù)針對高延遲、塊存儲的 I/O 模型,而是選擇了為訪問高細粒度數(shù)據(jù)提供原生支持的 I/O 模型,以此釋放下一代存儲技術的性能。
現(xiàn)有的分布式存儲系統(tǒng)使用高延遲的點對點通信,而 DAOS 使用能夠繞過操作系統(tǒng)的低延遲、高消息速率用戶空間通信。當下,大多數(shù)存儲系統(tǒng)都是針對塊 I/O 設計的,所有 I/O 操作都通過塊接口在 Linux* 內核中進行。為了優(yōu)化對于塊設備的訪問,業(yè)界已經付出了例如合并、緩沖和聚合等方面的許多努力。但是,所有這些優(yōu)化都無法適用于英特爾著力發(fā)展的下一代存儲設備,因為使用這些優(yōu)化可能會產生不必要的開銷。而 DAOS 專為優(yōu)化對英特爾傲騰持久內存和 NVM Express (NVMe) 固態(tài)盤 (SSD) 的訪問而設計,它規(guī)避了這些不必要的開銷。
DAOS 服務器將其元數(shù)據(jù)保存在持久內存中,而將批量數(shù)據(jù)直接保存在 NVMe 固態(tài)盤中。此外,少量 I/O 操作在聚合之前就會被吸收到持久內存中,然后再遷移到大容量閃存。DAOS 使用持久內存開發(fā)套件 (PMDK) 提供對于持久內存的事務訪問,并使用存儲性能開發(fā)套件 (SPDK) 為 NVMe 設備提供用戶空間 I/O1,2。這種架構的數(shù)據(jù)訪問速度比現(xiàn)有存儲系統(tǒng)快好幾個數(shù)量級(從毫秒 [ms] 級加快到微秒 [μs] 級)。
? 超高細粒度、低延遲和真正零拷貝的 I/O
? 非阻塞型數(shù)據(jù)和元數(shù)據(jù)操作,以支持 I/O 和計算重疊;
? 先進的數(shù)據(jù)放置,以解決故障域
? 由軟件管理冗余,可通過在線重建,支持復制和擦除代碼
? 端到端 (E2E) 數(shù)據(jù)完整性
? 可擴展的分布式事務,提供可靠的數(shù)據(jù)一致性和自動恢復功能
? 數(shù)據(jù)集快照功能
? 安全框架,用于管理存儲池的訪問控制
? 軟件定義存儲管理,用于調配、配置、修改和監(jiān)控存儲池
? 通過 DAOS 數(shù)據(jù)模型和 API,為 I/O 中間件庫(例如 HDF5*、MPI-IO* 和 POSIX)提供原生支持。應用無需移植代碼,即可直接使用 DAOS API
? Apache Spark* 集成
? 使用發(fā)布/訂閱 API,實現(xiàn)原生生產者/消費者工作流程
? 數(shù)據(jù)索引和查詢功能
? 存儲內計算,以減少存儲和計算節(jié)點之間的數(shù)據(jù)移動
? 容災工具
? 與 Lustre* 并行文件系統(tǒng)無縫集成,并能擴展到其他并行文件系統(tǒng),從而為跨多個存儲層的數(shù)據(jù)訪問提供統(tǒng)一的命名空間
? 數(shù)據(jù)搬運器,用于在 DAOS 池之間遷移數(shù)據(jù)集,將數(shù)據(jù)集從并行文件系統(tǒng)遷移到 DAOS,反之亦然。
DAOS 軟件堆棧依賴于客戶端-服務器模型。I/O 操作將在與應用直接連接的 DAOS 庫中處理,并由在 DAOS 服務器節(jié)點 (DN) 上的用戶空間中運行的存儲服務提供支持。

DAOS 客戶端庫的占位極小,可盡可能減少計算節(jié)點上的噪聲并支持顯示進度的非阻塞型操作。利用 libfabrics* 和 OpenFabric 接口* (OFI*),就可將 DAOS 操作交付給 DAOS 存儲服務器,以充分利用架構中的任何遠程直接內存訪問 (RDMA) 功能。
在這種新的存儲范例中,POSIX 不再是新數(shù)據(jù)模型的基礎,而是像其他任何 I/O 中間件一樣,POSIX 接口將構建為 DAOS 后端 API 頂部的庫。POSIX 命名空間可以封裝在容器中,并由應用掛載到其文件系統(tǒng)樹中。對于成功打開容器的應用,其中的任何任務都可以訪問此應用專有的命名空間。用于解析已封裝命名空間的工具也是其所提供的一部分。對于已封裝的 POSIX 文件系統(tǒng),數(shù)據(jù)和元數(shù)據(jù)都將以漸進式布局完全分布在所有可用存儲中,以幫助確保性能和彈性。

此外,POSIX 仿真還具有以下功能:可擴展的目錄操作、可擴展的共享文件 I/O、可擴展的文件/進程 I/O以及用于從故障或損壞的存儲中恢復的自我修復功能。盡管大多數(shù)高性能計算 I/O 中間件可以通過 POSIX 仿真層在 DAOS 后端透明地運行,但通過遷移 I/O 中間件庫實現(xiàn)對 DAOS API 的原生支持后,就能利用 DAOS 豐富的 API 和先進功能。
DAOS 容器通過多個 I/O 中間件庫向應用公開,從而在提供平滑遷移路徑的同時,盡可能減少應用代碼的修改量(甚至無需修改)。在 DAOS 庫頂部運行的中間件 I/O 庫包括:
? POSIX FS:DAOS 提供兩種支持 POSIX 的操作模式。第一種模式是針對生成無沖突操作以支持高并發(fā)性的“行為良好”的應用。第二種模式是面向對一致性要求更為嚴苛但可犧牲部分性能的應用。
? MPI-I/O:ROMIO* 驅動程序在 DAOS 頂部為 MPI-I/O 提供支持。凡是使用 MPI-I/O 作為 I/O 后端的應用或中間件 I/O 庫都可以在 DAOS 頂部無縫使用此驅動程序。這一驅動程序已推送到上游的 MPICH* 存儲庫,并且可移植到其他使用 ROMIO 作為 MPI-IO 標準 I/O 實現(xiàn)的 MPI 實施方案中。DAOS MPI-IO 驅動程序直接基于 DAOS API 構建。
? HDF5:HDF5 虛擬對象層 (VOL) 連接器使用 DAOS 來實現(xiàn) HDF5 數(shù)據(jù)模型。通過 VOL 插件,使用 HDF5 表示和訪問數(shù)據(jù)的應用只需進行少量修改(甚至無需修改)現(xiàn)有 HDF5 API 的代碼,就可以利用 DAOS 容器替換 POSIX 文件中的傳統(tǒng)二進制格式。該連接器通過原生 DAOS 后端實現(xiàn)官方 HDF5 API。在內部,HDF5 庫管理 DAOS 事務并提供從 H5Fopen() 到 H5Fflush()、H5Fclose() 的一致性。另外,還通過 API 擴展提供異步 I/O、快照和查詢/索引等新功能。


Silo、MDHIM 和 Dataspaces 等其他高性能計算 I/O 中間件也能從 DAOS API 的原生端口中受益。英特爾與其他企業(yè)和機構(例如天氣預報機構)以及行業(yè)先鋒(例如娛樂業(yè)、云服務以及石油和天然氣行業(yè))密切合作,通過 DAOS 支持新的數(shù)據(jù)模型。
此外,英特爾正在探索如何在大數(shù)據(jù)和數(shù)據(jù)分析框架中實現(xiàn) DAOS。更具體地說,就是如何為 Apache Arrow提供 DAOS 后端。
Apache Arrow 標準定義了要存儲在列向量中的數(shù)據(jù),以支持數(shù)據(jù)分析用例。此標準的目的是為其他數(shù)據(jù)分析系統(tǒng)(例如 Apache Spark、Apache Thrift和 Apache Avro)定義標準。
目前,這些系統(tǒng)的格式各異,而在使用通用的 Apache Arrow 格式后,就無需在這些系統(tǒng)之間將共享數(shù)據(jù)序列化/反序列化。Apache Arrow 旨在作為緊密集成其他大數(shù)據(jù)和數(shù)據(jù)分析系統(tǒng)的組件。Apache Arrow 還提供 I/O API,以將文件存儲在磁盤上。
目前,此 API 適用于 Apache Hadoop 生態(tài)系統(tǒng)中的 Apache Hadoop 分布式文件系統(tǒng) (HDFS)。面向 Apache Arrow 的 DAOS 插件可在內存中將 Apache Arrow 格式轉換為 DAOS 容器,從而可讓更多應用適合高性能計算系統(tǒng)。
推薦閱讀:
溫馨提示:
掃描二維碼關注“全棧云技術架構”公眾號,點擊閱讀原文進入“全棧云技術知識”星球獲取本文技術資料。

