幾條原則談談存儲系統開發
國內存儲界現在是百花齊放,非常熱鬧。軟件定義存儲,云存儲,超融合等各種創新企業也在各自領域快速的發展。關于各方面的概念解釋和技術分析很多,但是我感覺關于存儲系統的開發方面,實踐性的文章非常少。我就據自己多年的存儲開發經驗,寫幾條原則,希望能拋磚引玉,讓各位開發人員和架構師能進行更廣泛的討論。
1. 重視元數據的冗余安全。很多人說存儲的穩定性是***位的,其實任何人為的系統都是有可能出錯的,存儲的數據安全性才是***位的。出錯不可避免,宕機不可避免,任何軟件都是有bug的,但是一定要避免出錯后數據丟失,特別是元數據丟失,要把這個概率降到******。所以,設計元數據方案就像造飛機一樣,要有2套以上的獨立冗余方案。這個是架構師***個要考慮的問題。
2. 產品有定位,功能有取舍,要簡單突出。存儲的穩定性非常關鍵,復雜的東西很難穩定,除非不計成本。所以,我們首先要清楚產品的定位和市場應用,針對這個定位和市場應用來設計開發,其他的輔助功能一定建立在這個基礎之上。如果一個產品開始設計的時候就考慮到了很多功能都要做到***,那么很有可能主要的架構設計復雜,影響穩定性,***影響最主要的功能點。所以,研發要對產品部門和銷售部門的要求有取舍,并且一定要堅持,這個在設計中非常關鍵。
3. 抽象,抽象,再抽象。其實這個和上一條的簡單原則有關系,抽象了,那么架構就會非常簡單。模塊之間的耦合度就低,這個其實是軟件開發的共性。存儲軟件的基礎架構其實是和協議,和OS,和硬件驅動都是無關的。如果相關了,那么這個架構一定出了問題。
4. 數據驅動,不是功能驅動。這個可以參考linux內核設計,內核負責功能機制,但是用戶態負責數據驅動來做出各種應用。應用一定是和數據相關而不是和功能相關的,功能是非常共性的東西,由上層的數據來決定了具體的應用。
5. 我們能碰到的所有的問題都是別人解決過的問題,碰到架構或者其他方面的問題參考現有的linux內核架構,block/scsi中間層,各種協議,看看他們是如何解決的,參考這些業界標準基本不會出錯。發明創造是科學家的工作,不是工程師的工作。
6. Debug系統做好了,產品就不會做不好。這個是軟件開發的共性,不用多費筆墨。只是存儲開發有兩個問題debug起來非常難,一個是一致性問題,一個是性能問題。由于它的難度和全局影響性,這兩個debug系統***要由系統架構師親自設計甚至編寫。
7. 適當打補丁,但是***要勇于承認架構有問題,要勇于重新來過,長痛不如短痛。真正穩定的軟件是不會一版成功的。
【編者按】
向程序員致敬!
作者介紹:江松,Storwind創始人,具有超過16年的國內外企業級存儲系統研發經驗。Storwind專注于軟件定義存儲,相繼研發和發布了LeadIO SSD緩存加速軟件,IPSAN/NAS軟件,商業級軟RAID, 對象存儲和云存儲網關Cloudstation,獲得了眾多合作伙伴和客戶的高度認可。
本文來源:微信公眾號“樂生活與愛IT”