2020-09-17架構(gòu)的本質(zhì)

 目前討論架構(gòu)實(shí)操(術(shù))的文章較多,討論架構(gòu)理念(道)的較少碑宴,本文基于作者在大型電商系統(tǒng)架構(gòu)方面的一些實(shí)踐和思考延柠,和大家聊聊架構(gòu)理念性的東西,希望能夠拋磚引玉贿条,推進(jìn)大家對(duì)架構(gòu)的認(rèn)識(shí)增热。

  什么是道峻仇,什么是術(shù)?道是事物發(fā)展的本質(zhì)規(guī)律凡蚜,術(shù)是事物發(fā)展的具體途徑豆同。規(guī)律只有一個(gè)影锈,途徑很多,條條大路通羅馬枣抱,羅馬是道辆床,大路是術(shù)讼载。道為本,術(shù)為途菇篡,如果事先知道羅馬在哪里一喘,那么遍地是路,路路相通议蟆。架構(gòu)也是如此咐容,如果能領(lǐng)悟架構(gòu)的本質(zhì),就不會(huì)拘泥于現(xiàn)有的實(shí)踐和理論框框颖侄,而以最直接的方式解決問(wèn)題享郊,無(wú)招勝有招炊琉。本文的內(nèi)容包括架構(gòu)的本質(zhì)又活、架構(gòu)的服務(wù)對(duì)象柳骄、架構(gòu)師能力模型 、架構(gòu)境界等舔清。

架構(gòu)的本質(zhì)

  任何系統(tǒng)曲初,自然情況下臼婆,都是從有序到無(wú)序,這是有科學(xué)依據(jù)的故响, 按照熱力學(xué)第二定律彩届,自然界的一切自發(fā)過(guò)程都有方向性奖唯,一個(gè)孤立系統(tǒng)會(huì)由有序變?yōu)闊o(wú)序,即它的熵會(huì)不斷增加坯墨,最終寂滅捣染。但生物可以通過(guò)和外界交互,主動(dòng)進(jìn)行新陳代謝榕栏,制造 “負(fù)熵” 來(lái)保證自身有序蕾各,繼續(xù)生存式曲。

  同樣,一個(gè)軟件系統(tǒng)隨著功能越來(lái)越多兰伤,調(diào)用量急劇增長(zhǎng)敦腔,整個(gè)系統(tǒng)逐漸碎片化恨溜,越來(lái)越無(wú)序筒捺,最終無(wú)法維護(hù)和擴(kuò)展,所以系統(tǒng)在一段時(shí)間的野蠻生長(zhǎng)后五嫂,也需要及時(shí)干預(yù)肯尺,避免越來(lái)越無(wú)序则吟。

  架構(gòu)的本質(zhì)就是對(duì)系統(tǒng)進(jìn)行有序化重構(gòu),不斷減少系統(tǒng)的 “熵”水慨,使系統(tǒng)不斷進(jìn)化晰洒。

  那架構(gòu)是如何實(shí)現(xiàn)無(wú)序到有序的呢? 基本的手段就是分和合治宣,先把系統(tǒng)打散侮邀,然后重新組合贝润。

  分的過(guò)程是把系統(tǒng)拆分為各個(gè)子系統(tǒng) / 模塊 / 組件打掘,拆的時(shí)候按傅,首先要解決每個(gè)組件的定位問(wèn)題,然后才能劃分彼此的邊界胧卤,實(shí)現(xiàn)合理的拆分。合就是根據(jù)最終要求拼岳,把各個(gè)分離的組件有機(jī)整合在一起枝誊,相對(duì)來(lái)說(shuō),第一步的拆分更難惜纸。

  拆分的結(jié)果使開(kāi)發(fā)人員能夠做到業(yè)務(wù)聚焦叶撒、技能聚焦,實(shí)現(xiàn)開(kāi)發(fā)敏捷耐版,合的結(jié)果是系統(tǒng)變得柔性,可以因需而變粪牲,實(shí)現(xiàn)業(yè)務(wù)敏捷古瓤。

  舉個(gè)例子,在 Web 1.0 時(shí)代腺阳,一個(gè) ASP 或 JSP 頁(yè)面里落君,HTML 和腳本代碼混在一起,此時(shí)腳本代碼越多亭引,系統(tǒng)越混亂(即熵增加)绎速,最終連開(kāi)發(fā)者自己都無(wú)法理解。此時(shí)就需要對(duì)系統(tǒng)重新架構(gòu)焙蚓,辦法是引入 view helper 模式纹冤,分離 HTML 和腳本洒宝,HTML 成為 view,腳本成為幫助類(lèi)萌京。然后再簡(jiǎn)單整合在一起雁歌。通過(guò)重新分和合,整個(gè)系統(tǒng)層次清晰枫夺,職責(zé)明確将宪,系統(tǒng)的無(wú)序度降低,容易擴(kuò)展橡庞。同時(shí)不同技能的開(kāi)發(fā)人員较坛,如 UED 和程序員,可以負(fù)責(zé)不同部分扒最,有效提高開(kāi)發(fā)效率丑勤。

  好的架構(gòu)就像一篇優(yōu)美的散文,形散神不散吧趣,表面看無(wú)序法竞,實(shí)則高度有序。

架構(gòu)分類(lèi)和服務(wù)對(duì)象

  架構(gòu)一般可分業(yè)務(wù)架構(gòu)强挫、應(yīng)用架構(gòu)岔霸、技術(shù)架構(gòu),那么它們分別解決什么問(wèn)題俯渤,服務(wù)于誰(shuí)呢呆细? 我們首先看一個(gè)系統(tǒng)落地過(guò)程:

  對(duì)于負(fù)責(zé)開(kāi)發(fā)的人來(lái)說(shuō),怕的是業(yè)務(wù)太復(fù)雜八匠,代碼邏輯太亂絮爷,超出他能理解的范疇,系統(tǒng)無(wú)法維護(hù)梨树。因此開(kāi)發(fā)的需求是系統(tǒng)整體概念清晰坑夯,容易理解,方便擴(kuò)展抡四。

  對(duì)于負(fù)責(zé)運(yùn)行的機(jī)器來(lái)說(shuō)柜蜈,怕的是業(yè)務(wù)并發(fā)量太大,系統(tǒng)核心資源不夠用(如數(shù)據(jù)庫(kù)連接)床嫌。它希望在業(yè)務(wù)量增加時(shí)跨释,系統(tǒng)能夠支持水平擴(kuò)展,支持硬件容錯(cuò)(如避免單點(diǎn)故障)厌处。

  開(kāi)發(fā)的痛點(diǎn)主要由業(yè)務(wù)架構(gòu)和應(yīng)用架構(gòu)解決鳖谈,業(yè)務(wù)架構(gòu)從概念層面幫助開(kāi)發(fā)理解系統(tǒng)(動(dòng)態(tài)的包括業(yè)務(wù)流程 / 節(jié)點(diǎn) / 輸入輸出,靜態(tài)的包括業(yè)務(wù)域 / 業(yè)務(wù)模塊 / 單據(jù)模型)阔涉。

  應(yīng)用架構(gòu)從邏輯層面幫助開(kāi)發(fā)落地系統(tǒng)(應(yīng)用種類(lèi) / 應(yīng)用形式 / 數(shù)據(jù)交互關(guān)系 / 交互方式等)缆娃,整個(gè)系統(tǒng)邏輯上容易理解捷绒,最近大家談的比較多的 SOA 即屬于應(yīng)用架構(gòu)的范疇。

  機(jī)器的痛點(diǎn)主要由技術(shù)架構(gòu)解決贯要,如技術(shù)平臺(tái)選型(操作系統(tǒng) / 中間件 / 設(shè)備等)暖侨,部署上希望支持多機(jī)房,水平擴(kuò)展崇渗,無(wú)單點(diǎn)等字逗。

  強(qiáng)調(diào)一下,系統(tǒng)是人的系統(tǒng)宅广,架構(gòu)首先是為人服務(wù)的葫掉,業(yè)務(wù)概念清晰、應(yīng)用邏輯合理跟狱、人好理解是第一位的(即系統(tǒng)有序度高)〖蠛瘢現(xiàn)在大家討論更多的是技術(shù)架構(gòu),如高并發(fā)設(shè)計(jì)驶臊,分布式事務(wù)處理等挪挤,只是因?yàn)檫@個(gè)不需要業(yè)務(wù)上下文背景,比較好相互溝通关翎。具體架構(gòu)設(shè)計(jì)時(shí)扛门,首先要關(guān)注業(yè)務(wù)架構(gòu)和應(yīng)用架構(gòu),這個(gè)架構(gòu)新手要特別注意纵寝。

架構(gòu)師能力模型

  架構(gòu)師只做分和合的事情尖飞,但綜合能力要求很高,要求內(nèi)外兼修店雅,下得廚房,上得廳堂贞铣,下圖通過(guò)典型的架構(gòu)方式介紹一個(gè)架構(gòu)師的能力要求:

  在此基礎(chǔ)上闹啦,架構(gòu)師要有技術(shù)的廣度(多領(lǐng)域知識(shí)),又有深度(技術(shù)前瞻)辕坝,對(duì)主流公司的系統(tǒng)設(shè)計(jì)非常了解窍奋,知道優(yōu)劣長(zhǎng)短,碰到實(shí)際問(wèn)題酱畅,很快有多種方案可供評(píng)估琳袄。

  抽象思維是架構(gòu)師最重要的能力,架構(gòu)師要善于把實(shí)物概念化并歸類(lèi)纺酸。比如面對(duì)一個(gè)大型的 B2C 網(wǎng)站窖逗,能夠迅速抽象為采購(gòu)->運(yùn)營(yíng)->前臺(tái)搜索->下單->履單這幾大塊,對(duì)系統(tǒng)分而治之餐蔬,庖丁解牛碎紊,早已目無(wú)全牛佑附。

  抽象思維是往高層次的總結(jié)升華,由實(shí)到虛仗考;而透過(guò)問(wèn)題看本質(zhì)則是由虛到實(shí)音同,往深層次地挖掘。比如看到一段 Java 代碼秃嗜,知道它在 JVM 如何執(zhí)行权均;一個(gè)跨網(wǎng)絡(luò)調(diào)用,知道數(shù)據(jù)是如何通過(guò)各種介質(zhì)到達(dá)目標(biāo) (操作系統(tǒng)內(nèi)核 / 網(wǎng)卡端口 / 電磁介質(zhì)等)锅锨。透過(guò)問(wèn)題看本質(zhì)使架構(gòu)師能夠敏銳地發(fā)現(xiàn)底層之真實(shí)叽赊,系統(tǒng)性端到端地思考問(wèn)題,識(shí)別木桶的短板并解決之橡类。

  能落地的架構(gòu)才是好架構(gòu)蛇尚,良好的溝通能力確保各方對(duì)架構(gòu)達(dá)成共識(shí),愿意采取行動(dòng)顾画;良好的平衡取舍能力確保架構(gòu)在現(xiàn)有資源約束下是最合理的取劫,理想最終照進(jìn)現(xiàn)實(shí)。

  總結(jié)下研侣,架構(gòu)師的能力要求包括:

兼具技術(shù)的廣度(多領(lǐng)域知識(shí))和深度(技術(shù)前瞻)

兼具思維的高度(抽象思維)和深度(問(wèn)題到本質(zhì))

兼具感性(溝通)和理性(平衡)

架構(gòu)境界

  架構(gòu)師從境界上由淺到深可以分為四層:第一看山不是山谱邪,第二看山是山,第三看山不是山庶诡,第四看山是山惦银。

  剛接手項(xiàng)目時(shí),對(duì)業(yè)務(wù)不了解末誓,時(shí)時(shí)被業(yè)務(wù)方冒出的術(shù)語(yǔ)弄得一愣一愣的扯俱,如果把現(xiàn)有問(wèn)題比作山,則是橫看成嶺側(cè)成峰喇澡,根本摸不透迅栅,此時(shí)看山不是山。

  經(jīng)過(guò)業(yè)務(wù)梳理和對(duì)系統(tǒng)深入了解晴玖,可以設(shè)計(jì)出一個(gè)屌絲的方案读存,把各個(gè)系統(tǒng)串起來(lái),解決當(dāng)前的問(wèn)題呕屎,對(duì)當(dāng)前這個(gè)山能夠看清楚全貌让簿,此時(shí)能夠做到看山是山。

  通過(guò)進(jìn)一步抽象秀睛,發(fā)現(xiàn)問(wèn)題的本質(zhì)尔当,原來(lái)這個(gè)問(wèn)題是共性的,后續(xù)還會(huì)有很多類(lèi)似問(wèn)題蹂安。設(shè)計(jì)上進(jìn)行總結(jié)和升華居凶,得出一個(gè)通用的方案虫给,不光能解決當(dāng)前的問(wèn)題,還可以解決潛在的問(wèn)題侠碧。此時(shí)看到的已經(jīng)是問(wèn)題本質(zhì)抹估,看山不是山。

  最后回到問(wèn)題本身弄兜,去除過(guò)度的抽象药蜻,給出的設(shè)計(jì)簡(jiǎn)潔明了,增之一分嫌肥替饿,減之一分嫌瘦语泽,既解決當(dāng)前問(wèn)題,又保留最基本的擴(kuò)展视卢,此時(shí)問(wèn)題還是那個(gè)問(wèn)題踱卵,山還是那個(gè)山。

  第一境界給不出合適方案据过,不表惋砂。

  第二境界的方案只解決表面問(wèn)題,往往設(shè)計(jì)不夠绳锅,碰到其它類(lèi)似問(wèn)題或者問(wèn)題稍微變形西饵,系統(tǒng)需要重新做。

  第三境界的方案往往過(guò)度設(shè)計(jì)鳞芙,太追求通用化會(huì)創(chuàng)造出過(guò)多抽象眷柔,生造概念,理解和實(shí)現(xiàn)均困難原朝,此時(shí)系統(tǒng)的無(wú)序度反而增加驯嘱,過(guò)猶不及。

  第四境界的方案喳坠,在了解問(wèn)題本質(zhì)的基礎(chǔ)上宙拉,同時(shí)考慮現(xiàn)狀,評(píng)估未來(lái)丙笋,不多做,不少做煌贴。

  佛教講空和色御板,色即事物現(xiàn)象,空即事物本質(zhì)牛郑,從這個(gè)意義上說(shuō)怠肋,第一重境界無(wú)色無(wú)空,第二重境界過(guò)色淹朋,第三重境界過(guò)空笙各,第四重境界站在色和空之間钉答,既色又空,不執(zhí)著于當(dāng)前杈抢,不虛無(wú)于未來(lái)数尿。

  不空不色,既空既色惶楼,道法自然右蹦,本性如來(lái),架構(gòu)之髓也歼捐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末何陆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子豹储,更是在濱河造成了極大的恐慌贷盲,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剥扣,死亡現(xiàn)場(chǎng)離奇詭異巩剖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)朦乏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)球及,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呻疹,你說(shuō)我怎么就攤上這事吃引。” “怎么了刽锤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵镊尺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我并思,道長(zhǎng)庐氮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任宋彼,我火速辦了婚禮弄砍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘输涕。我一直安慰自己音婶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布莱坎。 她就那樣靜靜地躺著衣式,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碴卧,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天弱卡,我揣著相機(jī)與錄音,去河邊找鬼住册。 笑死婶博,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的界弧。 我是一名探鬼主播凡蜻,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垢箕!你這毒婦竟也來(lái)了划栓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤条获,失蹤者是張志新(化名)和其女友劉穎忠荞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體帅掘,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡委煤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了修档。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碧绞。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吱窝,靈堂內(nèi)的尸體忽然破棺而出讥邻,到底是詐尸還是另有隱情,我是刑警寧澤院峡,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布兴使,位于F島的核電站,受9級(jí)特大地震影響照激,放射性物質(zhì)發(fā)生泄漏发魄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一俩垃、第九天 我趴在偏房一處隱蔽的房頂上張望励幼。 院中可真熱鬧,春花似錦口柳、人聲如沸苹粟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春辣卒,著一層夾襖步出監(jiān)牢的瞬間掷贾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工荣茫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留想帅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓啡莉,卻偏偏與公主長(zhǎng)得像港准,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咧欣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容