架構設計方法初探

貝聊科技發表於2018-06-22
作者:陳彩華,貝聊後端開發工程師
(文章轉載交流請聯絡caison@aliyun.com)
複製程式碼

最近學習了阿里資深技術專家李運華的架構設計教程,頗有收穫,總結一下。

本文主要介紹架構設計的相關概念,系統複雜度的來源,架構設計的基本原則和流程。

1 基本概念和目的

架構設計的基本概念和目的

架構設計的目的是為了解決系統複雜度帶來的問題,並不是要面面俱到,不需要每個架構都具備高效能、高可用、高擴充套件等特點,而是要識別出實際業務實際情況的複雜點,然後有有針對性地解決問題,即:有的放矢,而不是貪大求全。 在實際情況中,不一定每個系統都要做架構設計,需要結合實際情況。有時候最簡單的設計開發效率反而是最高的,架構設計畢竟要投入時間和人力,這部分投入如果用來儘早編碼,專案也許會更快。

2 架構設計複雜度來源

高效能

高效能

高可用

高可用

可擴充套件性

可擴充套件性

低成本、安全、規模

低成本、安全、規模

3 架構設計三原則

架構設計三原則

合適原則

GFS為何在Google誕生,而不是在Microsoft誕生,其中Google有那麼龐大的資料是一個主要因素,而不是因為Google的工程師比Microsoft的工程師更加聰明。

真正優秀的架構都是企業在當前人力、條件、業務等各方面約束條件下設計出來的,能夠合理地將資源整合一起併發揮出最大功效,並且能迅速落地。這也是很多BAT出來的架構師到了小公司或者創業團隊反而做不出成績的原因,因為沒有大公司的平臺、資源、積累,只是生搬硬套大公司的做法,失敗的效率非常高。

簡單原則

軟體領域的複雜性

無論是結構的複雜性還是邏輯的複雜性,都會存在各種問題,所以架構設計時如果簡單方案和複雜的方案都可以滿足需求,最好選擇簡單的方案。《UNIX程式設計藝術》總結的KISS(Keep It Simple,Stupid!)原則一樣適用於架構設計。

演化原則

對於軟體系統來說,變化才是主題。軟體架構需要根據業務的發展而不斷變化。 如果沒有把握“軟體架構需要根據業務發展不斷變化”這個本質,在做架構設計的時候就很容易陷入一個誤區:試圖一步到位設計一個軟體架構,期望不管業務如何變化,架構都穩如磐石。

為了實現這樣的目標,要麼照搬業界大公司公開發表的方案;要麼投入龐大的資源和時間來做各種各樣的預測、分析、設計。無論哪種做法,後果都很明顯:投入巨大,落地遙遙無期。更讓人沮喪的是,就算跌跌撞撞拼死拼活終於落地,卻發現很多預測和分析都是不靠譜的。

實踐中,架構師要提醒自己不要貪大求全,遵循演化優於一步到位的原則,因為業務的發展和變化總是很快的,無論多牛的團隊都不可能完美預測所有的業務發展和變化路徑。實踐中可以參考如下建議:

  • 首先,設計出來的架構要滿足當時的業務需要

  • 其次,架構要不斷地在實際應用過程中迭代,保留優秀的設計,修復有缺陷的設計,改正錯誤的設計,去掉無用的設計,使得架構逐漸完善。

  • 第三,當業務發生變化時,架構要擴充套件、重構,甚至重寫;程式碼也許會重寫,但有價值的經驗、教訓、邏輯、設計等卻可以在新架構中延續。

4 架構設計的流程

架構設計的流程

(本文同時發表於作者個人部落格 www.jianshu.com/u/ced6b70c7…)

參考

從0開始學架構——李運華

架構藍圖--軟體架構 "4+1" 檢視模型

相關文章