存儲系統的設計門檻是比較高的,和計算系統存在的最大區別在於存儲系統所承載的是數據,一旦系統出現故障,不只業務的連續性得不到保障,更爲重要的是用戶數據將會形成丟失。計算節點發生故障,最多形成業務連續性中斷,這是與存儲系統相比在可靠性要求方面最大的區別。算法
十幾年前剛剛接觸存儲系統的研發,當時沒有以爲存儲有多複雜,不就是把數據按照必定規則存放在磁盤中,而且實現必定的功能,例如數據保護RAID、數據複製Replication、數據快照Snapshot以及文件系統嘛。感受存儲系統中最複雜的是各類功能,設計重點就是在於這些存儲軟件功能的研發。在那一段研發經歷的過程當中,困擾咱們最大的問題是通過長時間測試以後出現一個小几率的系統Panic問題;異常斷電以後出現了不該該出現的數據一致性問題;出現問題以後很難去定位,須要經過不斷的故障再現。總之,複雜龐大的存儲軟件棧很難收斂,甚至影響到了產品的推廣。後端
經歷國際一線存儲大公司的洗禮以後,我發現之前研發的存儲軟件功能甚至比一線廠商的更加先進和酷炫。代碼的風格和軟件的層次化、靈活性一點都不比一線廠商的軟件來的差。可是,一線廠商的存儲產品就是特別穩定,尤爲是一旦出現問題以後,能夠經過不少方式儘快將問題收斂。不少人可能認爲大公司在流程建設、項目管理、研發管理等方面更加健全,更加專業,能夠更好的保證產品質量。經過長期總結,我領悟到其實事情並無咱們想象的那麼簡單,好的流程建設、項目管理以及研發管理是要創建在一支優秀團隊基礎之上的。這支優秀團隊在設計存儲系統時須要具有深刻骨髓的面向數據可靠性設計的思想。而不是簡單的具有面向功能設計的能力。面向數據可靠性設計其實要求架構師具有更高的、系統的全局能力,而再也不侷限於一個功能與子系統。對於存儲系統來講,數據可靠性是底線,在整個系統設計過程當中若是觸碰了底線,那麼再好的設計都將會埋入隱患,都將會對系統、對客戶形成傷害。架構
存儲系統的設計門檻就在這兒,若是要作到面向數據可靠性的設計,在這個底線基礎上再作到超高的性能、極高的系統可擴展性、完備的功能、低廉的價格,的確對設計人員來講提出了不小的挑戰。ide
說到面向數據可靠性的存儲系統設計原則,我想舉一個例子來詳細探討一下。你們都很是熟悉數據保護子系統RAID,而且不少人在選擇RAID的時候只會考慮是用軟件實現的?仍是採用硬件實現的這個層面的問題。軟RAID與硬RAID的問題討論不少。在面向數據備份的重複數據刪除系統中,不少設計者會將重點放在數據去重算法上,這是一個很是重要的軟件功能,對於磁盤後端的存儲,一般會採用高性能RAID6來搞定。而且對後端RAID的評價指標是高帶寬或者很好的IOPS性能就能夠了。市場上不少備份去重設備都是這樣的設計思路。若是採用面向數據可靠性的設計思路,那麼這種產品設計是不完美的,而且不是最佳的備份存儲產品。你們知道數據備份每每是數據可靠性的最後的幾個環節,若是備份系統都出現了問題,那麼用戶的數據從哪裏恢復呢?在採用RAID6配置的備份系統中,若是出現了三盤同時故障的狀況,用戶的數據怎麼辦呢?這纔是面向數據可靠性設計須要考慮的問題。性能
EMC著名的去重備份產品DataDomain在設計的時候就沒有采用第三方的RAID卡,甚至都沒有采用第三方的盤陣。緣由很簡單,RAID卡或者第三方盤陣在出現多個磁盤發生故障的狀況下,沒有辦法提供極佳的數據恢復支持,而備份系統對數據可靠性的要求要高於應用與主存儲業務中的盤陣或者RAID卡。因此,DataDomain在技術決策的時候選擇研製面向備份領域的數據保護子系統DD-RAID。若是從功能的角度來說,DD-RAID和普通RAID沒有什麼本質上的區別,只是具備更高級別的數據保護機制,在多盤發生故障的狀況下,也能夠經過額外的元數據信息恢復和搶救數據。在產品宣傳方面DataDomain將一系列這樣的技術都概括爲DIA,在各個層次都引入額外的數據校驗、保護機制,保證數據可靠性。測試
固然,DD-RAID的性能不是最完美的,尤爲是隨機寫性能很通常。可是,他的可靠性是最高的,而且在極端狀況下均可以恢復數據。這就是在面向數據可靠性設計原則指導之下的技術選擇,這也是存儲系統設計頗具挑戰的地方。若是沒有全局視野,沒有對存儲系統、應用場景、技術細節的深刻理解,是很難作出判斷的。spa
若是具有面向數據可靠性設計的思想,那麼咱們在進行存儲系統軟件棧架構選擇的時候比較容易的進行選擇。存儲軟件是存儲系統的核心,軟件棧架構的優劣決定了這個存儲系統的成敗。一個優秀的存儲軟件架構能夠進行長期持續演進、功能加強,而且保證數據的可靠性,遇到問題能夠快速收斂,爲公司沉澱核心價值;一個拙劣的軟件架構,最終將會綁架整個產品,使得系統不收斂,數據可靠性遇到挑戰,客戶問題的解決要調整架構,公司得不到長期技術沉澱。其實,面向數據可靠性設計思想不只僅在存儲軟件研發方面,而是融入到了存儲產品研製的各個環節,包括軟件架構的選擇、代碼編寫、算法的選擇、功能的定義、測試方法的定義、測試項目的定義、流程的定義、發佈的方式,甚至包括售後處理、技術支持、問題解決方式等等各個方面。若是具有面向數據可靠性設計的思路,在產品研製的各個環節思路將會很是清晰,目標也會很是一致。設計
你們都說系統設計能力在硅谷。要具有這種能力不是簡單的技術突破,不是對產品的瞭解多少,不是功能實現的突破,不是管理流程的掌握,更爲重要的是設計思路的維度與高度。存儲系統最底層的需求是數據可靠性,不具有面向數據可靠性的設計能力的團隊只會讓做戰團隊陷入沼澤。思路決定出路,爲可靠存儲而戰,這纔是存儲之道。blog
(存儲之道)項目管理