分布式存儲系統(tǒng)的最佳實踐:系統(tǒng)發(fā)展路徑
分布式存儲系統(tǒng)從整體架構的角度看大同小異,實現(xiàn)起來卻困難重重。自主研發(fā)的 分布式存儲系統(tǒng)往往需要兩到三年才能逐步成熟起來,其中的難點在于如何把系統(tǒng)做穩(wěn)定。系統(tǒng)開發(fā)過程中涉及架構設計、關鍵算法實現(xiàn)、質(zhì)量控制、團隊成員成長、線上運維、應用合作等,任何一個環(huán)節(jié)出現(xiàn)問題都可能導致整個項目失敗。
本文章介紹通用分布式存儲系統(tǒng)發(fā)展路徑。
通用分布式存儲系統(tǒng)不是設計出來的,而是隨著應用需求不斷發(fā)展起來的。它來源于具體業(yè)務,又具有一定的通用性,能夠解決一大類問題。通用分布式存儲平臺的優(yōu)勢 在于規(guī)模效應,等到平臺的規(guī)模超過某個平衡點時,成本優(yōu)勢將會顯現(xiàn)。
通用分布式存儲平臺主要有兩種成長模式:
- 公司高層制定戰(zhàn)略大力發(fā)展通用平臺。這種模式前期發(fā)展會比較順利,但是往往會因為離業(yè)務太遠而在中期暴露大量平臺本身的問題。
- 來源于具體業(yè)務并將業(yè)務需求通用化。這種模式會面臨更大的技術挑戰(zhàn),但是團隊成員反而能夠在這個過程中得到更多的鍛煉。
第2種發(fā)展模式相對更加曲折,大致需要經(jīng)歷如下幾個階段。
起步:解決特定問題
在起步階段,需要解決業(yè)務提出的特殊需求,這些特殊需求是以前的系統(tǒng)無法解決或者解決得不太好的。例如,OceanBase 系統(tǒng)起步時需要解決淘寶收藏夾業(yè)務提出的兩張大表左連接問題。起步期的挑戰(zhàn)主要在于技術挑戰(zhàn),團隊成員能夠在這個階段獲得較大的技術成長。
求生存:應用為王
為了證明平臺的通用性,需要接入大量的業(yè)務。如果沒有公司戰(zhàn)略支持,這個階段將面臨“雞生蛋還是蛋生雞”的問題,沒有業(yè)務就無法完善平臺,平臺不完善就無法吸引更多業(yè)務接入。在這個階段,優(yōu)先級***的事情是接入合適的應用并把應用服務好,形成良好的口碑。求生存階段還將面臨一個來自團隊內(nèi)部的挑戰(zhàn),團隊成員缺乏起步期的新鮮感,部分成員工作熱情會有所降低。這個階段需要明確團隊的愿景,耐住寂寞,重視每個細節(jié)。
平臺化:提升易用性、可運維性
當應用數(shù)量積累到一定程度后,就需要花大力氣提升易用性和可運維性了。易用性的關鍵在于采用標準的使用接口,兼容應用以前的使用方式,從而降低學習成本和應用改造成本,提升可運維性要求將系統(tǒng)內(nèi)部更多狀態(tài)暴露給運維人員并開發(fā)方便的部署、監(jiān)控、運維工具。
成熟期:持續(xù)不斷地優(yōu)化
分布式存儲系統(tǒng)步入成熟期后,應用推廣將會比較順利。開發(fā)團隊在這個階段做的多情主要是持續(xù)不斷地優(yōu)化系統(tǒng),并根據(jù)應用的需求補充一些功能支持。隨著平合規(guī)模不斷增長以及優(yōu)化工作不斷深入,平臺的規(guī)模效應將顯現(xiàn),平臺取得成功。
通用存儲平臺發(fā)展過程中困難重重,要求團隊成員有強烈的信念和長遠的理想,能夠耐得住寂寞。另外,系統(tǒng)發(fā)展過程中需要保持對技術細節(jié)的關注,每個實現(xiàn)細節(jié)問題都可能導致用戶抱怨,甚至引起線上故障。
從公司的角度看,是否發(fā)展通用分布式存儲平臺取決于公司的規(guī)模。對于小型互聯(lián)網(wǎng)公司(員工數(shù)小于100人),那么,應該更多地選擇廣泛使用的存儲技術,例如MySQL開源關系數(shù)據(jù)庫;對于中型互聯(lián)網(wǎng)公司(員工數(shù)在100到1000人之間)。那么,可以組合使用各種SQL或NoSQL存儲技術,改進開源產(chǎn)品或者基于開源產(chǎn)品做二次開發(fā),例如基于MySQL數(shù)據(jù)庫做二次開發(fā),實現(xiàn)7.1節(jié)中的MySQL Sharding架構;對于大型互聯(lián)網(wǎng)公司(員工數(shù)超過1000人),那么,往往需要自主研發(fā)核心存儲技術,包括分布式架構、存儲引掌等。通用分布式存儲系統(tǒng)研發(fā)周期很長,系統(tǒng)架構需要經(jīng)過多次選代,團隊成員也需要通過研發(fā)過程來獲得成長,因此,這種事情要么不做,要做就務必堅持到底。