系統設計之——架構師職責和設計原則

1.架構師職責

分佈式存儲系統架構師的工作不僅在於整體架構設計,還需要考慮清楚關鍵實現組節,做到即使只有自己一人也可以把系統做出來,只是需要花費更多的時間而已。

架構師的主要工作包括:

1)權衡架構,從多種設計方案中選擇一種與當前團隊能力最爲匹配的方案。架構設計的難點在於權衡,架構師需要能夠在理解業務和業界其他方案的前提下提出通合自已公司的架構。這樣的架構既能很好地滿足業務需求,複雜度也在開發團隊的掌控範圍之內。另外,制定系統技術發展略線圖,提前做好規劃。

2)模塊劃分、接口設計、代碼規範制定。系統如何分層,模塊如何劃分以及每個模塊的職責,模塊的接口、客戶端接口,這些問題都應該在設計階段考慮消楚。而不是遺留到編碼階段。另外,確保整個團隊的編碼風格一致。

3)思考清楚關鍵實現細節並寫入設計文檔。架構師需要在設計階段和團隊成員討論清楚關鍵數據結構、算法,並將這些內容文檔化。如果架構師都不清楚關鍵實現細節,那麼,團隊成員往往更不清楚,最終的結果就是實現的系統帶有不確定性。如果分佈式存儲系統存在多處缺陷,那麼.系統集成測試或者試運行的時候一定會出現進程Core Dump、數據不正確等問題。這些問題在分佈式以及多線程環境下非常難以定位。如果引發這些錯誤的原因比較低級,團隊成員將無法從解決錯誤的過程中收穫成就感,團隊士氣下降,甚至形成惡性循環。

4)提前預知團隊成員的問題並給予指導。劃分模塊以及安排工作時需要考慮團隊成員的能力,給每個成員安排適當超出其當前能力的任務,並給予一的指導,例如,幫助其完善設計方案,建議其參考業界的某個方案等。

總而言之,每個問題總會有多種技術方案,架構師要有能力在整體上從穩定性、性能及工程複雜度明確一種設計方案,面且思考清楚實現細節,切忌模棱兩可。分佈式存儲系統的挑戰不在於存儲理論,而在於如何做出穩定運行且能夠逐步進化的系統。

2.設計原則

大規模分佈式存儲系統有一些可以參考的設計準則:

1)容錯。服務器可能宕機,網絡交換機可能發生故障,服務器時鐘可能出錯,磁位存儲介質可能損壞等。設計分佈式存儲系統需要考慮這些因素,將他們看成系統運行過程中必然發生的“正常情況”。這些錯誤發生時,要求系統能夠自動處理,而不是要求人工干預。

2)自動化。人總是會犯錯的,加上互聯網公司往往要求運維人員在凌晨執行系統升級等操作,因此,運堆人員操作失誤的概率遠遠高於機器故障的概率。很多設計方案是無法做到自動化的,例如MySQL數據庫主備之間異步複製。如果主機出現故障,那麼有兩種選擇:一種選擇是強制切換到備機,可能丟失最後一部分更新事務;另外一種選擇是停寫服務。顯然,這兩種選擇都無法讓人接受,因此,只能在主機出現故障時報警。運維人員介人根據實際情況採取不同的措施。另一方面,如果主備之間實現強同步,那麼,當主機出現故障時,只需要簡單地將服務切換到備機即可,很容易實現自動化。當集羣規模較小時,是否自動化沒有太大的分別;然而,隨着集羣規模越來越大,自動化的優勢也會變得越來越明顯。

3)保持兼容。分佈式存儲面臨的需求比較多樣,系統最初設計,尤其是用戶接口設計時需要考慮到後續升級問題。如果沒有兼容性問題,用戶很樂意升級到最新版本。這樣,團隊可以集中精力開發最新版本,而不是將精力分散到優化老版本性能或者修復老版本的Bug上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章