天天看點

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

1.架構師職責

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

架構師的主要工作包括:

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

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

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

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

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

2.設計原則

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

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

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

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