閱讀257 返回首頁    go 阿裏雲 go 技術社區[雲棲]


聊聊架構

(最近我會寫一些我對架構的理解和思考,本篇是第一篇,歡迎交流)

什麼是係統架構?

從字麵上理解,係統架構是係統的框架結構,是係統進行抽象之後的一個草圖。它包含了係統中各個抽象組件的協作方式。

為什麼需要架構?

好的架構能夠降低係統的創造和維護成本,特別是維護成本。一個係統的創造成本低,而維護的成本大,特別是互聯網應用,一般情況下把一個係統搞上線隻需要一個月,但是有的係統搞下線缺需要幾個月,而維護則需要數年。好的設計師不會在係統上線後對係統進行大的修改,從而減少係統的維護成本。

如果區分創造和維護兩個階段的話,架構師分為係統架構師和維護架構師,架構新的係統的是係統架構師,而維護老係統的則是維護架構師,程序員大多數願意做新係統不願意維護老係統,因為感覺沒什麼技術含量,但是維護老的係統反而更難,因為老係統的重構和改進更加複雜,維護架構師不僅需要讀懂老係統架構設計,還要在不影響老係統功能的情況下,進行功能新增和重構。我的一位同事在對一個舊的係統進行重構之前,讀了幾個星期的代碼,然後才開始設計改進方案。

架構設計的目標

設計的目標圍繞著降低成本這個需求進行。設計的目標非常多,不同的係統架構目標也不一致,但是我覺得比較重要的架構目標有以下幾個,可擴展性,靈活性和可插入性。

  • 可擴展性,新的功能容易加入到係統裏,降低創造成本。
  • 靈活性,一處修改不會波及其他的地方,降低維護成本。
  • 可插入性,同樣的功能可方便的替換,降低創造和維護成本。

那麼如何實現這三個目標

  • 提高可擴展性:把不易變的抽象出來。抽象層要比實現層要更穩定,抽象層的變化要少。把變化的集中起來,比如把容易變化的功能放在單獨一個係統或者一個模塊裏。
  • 靈活性:模塊化,每個模塊相互獨立,減少模塊之間的藕合度,修改不會互相傳遞。
  • 提高可插入性:模塊化,服務化。

如何開始架構

當一塊新業務放在你麵前時,如何進行係統架構?我覺得需要進行以下幾個步驟的思考:

  • 業務分析:輸出業務架構圖,這個係統裏有多少個業務模塊,從前台用戶到底層一共有多少層。
  • 係統劃分:根據業務架構圖輸出係統架構圖,需要思考的是這塊業務劃分成多少個係統,可能一個係統能支持多個業務。基於什麼原則將一個係統拆分成多個係統?又基於什麼原則將兩個係統合並成一個係統?
  • 係統分層:係統是幾層架構,基於什麼原則將一個係統進行分層,分成多少層?
  • 模塊化:係統裏有多少個模塊,哪些需要模塊化?基於什麼原則將一類代碼變成一個模塊。
  • 轉載自 並發編程網 - ifeve.com

最後更新:2017-05-23 11:31:43

  上一篇:go  JAVA中的備忘錄模式實例教程
  下一篇:go  69道Spring麵試題和答案