本次分享內容主要包括三部分:
(一)分布式存儲系統應該具備的能力;
(二)阿里雲分布式存儲系統盤古的介紹;
(三)分布式系統技術展望。
分布式存儲系統應該具備的能力
大數據同生活息息相關,大量數據的出現對分布式存儲提出了更高的需求,具體表現為以下方面:
(1) 高可靠,這是存儲系統需要滿足的最關鍵需求,既要保證數據在讀寫過程中不能發生錯誤,同時還要保證數據進入到系統后硬件失效不會導致數據丟失。隨着集群規模的增大,遇到硬件錯誤概率會隨之變高,存儲系統需要有能力保證在任何對數據做轉換的時候有無縫的數據檢查機制保證數據不會出錯,在硬件失效后可以及時補充數據防止硬件損壞引起的數據丟失。
(2) 高可用,存儲系統必須具備連續提供對外服務的能力。在系統運行過程中,軟件升級、軟件缺陷、供電和網絡系統維護、硬件失效都有可能中斷系統服務。為了實現高可用,軟件方面,系統模塊之間需要做到低耦合,模塊內部做成高可用,保證在某個集成或者某一個模塊的一批進程出現異常時系統其他組件仍然可用;硬件方面,可以根據硬件的拓撲結構來分布數據,防止某個硬件故障導致任何數據不可用,例如采用數據跨機架、跨數據中心分布等策略。
(3) 高性能,存儲系統軟件的實現需要釋放硬件技術進步帶來的性能提升。現在高速存儲設備再不斷降低延遲增加吞吐,如果還使用傳統的TCP網絡和內核的CPU調度,將不能充分發揮硬件的性能。例如現在NVMe SSD設備的寫入延時小於10微秒,RDMA網絡小數據包傳輸延時小於5微秒,如果采用傳統的多線程編程技術和傳統的TCP網絡模型會導致軟件時間消耗是硬件消耗的幾倍甚至幾十倍,完全體現不出硬件發展帶來的技術紅利。
(4) 低成本,隨着雲計算的蓬勃發展,數據爆炸式增長,粗放的堆設備的發展方式最終會讓公司失去競爭力。存儲系統在保證高可靠、高可用、高性能的前提下如何做到更低的成本會從根本上提高產品的競爭力。在存儲行業一般采用的通用方法是數據編解碼、分級存儲等技術。
(5) 好用,存儲系統面臨的用戶多種多樣,如何能服務好這些用戶是系統能否廣為使用的前提。在存儲系統接口上需要多種多樣,傳統用戶使用最多的是塊設備和文件系統,同時互聯網新應用需要的是對象存儲、分布式表格存儲等形式,如何在一套系統中提供這樣豐富的接口,既對存儲架構的靈活性有比價高的要求,同時還需要有很好的抽象能力。
阿里雲分布式存儲系統介紹
1. 系統架構
盤古存儲系統在阿里雲內部支持ECS、MaxCompute、OSS、OTS、SLS等幾乎所有的阿里雲存儲產品,對這些產品提供一致、可靠、高性能分布式文件接口和塊設備接口,對上層屏蔽硬件錯誤和存儲位置。
系統層次上遵循Meta和Data分離的原則,架構類似HDFS系統的NameNode和DataNode分離,同時利用數據讀寫和Meta節點低耦合、Meta節點高可用和Meta節點水平擴展等技術方案來規避Meta的單點問題。在盤古系統中NameNode對應盤古的Master節點,DataNode對應盤古的ChunkServer節點。針對塊設備,盤古在文件系統上增加block層來將塊設備的隨機讀寫映射到順序讀寫的文件上,保證塊設備數據的強一致。在上述兩層之外,增加系統管控層次,可以讓存儲系統同其他例如流計算、NoSQL、MapReduce等系統協調一致共享硬件資源,在系統運維方面可以從各個節點獲取監控、Trace、日志信息,給出運維建議和硬件故障自動處理。

系統模塊划分和部署圖
Master節點相當於系統的大腦,主要完成數據分布、恢復、垃圾回收功能。可以在數據寫入時根據數據節點的情況動態分配數據位置,防止局部熱點。在部分節點失效情況下,合理控制數據恢復過程,既保證數據可靠,同時讓性能損失最小,例如在某個交換機出現故障后,為了讓數據恢復盡量快,可以先在部分交換機下允許數據有多個副本,這樣可以加速數據恢復,在交換機故障恢復后選擇多個副本在同以交換機下的數據進行回收,盡量降低單交換機失效引起的集群性能波動。
ChunkServer節點需要做到可以適應不同的硬件類型,以各種硬件最友好的I/O方式操作硬件,釋放硬件極限性能,同時對外暴露統一的接口。實現的主要難度是在最小資源消耗的情況下,如何讓軟件消耗在整個I/O路徑上的消耗最小。在數據恢復和重新分布功能中,ChunkServer也是流量控制和優先級控制的重要環節,涉及到多點流量控制,防止系統由於數據恢復過多占用整體或者局部網絡流量導致系統性能下降。
2. 數據復制
在分布式存儲系統中,即利用了網絡設備的網卡、交換機,同時也利用了單機的磁盤、CPU、內存、主板等硬件設備,每種設備都有其特有的失效模型。那HDD磁盤舉例,其失效模型包括磁盤直接損壞導致數據丟失、IO下發之后永不返回、數據靜默錯誤,進入只讀狀態等多種錯誤類型,不同錯誤都需要有針對性的處理,底線應該保證數據不會丟失。在萬台的集群(一個獨立存儲系統稱為一個集群,數據中心和集群間的關系為多對多,假設機器為20盤位)中,如果按照磁盤年損壞率為5%計算,平均到每天要損壞3塊硬盤。
為保證數據可靠性,數據采用多拷貝的方式來防止硬件損壞導致數據丟失,Meta和Data同樣需要高可靠,但是使用的方法不同。為保證Meta可靠,Master多個進程分成一組,使用Raft協議對數據狀態進行復制。協議保證所有的Meta修改日志同步給大多數成員且落盤成功后才會返回用戶成功,同時針對每條日志計算CRC,防止數據出錯。數據采用多副本和Erasure Coding兩種方式實現,為了降低成本,存儲的拷貝數越少越好,但為了增加數據可靠性,存儲的拷貝越多越好,所以為了協調兩者關系,需要系統可以即時發現硬件錯誤並快速對數據進行恢復。
在盤古系統中,對於硬件錯誤會分成不同級別進行處理,例如磁盤錯誤作為第一優先級處理,因為這樣的錯誤會導致數據永久丟失,不管在網絡、磁盤、CPU的調度上都會為這樣的硬件失效留有配額,做到單盤數據丟失在分鍾量級就可以恢復。
3. 數據容災
數據容災主要解決某個數據中心的網絡和電力故障導致的系統可用性問題,跨數據中心和跨地域容災可以突破單數據中心可用性限制,將系統可用性提高到和數據可靠性相同的水平。
在容災水平上,一地多中心和異地多中心區別比較大,主要局限在延時和網絡帶寬兩個方面。在同地域100千米范圍內,多個數據中心間的延時增加小於1毫秒,帶寬可以做到接近於數據中心內部網絡的水平,在系統設計時主要考慮在數據分布上,在流量控制和延時上的限制不突出。但是跨地域的容災將延時增大到幾十毫秒,帶寬則下降至少一個數量級。為了緩解這樣的問題,需要做到數據可以異步進行同步,數據可以按照重要程度來區別對待。異步復制需要保證系統Meta的一致性,需要在每時每刻保證充分利用了跨地域的網絡帶寬,地域內部多副本防止數據恢復占用跨地域帶寬。數據重要程度則反映到對數據分布特性的指定,目前盤古系統可以設置每個文件的分布特性,改變分布特性后可以動態對數據分布做出調整。
4. 低成本
降低成本從不同維度可以找到不同的解決方案,將方案集成到存儲系統就可以達到極致的成本降低。從軟硬件方面考慮,軟件編碼可以有效降低存儲空間,同時硬件高集成度也可以降低存儲成本。從系統內部單機到整個集群,單機降低資源消耗和整個集群共享資源都可以降低對硬件的要求。從系統間考慮,能將多個系統混合部署到相同機器上分時或者同時隔離使用硬件資源也可以做到成本降低,同時有助於降低網絡帶寬要求。
盤古系統支持Erasure Coding編碼,可以在降低數據可靠性的前提下,將數據存儲成本降低一半以上,同時利用集成度非常高的存儲機型,降低對網絡、內存、CPU等的均攤成功,這是一個軟硬件同時進行優化達到極大降低成本的事例。為了在降低成本不降低性能的目的,在單機的硬件上盤古采用SSD介質Cache的技術手段,在享受HDD低成本的同時還可以體驗到接近於SSD的高性能,同時在整個盤古系統范圍內,可以設置文件的多個拷貝分別放在不同的介質上,在多個副本間做不同的介質分布,在系統級別將介質混合使用的方案發揮到極致。在和其他系統共享使用硬件的方案上,盤古提供本地磁盤接口,當用戶程序需要使用本地盤存儲數據的時候,直接向盤古申請一塊塊設備,按照自己的要求格式化成需要的各種文件系統,所有數據流均經過盤古做統一的I/O調度。這種方案不但沒有造成由於共享硬件帶來的管理復雜性和硬件效率降低,還給用提供了兼容所有現在本地磁盤操作所有數據操作接口。有了這基礎,盤古系統和其他計算類系統可以有效共享網絡、磁盤、內存、CPU資源,達到硬件使用效率的增加。
5. 高性能
為了實現高性能,系統在各個模塊應該盡量降低軟件實現對時間和資源的消耗,常用的技術手段有:使用Cache;降低多線程訪問防止鎖沖突帶來的時間消耗和上下文切換;在數據處理過程中國利用內存零拷貝的處理方式降低時間消耗;並發使用多組硬件;硬件處理同軟件處理在時間上並行處理;數據處理流水線化增大吞吐;借助新硬件技術對某個數據階段進行加速。
上述技術雖然不能完全應用的所有模塊,但是針對不同模塊的特點選擇盡量多得手段組合可以將性能優化的極致。例如盤古的Master節點使用了所有文件Meta池化緩存在內存中的Cache方式,細粒度目錄鎖,處理流水線,操作日志合並落盤,軟件處理和落盤並行處理等技術,單組盤古Master的讀寫混合OPS可以達到10萬/秒。盤古在塊存儲數據通路上采用全鏈路無鎖,全程無內存拷貝,磁盤操作和數據驗證並行處理,操作Session使用線程級別Cache等技術,可以充分發揮NVMe SSD和雙25Gb網絡的極限性能,延時小於30微妙,數據流量將網絡帶寬用滿的效果。
6. 規模和隔離
規模增大有利於平滑各種由於瞬時並發帶來的系統波動,同時規模增大會帶來單集群多租戶的場景順勢產生,多個租戶隔離和優先級控制可以防止高優先級用戶收到其他用的影響。
在MaxCompute系統需要調度的作業規模比較大,單個計算任務使用的數據量可以達到PB級別,任務眾多,每天處理的作業量在百萬級別,在每天凌晨開始到早上結束的這段時間內部系統均處於眾多用戶並行使用的階段,白天更多的資源會閑下來給開發調試軟件版本和模型訓練使用。
針對這樣的計算規模,盤古系統可以提供單集群1萬台的存儲系統,整個MaxCompute系統會在不同集群間調度計算資源,導致鏈接單個盤古集群的客戶端數量遠遠大於一個集群的國模。在盤古系統中為了應對規模個盤古Master帶來的管理壓力,將目錄樹進行靜態划分,用多組Master來提供更大的處理能力,同時在各個處理階段采用優先級隊列的方式來做到多用戶的隔離個優先級目的。在MaxCompute使用情況下,盤古單集群使用3組Master來對外服務,每個Master可以並行處理70萬客戶端的並發訪問,每個任務需要在請求中提供用戶信息,Master通過用戶信息和用戶訪問的請求數在多個用戶間做公平性調度。當相同優先級的多個用戶的請求同時到達Master且超過處理能力時,發送請求最多的任務的請求會優先被丟棄,這樣可以保證整個集群中小任務可以盡快執行完成釋放出資源,大任務有效利用Master處理能力盡快完成處理的目的。在數據路徑上使用相同的處理方法,做到不同用戶的I/O做到優先級控制和相同優先級內部的公平。
多隊列調度
相同優先級調度
針對MaxCompute這種大規模數據處理任務的計算特點,大部分中間數據只在計算過程中用,計算完畢后就會被刪除,例如MapReduce過程中產生Shuffle數據,盤古為這類數據的操作提供了特殊處理,這類文件的創建、打開、讀寫、關閉、重命名等操作不經過Master節點,只會存儲於單台機器跨網絡讀取,刪除操作跟隨任務的生命周期由Master節點負責。這種類型文件的增加有效的解決了Master節點在大規模計算過程中OPS能力不足的問題,增大了系統規模。
分布式存儲系統技術展望
隨着更多傳統業務由於成本和新應用場景要求會搬遷到雲計算平台上來,對系統的接口兼容、性能和可用性會提出更高的要求,同時大客戶和眾多用戶上雲會進一步對系統的規模提出要求。所以從不同方面可以總結出分布式系統的發展路線:
接口方面:
1. ISCSI的系統接口可能企業存儲上雲的主要接口,這個方式可以有效兼容當前所有傳統存儲系統的接口形態,同時對於后端定制性更強,有利於快速變化的雲計算技術的迭代更新。HDFS由於有Hadoop計算生態非常廣泛的用戶基礎,會作為一個重要的分布式存儲接口形式來順利將生態用戶遷移上公有雲計算平台。
2. 互聯網新業務要求存儲系統在提供塊和文件接口的同時,也需要提供對象存儲、NoSQL等存儲形態,同時在這樣的形態之上需要存儲系統集成圖片處理、視頻處理、特征提取等更多的計算服務,一站滿足很多用戶公共的處理要求,這樣不但可以讓存儲和計算結合來降低成本,同時也將稍微偏底層的公共技術作為用戶建立新系統的基礎。
3. 存儲系統對於規模的適應性可以拓展更多企業客戶,並且將會成為這部分企業使用公有雲的必經階段。只有讓用戶在自己的企業內部熟悉了存儲系統的功能,同時了解到企業內部很難在資源彈性、容災級別上和公有雲媲美后,將最終切換到公有雲上。
穩定性方面:
1. 跨數據中心和跨地域的容災將是存儲系統的標准配置,同時對於容災進行動態調整和靈活的定價策略將吸引更多的用戶。
2. 容器技術和只能交換網絡需要進一步和存儲系統進行結合,在數據安全和隔離性方面給存儲系統帶來巨大變化。目前基於進程內部的隊列和優先級控制始終處於被動狀態,不能在源頭上就達到數據流量和優先級的控制,增加了系統的消耗。
性能方面:
1. 存儲節點的數據處理將使用專用硬件設備接管來實現數據處理加速,並將數據處理和存儲數據的過程合並。存儲節點將集成更多的硬件,例如FPGA、RDMA網卡、GPU,這些硬件為特定的數據處理帶來加速效果,同時降低功耗,例如利用FPGA對數據進行加密和解密,校驗數據的Checksum等。
2. 操作系統內核將不會再參與數據的I/O處理。由於內核進程調度、內存管理和文件系統等增加的軟件消耗阻止了新存儲硬件性能的發揮,所以這些軟件層次將直接被跳過或者放到用戶態進行重新實現,而內核只會參與存儲節點的管理工作等對時效性要求不強的功能。
