在開始這個系列之前,讓我們來思考一個問題,什么是架構?當我們在談到架構的時候,我們指的到底是什么?很多人都嘗試給架構下一個定義,但是這些定義本身很難統(tǒng)一,結合我的理解,我認為架構的內(nèi)涵包括以下內(nèi)容:
- 最高層次的系統(tǒng)分解
- 系統(tǒng)中難以改變的東西
- 架構包括組成部分和這些組成之間的交互
架構是分層次的,不同層次的架構關注的內(nèi)容不同,描述方法不同,實現(xiàn)方式也不同。按照TOGAF的定義,架構主要分為幾個層次即業(yè)務架構、應用架構、數(shù)據(jù)架構和技術架構。
- 業(yè)務架構 - 關注組織(類如企業(yè))的業(yè)務流程、業(yè)務域和業(yè)務組件
- 應用架構 - 業(yè)務架構中的流程和組件應該分成多少應用,應用之間如何集成和交互
- 數(shù)據(jù)架構 - 物理和邏輯數(shù)據(jù)的結構
- 技術架構 - 技術架構是應用架構的技術需求,包括如何進行純技術層面的分層,開發(fā)框架選擇,語言選擇,涉及到各自非功能性需求的技術點(安全,性能,日志,異常,緩存,消息,大數(shù)據(jù)量)等需要使用的關鍵技術
關于架構層次的劃分和相互之間的關系,可以參考http://blog.sina.com.cn/s/blog_493a84550101cfen.html。如果沒有特別指明,文章包括后續(xù)的架構都指的是技術架構。
既然有了架構,就應該可以判斷一個架構是好還是壞的,或者說哪方面好、哪方面壞;一個架構的衡量主要通過以下的系統(tǒng)特性來進行:
- 系統(tǒng)高可用性
- 系統(tǒng)性能(包括響應時間、吞吐量等)
- 系統(tǒng)伸縮性
- 系統(tǒng)可擴展性
- 系統(tǒng)安全性
我們要認識到,不同行業(yè)的架構復雜性有很大差別,例如電信行業(yè)的架構可能需要重點關注硬件設備,而企業(yè)應用一般來說業(yè)務邏輯復雜并且數(shù)據(jù)量大。在設計架構時,需要根據(jù)實際情況進行綜合考慮,沒有最好的架構,只有最合適的架構;架構的核心理念就是兩個字“平衡”,根據(jù)業(yè)務需求找到多個系統(tǒng)特性之間的平衡點,它反映了業(yè)務、應用、技術甚至是組織架構間的博弈過程。