采訪嘉賓 | 蔡超、成國(guó)柱、譚待
編輯 marsxxl
在 InfoQ 成立 15 周年之際,InfoQ 編輯部發(fā)起了“2007-2022:云、運(yùn)維、架構(gòu)、前端的 15 年演進(jìn)史”特別策劃,將和業(yè)內(nèi)專家共同盤點(diǎn)云計(jì)算、運(yùn)維、架構(gòu)、前端四大技術(shù)領(lǐng)域的演進(jìn)歷史,試圖從幾個(gè)切面窺見 IT 技術(shù)的演進(jìn)規(guī)律。本文是架構(gòu)篇。特此感謝蔡超、成國(guó)柱、譚待(按姓名首字母排序)三位老師對(duì)本文的貢獻(xiàn),他們的真知灼見,是本文能與大家見面的關(guān)鍵。
軟件架構(gòu)的概念最早可以追溯到上個(gè)世紀(jì)六七十年代,計(jì)算機(jī)大神 Dijkstra 很早就涉足這一領(lǐng)域,但軟件架構(gòu)真正流行卻是從上世紀(jì) 90 年代開始。對(duì)技術(shù)人而言,架構(gòu)是再常見不過的詞匯量,但如果去讓他們深入解釋架構(gòu),就會(huì)發(fā)現(xiàn)大多數(shù)人都無法清楚描述。翻開維基百科軟件架構(gòu)的定義,我們會(huì)發(fā)現(xiàn)它的概念也比較模糊。
維基百科:“軟件架構(gòu)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。軟件架構(gòu)會(huì)包括軟件組件、組件之間的關(guān)系,組件特性以及組件間關(guān)系的特性。軟件架構(gòu)可以和建筑物的架構(gòu)相比擬。軟件架構(gòu)是構(gòu)建計(jì)算機(jī)軟件,開發(fā)系統(tǒng)以及計(jì)劃進(jìn)行的基礎(chǔ),可以列出開發(fā)團(tuán)隊(duì)需要完成的任務(wù)。”
對(duì)于軟件架構(gòu),不同的人有不同的理解,而且自其出現(xiàn)后也是引起了不少的爭(zhēng)議。今天我們就借著 InfoQ 15 周年的機(jī)會(huì)盤點(diǎn)一下架構(gòu)這 15 年來的主要變化。希望可以從架構(gòu)的演進(jìn)中獲得一些經(jīng)驗(yàn)和啟發(fā),給大家?guī)聿灰粯拥乃伎肌?/p>
1架構(gòu)十五年:改變的是形態(tài),不變的是目的
業(yè)務(wù)驅(qū)動(dòng)架構(gòu)形態(tài)變化
過去十幾年,隨著互聯(lián)網(wǎng)發(fā)展以及業(yè)務(wù)的多樣化,系統(tǒng)的架構(gòu)也在不斷發(fā)生變化,總體上來說大體經(jīng)歷了從單體應(yīng)用架構(gòu) – 垂直應(yīng)用架構(gòu) – 分布式架構(gòu) -SOA 架構(gòu) – 微服務(wù)架構(gòu)的演變,當(dāng)前各大企業(yè)都在朝著數(shù)字化轉(zhuǎn)型和云原生方向前進(jìn)。本文結(jié)合采訪嘉賓的經(jīng)驗(yàn)僅從業(yè)務(wù)和架構(gòu)設(shè)計(jì)兩個(gè)視角解析架構(gòu)過去十五年的演進(jìn)變化,如果你有不同意見,歡迎留言討論。
“業(yè)務(wù)驅(qū)動(dòng)與基礎(chǔ)設(shè)施的進(jìn)化推動(dòng)架構(gòu)發(fā)展”
“架構(gòu)要解決業(yè)務(wù)需求的問題,業(yè)務(wù)需求的變化驅(qū)動(dòng)著架構(gòu)的進(jìn)化”。譚待在采訪時(shí)說道。從互聯(lián)網(wǎng)的角度出發(fā),結(jié)合業(yè)務(wù)的主要變化,國(guó)內(nèi)軟件架構(gòu)這 15 年的發(fā)展大致可以分為三個(gè)階段。
第一階段,互聯(lián)網(wǎng)正式爆發(fā)。這一階段的特點(diǎn)是網(wǎng)頁與用戶數(shù)據(jù)的迅速增多,無論是當(dāng)時(shí)流行的搜索引擎、社交網(wǎng)絡(luò),還是工業(yè)、電商等行業(yè),互聯(lián)網(wǎng)的爆發(fā)帶來的數(shù)據(jù)量是傳統(tǒng)的單機(jī)和簡(jiǎn)單的架構(gòu)模式無法支持的,傳統(tǒng)的架構(gòu)也無法解決相應(yīng)的業(yè)務(wù)問題。
因此,軟件架構(gòu)就慢慢從原來的單機(jī)系統(tǒng)演變成分布式系統(tǒng)以解決新業(yè)務(wù)形態(tài)帶來的問題,諸如在架構(gòu)層面考慮容錯(cuò)、負(fù)載均衡等問題。同時(shí)需要注意的是,也正是這個(gè)時(shí)候開啟了后來所謂的大數(shù)據(jù)時(shí)代。
第二階段,移動(dòng)互聯(lián)網(wǎng)的興起。移動(dòng)互聯(lián)網(wǎng)興起之后,互聯(lián)網(wǎng)業(yè)務(wù)的形式又隨之發(fā)生了比較大的變化。PC 互聯(lián)網(wǎng)時(shí)代比較典型的一個(gè)例子就是搜索引擎,搜索引擎對(duì)時(shí)效性要求并不是特別高,對(duì)用戶來說只要能找到所需要的內(nèi)容即可,不追求實(shí)時(shí)在線,這個(gè)時(shí)候架構(gòu)更多解決的是吞吐量大的問題。移動(dòng)時(shí)代則不同,推薦、個(gè)性化服務(wù)已經(jīng)成為更主流的方式,業(yè)務(wù)的場(chǎng)景也變成了對(duì)實(shí)時(shí)性要求非常高的情況。
這一階段架構(gòu)方面主要的變化就是計(jì)算從以前的批量計(jì)算變成了流式計(jì)算,數(shù)據(jù)處理從離線變成實(shí)時(shí),比較典型的例子就是 Hadoop 到 Spark,再到后面 Flink 的變化。這其中的變化就涵蓋了系統(tǒng)架構(gòu)對(duì)用戶數(shù)據(jù)的處理、文檔數(shù)據(jù)的處理、推薦、廣告算法等等,這個(gè)時(shí)期業(yè)務(wù)對(duì)架構(gòu)的范式要求更高。另外,這一時(shí)期硬件等基礎(chǔ)設(shè)施的大幅提升與大規(guī)模的應(yīng)用,也對(duì)架構(gòu)的演進(jìn)起到了非常大的推動(dòng)作用。
第三階段,云原生時(shí)代。也就是當(dāng)下,企業(yè)上云對(duì)許多公司來說已經(jīng)變成一種默認(rèn)行為。這個(gè)時(shí)候業(yè)務(wù)架構(gòu)就需要基于云原生進(jìn)行改造,如何基于云組件做適配,如何合理使用云的彈性、計(jì)算存儲(chǔ)分離等功能也變的至關(guān)重要。如果繼續(xù)使用老的業(yè)務(wù)架構(gòu)跑在云上,那無異于“拉著馬車跑在高速公路上”。
云原生出現(xiàn)之后還衍生了一個(gè)有趣的現(xiàn)象,在云原生到來之前,企業(yè)軟件架構(gòu)與互聯(lián)網(wǎng)軟件架構(gòu)是分離的,現(xiàn)在這兩者已經(jīng)開始慢慢交融在一起。傳統(tǒng)的廠商需要進(jìn)行數(shù)字化轉(zhuǎn)型,其面臨的業(yè)務(wù)需要互聯(lián)網(wǎng)化,要解決高并發(fā)、大吞吐等問題,勢(shì)必要采用互聯(lián)網(wǎng)架構(gòu)。互聯(lián)網(wǎng)公司經(jīng)過多年的發(fā)展壯大,內(nèi)部運(yùn)營(yíng)管理上也會(huì)面臨傳統(tǒng)企業(yè)的問題,比如如何解決開發(fā)效率,如何解決新老系統(tǒng)并存,如何進(jìn)行數(shù)據(jù)打通等等。
總的來說,業(yè)務(wù)場(chǎng)景的需求變化驅(qū)動(dòng)著架構(gòu)的演進(jìn)。PC 互聯(lián)網(wǎng)時(shí)代、移動(dòng)互聯(lián)網(wǎng)時(shí)代、云原生時(shí)代(數(shù)字化轉(zhuǎn)型時(shí)代)的業(yè)務(wù)需求是不同的,也就對(duì)不同時(shí)期的架構(gòu)提出了更多的要求。另外軟硬件等基礎(chǔ)設(shè)施的創(chuàng)新和開源價(jià)值的體現(xiàn)等也都對(duì)架構(gòu)的演進(jìn)起到了非常大的助推作用。
上面我們從業(yè)務(wù)的角度盤點(diǎn)了架構(gòu)的一個(gè)大概演進(jìn)史,過去十幾年,軟件架構(gòu)發(fā)生了非常大的變化。從互聯(lián)網(wǎng)到移動(dòng)互聯(lián)網(wǎng)再到云原生,這個(gè)過程對(duì)軟件架構(gòu)的影響是巨大的,尤其是云的出現(xiàn),它不再需要我們?nèi)?gòu)建基礎(chǔ)設(shè)施,這幾個(gè)階段都改變了軟件架構(gòu)也改變了我們?nèi)绾稳?gòu)建軟件。但是,盡管軟件架構(gòu)的形態(tài)發(fā)生了明顯的變化,其實(shí)軟件架構(gòu)本身的目的卻從未改變。
回到文章開頭我們提到的關(guān)于軟件架構(gòu)定義的爭(zhēng)議,蔡超認(rèn)為,軟件架構(gòu)從出現(xiàn)到定位一直是一個(gè)頗具爭(zhēng)議的詞,目前唯一能夠明確的只有它的目標(biāo)。軟件架構(gòu)的目標(biāo)則是,第一,加快軟件發(fā)布;第二,減少整個(gè)軟件生命周期(設(shè)計(jì),實(shí)現(xiàn),持續(xù)迭代、線上發(fā)布維護(hù)等)中的資源投入,包括人力資源、軟硬件資源等。
同時(shí),如同 10 多年前,處理好業(yè)務(wù)復(fù)雜性的業(yè)務(wù)領(lǐng)域建模,實(shí)現(xiàn)系統(tǒng)非功能性需求的架構(gòu)領(lǐng)域的設(shè)計(jì)模式 / 風(fēng)格(如:micro-kernel, whiteboard,pipe-filter 等模式)至今也同樣還是架構(gòu)師的必備知識(shí),不同可能只是他們基于不同基礎(chǔ)設(shè)施的具體實(shí)現(xiàn)方式。十年前我們做架構(gòu)一樣會(huì)考慮可維護(hù)性、可擴(kuò)展性、高可伸縮性,可擴(kuò)展性,現(xiàn)如今依然需要考慮這些。關(guān)于研發(fā)團(tuán)隊(duì)組織結(jié)構(gòu),誕生于 1964 年的康威定律現(xiàn)在依然在指導(dǎo)我們進(jìn)行軟件開發(fā)團(tuán)隊(duì)組織結(jié)構(gòu)建設(shè) — 讓團(tuán)隊(duì)結(jié)構(gòu)與系統(tǒng)結(jié)構(gòu)相匹配(如:與微服務(wù)匹配的 two-pizza team)。這些從未改變的東西恰恰是架構(gòu)領(lǐng)域非常重要的內(nèi)容。
微服務(wù)的突破、挑戰(zhàn)與未來
提到微服務(wù)最近幾年的一些變化,第一個(gè)比較重要的點(diǎn)就是微服務(wù)會(huì)促進(jìn)大家逐漸去用更加高效的語言。以 Golang 舉例來說,Golang 特別適合在云原生場(chǎng)景下使用,一方面 Golang 沒有 Java 那么重的啟動(dòng)的依賴,另一方面容器也提供了一套相對(duì)統(tǒng)一的執(zhí)行環(huán)境,這種場(chǎng)景下是沒有必要再去使用字節(jié)碼的。而 Golang 的廣泛應(yīng)用也解決了一些開發(fā)效率上的問題。
第二點(diǎn)就是在多運(yùn)行時(shí)、Service Mesh 上的一些改變,做業(yè)務(wù)和基礎(chǔ)設(shè)施的解耦,這給基礎(chǔ)設(shè)施提供了更大的發(fā)展空間,對(duì)于業(yè)務(wù)和技術(shù)能力的迭代都有著非常重要的價(jià)值。第三點(diǎn)比較大的變化就是構(gòu)建可觀測(cè)性,比如 Tracing 或者 OpenTelemetry。
而說到挑戰(zhàn),誠(chéng)然服務(wù)治理、彈性伸縮等等確實(shí)是微服務(wù)所遇到的挑戰(zhàn),但微服務(wù)最大的挑戰(zhàn)卻并不在技術(shù)上,用采訪專家的話說“微服務(wù)最大的挑戰(zhàn)是大家沒有意識(shí)到微服務(wù)的挑戰(zhàn)有多大”。除了技術(shù),企業(yè)和程序員正確使用微服務(wù)架構(gòu),本身就是微服務(wù)最大的挑戰(zhàn)。第一,你需要正確使用場(chǎng)景,真正了解微服務(wù)帶來的復(fù)雜性,了解服務(wù)劃分會(huì)帶來的問題;第二,微服務(wù)對(duì)于組織結(jié)構(gòu)也有一定的要求,它要求自治的團(tuán)隊(duì),如果你是強(qiáng)耦合的組織結(jié)構(gòu),那么首先就不符合康威定律,組織結(jié)構(gòu)和系統(tǒng)架構(gòu)就有著巨大的沖突。所以正確理解微服務(wù)的理念,正確使用微服務(wù),是企業(yè)目前最大的挑戰(zhàn)。
解決認(rèn)知挑戰(zhàn)后,在技術(shù)上,企業(yè)針對(duì)微服務(wù)應(yīng)主要在這些方向投入,主要有幾個(gè)部分,首先就是構(gòu)建各類平臺(tái)化能力,包括調(diào)度的能力、服務(wù)治理的能力;第二,嘗試對(duì)成本優(yōu)化進(jìn)行更深入的研究;第三,在多運(yùn)行時(shí)架構(gòu)上持續(xù)投入。微服務(wù)未來的研發(fā)重點(diǎn):微服務(wù)的各類能力規(guī)范化(RFC)、多運(yùn)行時(shí)、成本優(yōu)化:各類深度技術(shù)應(yīng)用;開發(fā)效率:Rust wasm 等;智能化流量治理等。
2回顧當(dāng)下,展望未來
展望架構(gòu)的未來,還是需要關(guān)心整個(gè)行業(yè)業(yè)務(wù)發(fā)展的情況,企業(yè)和架構(gòu)師必須知道未來要解決的問題是什么?業(yè)務(wù)層面會(huì)產(chǎn)生什么變化?這些變化會(huì)對(duì)底層架構(gòu)帶來什么影響?
云原生技術(shù)的發(fā)展勢(shì)不可擋,勢(shì)必會(huì)成為未來的熱門話題。隨著數(shù)字化轉(zhuǎn)型加速,企業(yè)對(duì)于云的使用也將會(huì)達(dá)到新的水平,云原生架構(gòu)和云原生應(yīng)用也將會(huì)持續(xù)迭代演進(jìn)。
三年前 IDC 做過一份預(yù)測(cè),他們發(fā)布的《數(shù)字化世界 — 從邊緣到核心》白皮書以及《IDC:2025 年中國(guó)將擁有全球最大的數(shù)據(jù)圈》白皮書有這樣一項(xiàng)結(jié)果。人類每一年新創(chuàng)造的數(shù)據(jù)都超過了過去千年的總和,到 2025 年數(shù)據(jù)將達(dá)到驚人的 175ZB,中國(guó)數(shù)據(jù)圈將增至 48.6ZB,占全球 27.8%,成為全球最大數(shù)據(jù)圈,而且這種增長(zhǎng)沒有顯現(xiàn)出任何緩和的趨勢(shì)。越來越多的數(shù)據(jù),使用方式的不同,規(guī)范使用和隱私管理,邊緣需求等等都會(huì)給架構(gòu)帶來更大的挑戰(zhàn)。
除此之外,現(xiàn)階段業(yè)務(wù)上超大流量的上漲對(duì)計(jì)算資源的消耗也是巨大的,擴(kuò)展雖然沒有問題,但擴(kuò)展的過程會(huì)帶來非常大的損耗,另外業(yè)務(wù)與基礎(chǔ)設(shè)施解耦帶來的問題切分、信任等等也是架構(gòu)目前遇到的主要挑戰(zhàn)。
數(shù)字化轉(zhuǎn)型帶來的挑戰(zhàn)與思考
除了技術(shù)上的挑戰(zhàn),企業(yè)遇到的問題同樣不可忽視。數(shù)字化給傳統(tǒng)企業(yè)帶來了無限的能量,在企業(yè)都進(jìn)行數(shù)字化轉(zhuǎn)型的大背景下,做好傳統(tǒng)企業(yè)架構(gòu)和所謂的互聯(lián)網(wǎng)架構(gòu)的融合至關(guān)重要,這就需要考慮多個(gè)層面的問題。
首先,企業(yè)對(duì)外的業(yè)務(wù)如何通過互聯(lián)網(wǎng)數(shù)字化等方式做得更好,在面臨大規(guī)模高并發(fā)的秒殺活動(dòng)等業(yè)務(wù)時(shí)如何處理。如何利用互聯(lián)網(wǎng)架構(gòu)解決實(shí)時(shí)性、大規(guī)模、高并發(fā)的問題。其次,企業(yè)對(duì)內(nèi)需要使用數(shù)字化提升效率,打通各種老系統(tǒng),數(shù)字化自己的內(nèi)部人才,將傳統(tǒng)與互聯(lián)網(wǎng)和云更好的融合。
除此之外,軟硬件關(guān)注基礎(chǔ)設(shè)施層面的創(chuàng)新也至關(guān)重要,正所謂”巧婦難為無米之炊“,基礎(chǔ)設(shè)施如果不具備條件,業(yè)務(wù)需求也就無法實(shí)現(xiàn)。在云原生時(shí)代,基于云的基礎(chǔ)設(shè)施設(shè)計(jì)新的架構(gòu)就是重中之重,如何將云的基礎(chǔ)特性更好地釋放,將彈性擴(kuò)縮容,成本優(yōu)化、可觀測(cè)性等等處理好都是需要重點(diǎn)關(guān)注的。此外,在業(yè)務(wù)變多系統(tǒng)架構(gòu)變得復(fù)雜的同時(shí)利用類似低代碼或者新的 aPaaS 等技術(shù)將效率提高,更快的完成交付。最后就是企業(yè)需要在系統(tǒng)增多之后,重點(diǎn)關(guān)注系統(tǒng)治理、微服務(wù)治理和技術(shù)債務(wù)等問題。
架構(gòu)師的成長(zhǎng)
成為優(yōu)秀的架構(gòu)師是每個(gè)技術(shù)人的初級(jí)夢(mèng)想,面對(duì)挑戰(zhàn),如何在未來的云原生時(shí)代中屹立不倒,除了需要過硬的基礎(chǔ)技術(shù),其他能力也不可或缺,關(guān)于架構(gòu)師的成長(zhǎng)蔡超老師總結(jié)了以下幾點(diǎn)經(jīng)驗(yàn)。
第一,堅(jiān)持編碼。架構(gòu)師也是程序員,代碼是軟件的最終實(shí)現(xiàn)形態(tài),停止編程會(huì)逐漸讓你忘記作為程序員的感受,更重要的是忘記其中的“痛”,從而容易產(chǎn)生一些不切實(shí)際的設(shè)計(jì)。大家可能聽說過在 Amazon,高級(jí)副總裁級(jí)別的 Distinguish Engineer(如:James Gosling,Java 之父),他們每年的編碼量也非常大,常在 10 萬行以上。
第二,堅(jiān)持學(xué)習(xí)。對(duì)于 IT 人而言忙碌已成為了習(xí)慣,加班常被掛在嘴邊?!?96”工作制似乎也變成了公司高效的標(biāo)志。而事實(shí)上過度忙碌會(huì)導(dǎo)致你沒有時(shí)間學(xué)習(xí)和更新自己的知識(shí),進(jìn)而逐漸落后。
另外,除了要勇于去關(guān)注技術(shù)上新的變化,同時(shí)還要有更多思考的角度,重點(diǎn)思考那些歷經(jīng)多年真正不變的技術(shù)和理念。
篇幅有限,更多建議推薦閱讀:一位架構(gòu)師的感悟:過度忙碌使你落后(https://www.infoq.cn/article/dyceqhlrbgzkzdvk3esd)
推薦書籍:《Pattern Oriented Software Architecture》《Patterns of Enterprise Application Architecture》《Design Pattern》《The Design of Design》
3寫在最后
架構(gòu)設(shè)計(jì)是一個(gè)企業(yè)的重中之重,云原生時(shí)代與數(shù)字化轉(zhuǎn)型的到來,給架構(gòu)提出了更高的要求,如何正確使用相關(guān)技術(shù),幫助企業(yè)在云原生數(shù)字化轉(zhuǎn)型時(shí)代站穩(wěn)腳跟釋放更多的能量是當(dāng)前的巨大挑戰(zhàn)。毫無疑問,軟件領(lǐng)域發(fā)展至今仍有大把機(jī)會(huì)等待著程序員與架構(gòu)師去開疆?dāng)U土。同樣的,無論技術(shù)如何演進(jìn)變化,無論我們使用何種架構(gòu)和技術(shù),初心不可變,我們最終的目的是為了簡(jiǎn)單高效的實(shí)現(xiàn)業(yè)務(wù)需求,以需求為核心找到適合自己和企業(yè)的技術(shù)才是最明智的選擇。
嘉賓介紹:(按姓名首字母排序)
蔡超:Mobvista 副總裁兼首席架構(gòu)師。擁有超過 15 年的軟件開發(fā)經(jīng)驗(yàn),其中 9 年任世界級(jí) IT 公司軟件架構(gòu)師 / 首席軟件架構(gòu)師。
成國(guó)柱:字節(jié)跳動(dòng) 架構(gòu) / 服務(wù)框架團(tuán)隊(duì)負(fù)責(zé)人。
譚待:火山引擎總經(jīng)理,在云計(jì)算和搜索引擎領(lǐng)域有十幾年研發(fā)經(jīng)驗(yàn)。2007 年至 2019 年期間就職于百度,曾擔(dān)任百度搜索和基礎(chǔ)架構(gòu)首席架構(gòu)師。2020 年加入字節(jié)跳動(dòng),領(lǐng)導(dǎo)火山引擎開拓企業(yè)級(jí)市場(chǎng)。
參考鏈接:
https://zh.m.wikipedia.org/zh/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84
https://www.infoq.cn/article/dyceqhlrbgzkzdvk3esd
https://www.infoq.cn/article/r9vtub0robioghjeu5ti
https://www.infoq.cn/article/Cx1Mokk6WCFIeduMedFw