2016,我們一起追過的架構(gòu)
年終復(fù)盤,總結(jié)那些滋養(yǎng)我成長的架構(gòu)思想。謂之曰:transformation!
1 屬性派
任何系統(tǒng)必有其自身的架構(gòu)屬性。
An architecture—a system’s attributes—and what an architect produces—a set of documents—definitely are not the same thing.
An architectural description (AD) is a set of artifacts that documents an architecture in a way its stakeholders can understand and demonstrates that the architecture has met their concerns.
石頭記:選錄這個觀點(diǎn)并把它放在本文第一個,是想摧毀架構(gòu)師的個人主義和英雄主義,以及提醒架構(gòu)的ownership在團(tuán)隊(duì)。特別是在大型組織中,軟件架構(gòu)有時是不受控制的。
2 組成派
軟件架構(gòu)是軟件組件及其屬性,組件之間關(guān)系組成的系統(tǒng)結(jié)構(gòu)。
The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.
An architectural element (or just element) is a fundamental piece from which a system can be considered to be constructed.
石頭記:這是教科書,也是最基礎(chǔ)的思維方式。個人認(rèn)為組成派更多是從空間維度考慮架構(gòu)。
3 決策派
軟件架構(gòu)是軟件一些重要方面決策的集合。這種說法的典型代表是RUP中對于軟件架構(gòu)的定義。
軟件架構(gòu)包含了關(guān)于以下問題的重要決策:
1.軟件系統(tǒng)的組織;
2.選擇組成系統(tǒng)的結(jié)構(gòu)元素和它們之間的接口,以及當(dāng)這些元素相互協(xié)作時所體現(xiàn)的行為;
3.如何組合這些元素,使它們逐漸組成更大的子系統(tǒng);
4.用于指導(dǎo)這個系統(tǒng)組織的架構(gòu)風(fēng)格:這些元素以及他們的接口、協(xié)作和組合。
5.軟件架構(gòu)并不僅僅注重軟件本身的結(jié)構(gòu)和行為,還注重其它特性:功能性、性能、可擴(kuò)展性、可重用性、可理解性以及美學(xué)等等。
石頭記:依然是教課書般定義,更有設(shè)計的感覺。
4 橋梁派
Software Architecture in Context is the crucial bridge between requirements and design.
This interplay is core to the architectural process
石頭記:架構(gòu)是需求和設(shè)計之間的橋梁,并且特別強(qiáng)調(diào)和需求方,設(shè)計方的互動。這是瀑布研發(fā)的思維。
5 平衡派
架構(gòu)是各個方面因素平衡的結(jié)果。
石頭記:特別務(wù)實(shí)的定義方式?;凶觯?quot;tradeoff"。
6 康威定律:組織結(jié)構(gòu)決定軟件架構(gòu)
Conway’s law: Organizations which design systems[...] are constrained to produce designs which are copies of the communication structures of these organizations.
設(shè)計系統(tǒng)的組織,最終產(chǎn)生的設(shè)計等同于組織之內(nèi)、之間的溝通結(jié)構(gòu)。
石頭記:意識到康威定律,是架構(gòu)師成熟的標(biāo)志。在微服務(wù)架構(gòu)流行的今天,康威定律被一再的提及。微服務(wù)的本質(zhì)是技術(shù)倒逼組織結(jié)構(gòu)變革。“你建構(gòu)了你所知,你所知又影響了建構(gòu)的方式。”——這或許就是架構(gòu)和架構(gòu)師的關(guān)系吧。
7 建筑派:堅固,實(shí)用,美觀
公元前1世紀(jì),古羅馬御用工程師、建筑師Marcus Vitruvius Pollio在其《建筑十書》中最早提出了建筑的三要素“堅固、實(shí)用、美觀”。英文的表述為Firmitas, Utilitas, Venustas,通俗的說也就是Solid, Useful, Beautiful,用計算機(jī)的術(shù)語表述就是:
Firmness: Achieve a satisfactory level of freedom from damaging failure.
Commodity: Utility to accomplish the tasks it is purported to be for.
Delight: Pleasure in use.
石頭記:時至今日,這三個要素仍然是優(yōu)秀軟件架構(gòu)的重要組成部分。
8 The “4+1” View Model
邏輯視圖主要強(qiáng)調(diào)面向?qū)ο笤O(shè)計;進(jìn)程視圖主要強(qiáng)調(diào)并發(fā)和同步;物理視圖主要強(qiáng)調(diào)軟件和硬件的映射;部署視圖則強(qiáng)調(diào)軟件在部署環(huán)境中的靜態(tài)組織。場景則強(qiáng)調(diào)主需求或者用例。
石頭記:經(jīng)典的“4+1”架構(gòu)視圖,有很多衍生版本。架構(gòu)師入門必備,是指導(dǎo)軟件架構(gòu)設(shè)計,開發(fā)實(shí)現(xiàn)的重要思想。
9 使用視圖與視角與利益相關(guān)者合作
利益相關(guān)者是對架構(gòu)感興趣的任何人和組織。關(guān)切是利益相關(guān)者對架構(gòu)的任何期許,需求,或目標(biāo)。
視圖是架構(gòu)對利益相關(guān)者關(guān)切的結(jié)構(gòu)化呈現(xiàn)。視角是構(gòu)建視角的模式,模板。
使用視圖和視角的第一個好處是關(guān)注點(diǎn)分離。單一視角和很難描述一個復(fù)雜系統(tǒng)的架構(gòu)的。其次是便于和利益相關(guān)者溝通。同時便于對系統(tǒng)復(fù)雜性進(jìn)行管理和增加開發(fā)者的關(guān)注度。其缺點(diǎn)是分片視圖,錯誤視角的選擇和視角之間的不一致性。
架構(gòu)透視是保證系統(tǒng)屬性的一系列活動,策略,指導(dǎo)。
石頭記:基礎(chǔ)且經(jīng)典的架構(gòu)方法。合格架構(gòu)師拿證的license。掌握此法,可以闖蕩架構(gòu)江湖,還特別適合在大型組織混跡,玩技術(shù)。推薦經(jīng)典書籍:《軟件架構(gòu)設(shè)計》,《軟件架構(gòu)師12項(xiàng)修煉》,《軟件系統(tǒng)架構(gòu):使用視點(diǎn)和視角與利益相關(guān)者合作》。
10 以終為始
石頭記:
作者右軍是從架構(gòu)到團(tuán)隊(duì)管理,回頭再看架構(gòu)。初級的架構(gòu)師往往關(guān)注在邊界和職責(zé),只掃自家門前雪,避免背鍋,并以此為榮。作者一針見血,站在用戶需求角度考慮架構(gòu)——以終為始的架構(gòu)觀——闡述了一個良心架構(gòu)的思考和擔(dān)當(dāng):不為未來挖坑。
作者首創(chuàng)的PMC框架(P>platform\M>merchant\C>customer)值得所有互聯(lián)網(wǎng)行業(yè)的專家借鑒。
從作者的行文中,我對架構(gòu)的體察總結(jié)是:
1.架構(gòu)的空間屬性:視圖,視角,層次
2.架構(gòu)的時間屬性:動態(tài),演進(jìn)
3.架構(gòu)的組成屬性:功能,質(zhì)量(非功能)
全文以黃金圈理論組織結(jié)構(gòu),是謂本章架構(gòu)。
本文有真意,欲辨已忘言。請閱讀原文體會妙處。
11 閉環(huán)架構(gòu)
系統(tǒng)架構(gòu)層面的閉環(huán)主要體現(xiàn)在系統(tǒng)監(jiān)控方面,系統(tǒng)監(jiān)控主要分為三個層次:
1.系統(tǒng)層監(jiān)控,監(jiān)控底層硬件如CPU、網(wǎng)絡(luò)和存儲等的性能狀況;
2.應(yīng)用層監(jiān)控,監(jiān)控應(yīng)用性能如頁面/服務(wù)調(diào)用計數(shù),調(diào)用延遲,錯誤計數(shù)等;
3.業(yè)務(wù)層監(jiān)控,監(jiān)控重要的業(yè)務(wù)指標(biāo)如PV/UV,用戶登錄數(shù)和訂單量等。
上圖是一個假想的電商網(wǎng)站的分層架構(gòu)圖,
1.系統(tǒng)層監(jiān)控,監(jiān)控底層硬件如CPU、網(wǎng)絡(luò)和存儲等的性能狀況;
2.應(yīng)用層監(jiān)控,監(jiān)控應(yīng)用性能如頁面/服務(wù)調(diào)用計數(shù),調(diào)用延遲,錯誤計數(shù)等
3.業(yè)務(wù)層監(jiān)控,監(jiān)控重要的業(yè)務(wù)指標(biāo)如PV/UV,用戶登錄數(shù)和訂單量等。
石頭記:作者楊波的文章是我今年認(rèn)知升級最大信息來源。閉環(huán)思維也適用于人,組織,流程。
12 演進(jìn)架構(gòu)
網(wǎng)站在不同的階段遇到的問題不一樣,而解決這些問題使用的技術(shù)也不一樣,流量小的時候,主要目的是提高開發(fā)效率,在早期要引入ORM,DAO這些技術(shù)。隨著流量變大,使用動靜分離、讀寫分離、主從同步、垂直拆分、CDN、MVC等方式不斷地提升網(wǎng)站穩(wěn)定性。面對更大的流量時,通過垂直拆分、服務(wù)化、反向代理、開發(fā)框架(站點(diǎn)/服務(wù))等等,不斷提升高可用。在面對上億級的更大流量時,通過中心化、柔性服務(wù)、消息總線、自動化(回歸,測試,運(yùn)維,監(jiān)控)來迎接新的挑戰(zhàn)。未來的就是繼續(xù)實(shí)現(xiàn)移動化,大數(shù)據(jù)實(shí)時計算,平臺化……系統(tǒng)架構(gòu)會一直迭代衍變,就像最初的從零到現(xiàn)在。
石頭記:演化思想是敏捷架構(gòu)的核心。對很多創(chuàng)業(yè)公司,需要仔細(xì)讀讀58同城的技術(shù)委員會執(zhí)行主席沈劍的這邊文章。
13 全棧架構(gòu)
“全棧,不是全能,和所選擇的技術(shù)棧甚至業(yè)務(wù)棧相關(guān)。”,老曹這么描述全棧的定義。“我說過全棧架構(gòu)師可能是自己的杜撰, 但是,全棧思維優(yōu)先還是被大多數(shù)朋友認(rèn)可的,實(shí)際上是一種大局觀,一個功能既可以前端又可以后端實(shí)現(xiàn),利弊和方案的選擇是需要有全棧架構(gòu)師的,至少要有全棧的思維。全棧的思維,簡單地可以理解成系統(tǒng)的思維方式。”
如果問題分為:已知的已知,已知的未知,未知的未知 的話,全棧架構(gòu)師這一角色,就是從未知的未知變成已知的未知。
石頭記:全棧思維和全棧能力,架構(gòu)師的硬技能。
14 軟件是用戶參與的協(xié)同創(chuàng)造
張林老師從一個問題出發(fā):你重新開發(fā)一個微信,和微信的功能一模一樣,還是微信嗎?沒有用戶的微信它還是微信嗎?由此推導(dǎo)出軟件是代碼+算法+數(shù)據(jù)結(jié)構(gòu)+用戶。
由此,軟件開發(fā)就是開發(fā)者和用戶群體創(chuàng)造的信息再造過程。而架構(gòu)是對大量無結(jié)構(gòu)的信息進(jìn)行重構(gòu)整合梳理,得到有結(jié)構(gòu)的信息的過程。
石頭記:是技術(shù)承載雙11的狂歡?還是雙11的狂歡塑造了技術(shù)架構(gòu)?
15 架構(gòu)擴(kuò)展立方體
石頭記:推薦經(jīng)典書籍《架構(gòu)即未來》。
16 架構(gòu)擴(kuò)展原則
AKF采用的最普遍的架構(gòu)原則
1、N+1設(shè)計
2、回滾設(shè)計
3、禁用設(shè)計
4、監(jiān)控設(shè)計
5、設(shè)計多活數(shù)據(jù)中心
6、使用成熟的技術(shù)
7、異步設(shè)計
8、無狀態(tài)系統(tǒng)
9、水平擴(kuò)展非垂直升級
10、設(shè)計至少要有兩個步驟的前瞻性
11、非核心則購買
12、使用商品化硬件
13、小構(gòu)建、小發(fā)布、快試錯
14、隔離故障
15、自動化
石頭記:推薦經(jīng)典書籍《架構(gòu)即未來》。
17 OKR架構(gòu)觀
石頭記:這個是石頭的杜撰。石頭一直認(rèn)為,優(yōu)秀的架構(gòu)師應(yīng)該首先負(fù)責(zé)關(guān)鍵技術(shù)的突破,解決技術(shù)可行性問題,拿出從0到1的那些關(guān)鍵結(jié)果。
18 架構(gòu)六步思考法
美團(tuán)點(diǎn)評外賣配送和到店餐飲總架構(gòu)師夏華夏總結(jié)架構(gòu)師三大能力和六步思考法。
架構(gòu)師三大能力:
1.站的高——考慮“整體”:站在更高的層次綜合看問題
2.望的遠(yuǎn)——考慮“未來”:良好的前瞻和規(guī)劃
3.扎的深——考慮“細(xì)節(jié)”:洞察底層落地的細(xì)節(jié)
架構(gòu)六步思考法:
石頭記:架構(gòu)過程的閉環(huán),很多團(tuán)隊(duì)都沒有完成這個閉環(huán)吧?
19 開發(fā)運(yùn)維三板斧
The Three Ways: The Principles Underpinning DevOps.
石頭記:強(qiáng)調(diào)從開發(fā)到運(yùn)維的價值流,打破組織壁壘。并在這個價值流上增強(qiáng)反饋閉環(huán),提高交付效率。團(tuán)隊(duì)文化上支持不斷試錯。思考一下三板斧是否反映出你的組織存在的問題?
20 領(lǐng)域驅(qū)動架構(gòu)設(shè)計

【本文是51CTO專欄作者石頭的原創(chuàng)文章,轉(zhuǎn)載請通過作者微信公眾號補(bǔ)天遺石(butianys)獲取授權(quán)】