什么是系統架構?
從字面上理解,系統架構是系統的框架結構,是系統進行抽象之后的一個草圖。它包含了系統中各個抽象組件的協作方式。
為什么需要架構?
好的架構能夠降低系統的創造和維護成本,特別是維護成本。一個系統的創造成本低,而維護的成本大,特別是互聯網應用,一般情況下把一個系統搞上線只需要一個月,但是有的系統搞下線缺需要幾個月,而維護則需要數年。好的設計師不會在系統上線后對系統進行大的修改,從而減少系統的維護成本。
如果區分創造和維護兩個階段的話,架構師分為系統架構師和維護架構師,架構新的系統的是系統架構師,而維護老系統的則是維護架構師,程序員大多數愿意做新系統不愿意維護老系統,因為感覺沒什么技術含量,但是維護老的系統反而更難,因為老系統的重構和改進更加復雜,維護架構師不僅需要讀懂老系統架構設計,還要在不影響老系統功能的情況下,進行功能新增和重構。我的一位同事在對一個舊的系統進行重構之前,讀了幾個星期的代碼,然后才開始設計改進方案。
架構設計的目標
設計的目標圍繞著降低成本這個需求進行。設計的目標非常多,不同的系統架構目標也不一致,但是我覺得比較重要的架構目標有以下幾個,可擴展性,靈活性和可插入性。
可擴展性,新的功能容易加入到系統里,降低創造成本。
靈活性,一處修改不會波及其他的地方,降低維護成本。
可插入性,同樣的功能可方便的替換,降低創造和維護成本。
那么如何實現這三個目標
提高可擴展性:把不易變的抽象出來。抽象層要比實現層要更穩定,抽象層的變化要少。把變化的集中起來,比如把容易變化的功能放在單獨一個系統或者一個模塊里。
靈活性:模塊化,每個模塊相互獨立,減少模塊之間的藕合度,修改不會互相傳遞。
提高可插入性:模塊化,服務化。
如何開始架構
當一塊新業務放在你面前時,如何進行系統架構?我覺得需要進行以下幾個步驟的思考:
業務分析:輸出業務架構圖,這個系統里有多少個業務模塊,從前臺用戶到底層一共有多少層。
系統劃分:根據業務架構圖輸出系統架構圖,需要思考的是這塊業務劃分成多少個系統,可能一個系統能支持多個業務。基于什么原則將一個系統拆分成多個系統?又基于什么原則將兩個系統合并成一個系統?
系統分層:系統是幾層架構,基于什么原則將一個系統進行分層,分成多少層?
模塊化:系統里有多少個模塊,哪些需要模塊化?基于什么原則將一類代碼變成一個模塊。