沒有(物理或者邏輯的)分層,就沒有架構。緩存
架構師並非魔術師,不是從帽子裏變出兔子的人,因此架構師不是無中生有;他(她)是針對多層次、複雜的系統間依賴進行設計。單一應用是軟件系統中的最簡單的方式;通過設計的單一應用和未經設計的單一應用從開發、部署的結果上看是同樣的,所不一樣的是對於整個系統的評估和認識。架構
架構師須要考慮如下影響架構設計的因素:負載均衡
異構系統:"天者,清清者上浮而爲天;,地者,重濁者下凝而爲地。"可見,異構系統會天然的分離爲不一樣的子系統。這裏所謂的異構包含:地理位置、主機、操做系統、實現語言等。異構子系統之間必須經過某種第三方做爲橋樑才能完成數據交換。運維
靜態資源:針對內部系統的靜態資源,集中管理在開發階段能夠實現功能代碼的重用,在系統的運維階段帶來成本的節省;須要權衡集中管理資源帶來的開發和使用成本與收益。分佈式
計算能力:一種動態資源,直接影響系統的響應、容量等性能指標;是分佈式系統指標性的參數;從轉接分發、負載均衡、散列存儲、散列緩存等等技術。性能
可靠性:性能需求中最難評估的指標;爲可靠性進行的架構設計,其重要性是顯然的,可是其中的浪費也是不容忽視的。spa
業務:這個看似最重要的因素,不少時候最不重要,由於它依附的系統在前面進行了分解;它的性能指標在前面已經考慮;那業務還會如何影響架構設計?歸根結底仍是封裝--暴露僅可能少的知識。由於這個設計、開發投資在從此纔會看到收益,所以須要權衡。操作系統
架構師完成架構設計的成果應該包含且不限於如下內容:
架構設計
系統業務組件/層次架構設計,含系統間接口設計設計
數據模型及狀態機,含數據散列存儲設計
部署架構設計,含可靠性實施方案
架構師思考問題的角度並不是只有技術,對此推薦讀物《軟件架構師的12項修煉》