作者 陳彩華
文章轉載交流請聯(lián)系 caison@aliyun.com
最近學習了阿里資深技術專家李運華的架構設計教程,頗有收獲题画,總結一下。
本文主要介紹架構設計的相關概念德频,系統(tǒng)復雜度的來源苍息,架構設計的基本原則和流程。
1 基本概念和目的
架構設計的目的
是為了解決系統(tǒng)復雜度帶來的問題壹置,并不是要面面俱到竞思,不需要每個架構都具備高性能、高可用钞护、高擴展等特點盖喷,而是要識別出實際業(yè)務實際情況的復雜點,然后有有針對性地解決問題难咕,即:有的放矢课梳,而不是貪大求全,即:
- 確定系統(tǒng)邊界余佃。確定系統(tǒng)在技術層面上的做與不做暮刃。
- 確定系統(tǒng)內模塊之間的關系。確定模塊之間的依賴關系及模塊的宏觀輸入與輸出爆土。
- 確定指導后續(xù)設計與演化的原則沾歪。使后續(xù)的子系統(tǒng)或模塊設計在一個規(guī)定的框架內繼續(xù)演化。
- 確定非功能性需求雾消。非功能性需求是指安全性灾搏、可用性、可擴展性等立润。
在實際情況中狂窑,不一定每個系統(tǒng)都要做架構設計,需要結合實際情況桑腮。有時候最簡單的設計開發(fā)效率反而是最高的泉哈,架構設計畢竟要投入時間和人力,這部分投入如果用來盡早編碼,項目也許會更快丛晦。
2 架構設計復雜度來源
高性能
高可用
可擴展性
低成本奕纫、安全、規(guī)模
3 架構設計三原則
合適原則
GFS為何在Google誕生,而不是在Microsoft誕生锌蓄,其中Google有那么龐大的數據是一個主要因素升筏,而不是因為Google的工程師比Microsoft的工程師更加聰明。
真正優(yōu)秀的架構都是企業(yè)在當前人力瘸爽、條件您访、業(yè)務等各方面約束條件下設計出來的,能夠合理地將資源整合一起并發(fā)揮出最大功效剪决,并且能迅速落地灵汪。這也是很多BAT出來的架構師到了小公司或者創(chuàng)業(yè)團隊反而做不出成績的原因,因為沒有大公司的平臺柑潦、資源识虚、積累,只是生搬硬套大公司的做法妒茬,失敗的效率非常高。
簡單原則
無論是結構的復雜性還是邏輯的復雜性蔚晨,都會存在各種問題乍钻,所以架構設計時如果簡單方案和復雜的方案都可以滿足需求,最好選擇簡單的方案铭腕∫瘢《UNIX編程藝術》總結的KISS(Keep It Simple,Stupid!)原則一樣適用于架構設計。
演化原則
對于軟件系統(tǒng)來說累舷,變化才是主題浩考。軟件架構需要根據業(yè)務的發(fā)展而不斷變化。
如果沒有把握“軟件架構需要根據業(yè)務發(fā)展不斷變化”這個本質被盈,在做架構設計的時候就很容易陷入一個誤區(qū):試圖一步到位設計一個軟件架構析孽,期望不管業(yè)務如何變化,架構都穩(wěn)如磐石只怎。
為了實現(xiàn)這樣的目標袜瞬,要么照搬業(yè)界大公司公開發(fā)表的方案;要么投入龐大的資源和時間來做各種各樣的預測身堡、分析邓尤、設計。無論哪種做法,后果都很明顯:投入巨大汞扎,落地遙遙無期季稳。更讓人沮喪的是,就算跌跌撞撞拼死拼活終于落地澈魄,卻發(fā)現(xiàn)很多預測和分析都是不靠譜的景鼠。
實踐中,架構師要提醒自己不要貪大求全一忱,遵循演化優(yōu)于一步到位的原則莲蜘,因為業(yè)務的發(fā)展和變化總是很快的,無論多牛的團隊帘营,都不可能完美預測所有的業(yè)務發(fā)展和變化路徑票渠。實踐中可以參考如下建議:
首先,設計出來的架構要滿足當時的業(yè)務需要芬迄。
其次问顷,架構要不斷地在實際應用過程中迭代,保留優(yōu)秀的設計禀梳,修復有缺陷的設計杜窄,改正錯誤的設計,去掉無用的設計算途,使得架構逐漸完善塞耕。
第三,當業(yè)務發(fā)生變化時嘴瓤,架構要擴展扫外、重構,甚至重寫廓脆;代碼也許會重寫筛谚,但有價值的經驗、教訓停忿、邏輯驾讲、設計等卻可以在新架構中延續(xù)。
4 架構設計的流程
參考資料: