軟件架構如何“以不變應萬變”
2022-06-20
來源:InfoQ
軟件架構的概念最早可以追溯到上個世紀六七十年代,計算機大神 Dijkstra 很早就涉足這一領域,但軟件架構真正流行卻是從上世紀 90 年代開始。對技術人而言,架構是再常見不過的詞匯量,但如果去讓他們深入解釋架構,就會發現大多數人都無法清楚描述。翻開維基百科軟件架構的定義,我們會發現它的概念也比較模糊。
架構十五年:改變的是形態,不變的是目的業務驅動架構形態變化
過去十幾年,隨著互聯網發展以及業務的多樣化,系統的架構也在不斷發生變化,總體上來說大體經歷了從單體應用架構 - 垂直應用架構 - 分布式架構 -SOA 架構 - 微服務架構的演變,當前各大企業都在朝著數字化轉型和云原生方向前進。本文結合采訪嘉賓的經驗僅從業務和架構設計兩個視角解析架構過去十五年的演進變化,如果你有不同意見,歡迎留言討論。
"業務驅動與基礎設施的進化推動架構發展”
“架構要解決業務需求的問題,業務需求的變化驅動著架構的進化”。譚待在采訪時說道。從互聯網的角度出發,結合業務的主要變化,國內軟件架構這 15 年的發展大致可以分為三個階段。
第一階段,互聯網正式爆發。這一階段的特點是網頁與用戶數據的迅速增多,無論是當時流行的搜索引擎、社交網絡,還是工業、電商等行業,互聯網的爆發帶來的數據量是傳統的單機和簡單的架構模式無法支持的,傳統的架構也無法解決相應的業務問題。
因此,軟件架構就慢慢從原來的單機系統演變成分布式系統以解決新業務形態帶來的問題,諸如在架構層面考慮容錯、負載均衡等問題。同時需要注意的是,也正是這個時候開啟了后來所謂的大數據時代。
第二階段,移動互聯網的興起。移動互聯網興起之后,互聯網業務的形式又隨之發生了比較大的變化。PC 互聯網時代比較典型的一個例子就是搜索引擎,搜索引擎對時效性要求并不是特別高,對用戶來說只要能找到所需要的內容即可,不追求實時在線,這個時候架構更多解決的是吞吐量大的問題。移動時代則不同,推薦、個性化服務已經成為更主流的方式,業務的場景也變成了對實時性要求非常高的情況。
這一階段架構方面主要的變化就是計算從以前的批量計算變成了流式計算,數據處理從離線變成實時,比較典型的例子就是 Hadoop 到 Spark,再到后面 Flink 的變化。這其中的變化就涵蓋了系統架構對用戶數據的處理、文檔數據的處理、推薦、廣告算法等等,這個時期業務對架構的范式要求更高。另外,這一時期硬件等基礎設施的大幅提升與大規模的應用,也對架構的演進起到了非常大的推動作用。
第三階段,云原生時代。也就是當下,企業上云對許多公司來說已經變成一種默認行為。這個時候業務架構就需要基于云原生進行改造,如何基于云組件做適配,如何合理使用云的彈性、計算存儲分離等功能也變的至關重要。如果繼續使用老的業務架構跑在云上,那無異于“拉著馬車跑在高速公路上”。
云原生出現之后還衍生了一個有趣的現象,在云原生到來之前,企業軟件架構與互聯網軟件架構是分離的,現在這兩者已經開始慢慢交融在一起。傳統的廠商需要進行數字化轉型,其面臨的業務需要互聯網化,要解決高并發、大吞吐等問題,勢必要采用互聯網架構。互聯網公司經過多年的發展壯大,內部運營管理上也會面臨傳統企業的問題,比如如何解決開發效率,如何解決新老系統并存,如何進行數據打通等等。
總的來說,業務場景的需求變化驅動著架構的演進。PC 互聯網時代、移動互聯網時代、云原生時代(數字化轉型時代)的業務需求是不同的,也就對不同時期的架構提出了更多的要求。另外軟硬件等基礎設施的創新和開源價值的體現等也都對架構的演進起到了非常大的助推作用。
以不變應萬變
上面我們從業務的角度盤點了架構的一個大概演進史,過去十幾年,軟件架構發生了非常大的變化。從互聯網到移動互聯網再到云原生,這個過程對軟件架構的影響是巨大的,尤其是云的出現,它不再需要我們去構建基礎設施,這幾個階段都改變了軟件架構也改變了我們如何去構建軟件。但是,盡管軟件架構的形態發生了明顯的變化,其實軟件架構本身的目的卻從未改變。
回到文章開頭我們提到的關于軟件架構定義的爭議,蔡超認為,軟件架構從出現到定位一直是一個頗具爭議的詞,目前唯一能夠明確的只有它的目標。軟件架構的目標則是,第一,加快軟件發布;第二,減少整個軟件生命周期(設計,實現,持續迭代、線上發布維護等)中的資源投入,包括人力資源、軟硬件資源等。
同時,如同 10 多年前,處理好業務復雜性的業務領域建模,實現系統非功能性需求的架構領域的設計模式 / 風格(如:micro-kernel, whiteboard,pipe-filter 等模式)至今也同樣還是架構師的必備知識,不同可能只是他們基于不同基礎設施的具體實現方式。十年前我們做架構一樣會考慮可維護性、可擴展性、高可伸縮性,可擴展性,現如今依然需要考慮這些。關于研發團隊組織結構,誕生于 1964 年的康威定律現在依然在指導我們進行軟件開發團隊組織結構建設 -- 讓團隊結構與系統結構相匹配(如:與微服務匹配的 two-pizza team)。這些從未改變的東西恰恰是架構領域非常重要的內容。
微服務的突破、挑戰與未來
提到微服務最近幾年的一些變化,第一個比較重要的點就是微服務會促進大家逐漸去用更加高效的語言。以 Golang 舉例來說,Golang 特別適合在云原生場景下使用,一方面 Golang 沒有 Java 那么重的啟動的依賴,另一方面容器也提供了一套相對統一的執行環境,這種場景下是沒有必要再去使用字節碼的。而 Golang 的廣泛應用也解決了一些開發效率上的問題。
第二點就是在多運行時、Service Mesh 上的一些改變,做業務和基礎設施的解耦,這給基礎設施提供了更大的發展空間,對于業務和技術能力的迭代都有著非常重要的價值。第三點比較大的變化就是構建可觀測性,比如 Tracing 或者 OpenTelemetry。
而說到挑戰,誠然服務治理、彈性伸縮等等確實是微服務所遇到的挑戰,但微服務最大的挑戰卻并不在技術上,用采訪專家的話說“微服務最大的挑戰是大家沒有意識到微服務的挑戰有多大”。除了技術,企業和程序員正確使用微服務架構,本身就是微服務最大的挑戰。第一,你需要正確使用場景,真正了解微服務帶來的復雜性,了解服務劃分會帶來的問題;第二,微服務對于組織結構也有一定的要求,它要求自治的團隊,如果你是強耦合的組織結構,那么首先就不符合康威定律,組織結構和系統架構就有著巨大的沖突。所以正確理解微服務的理念,正確使用微服務,是企業目前最大的挑戰。
解決認知挑戰后,在技術上,企業針對微服務應主要在這些方向投入,主要有幾個部分,首先就是構建各類平臺化能力,包括調度的能力、服務治理的能力;第二,嘗試對成本優化進行更深入的研究;第三,在多運行時架構上持續投入。微服務未來的研發重點:微服務的各類能力規范化(RFC)、多運行時、成本優化:各類深度技術應用;開發效率:Rust wasm 等;智能化流量治理等。
回顧當下,展望未來
展望架構的未來,還是需要關心整個行業業務發展的情況,企業和架構師必須知道未來要解決的問題是什么?業務層面會產生什么變化?這些變化會對底層架構帶來什么影響?
云原生技術的發展勢不可擋,勢必會成為未來的熱門話題。隨著數字化轉型加速,企業對于云的使用也將會達到新的水平,云原生架構和云原生應用也將會持續迭代演進。
三年前 IDC 做過一份預測,他們發布的《數字化世界 -- 從邊緣到核心》白皮書以及《IDC:2025 年中國將擁有全球最大的數據圈》白皮書有這樣一項結果。人類每一年新創造的數據都超過了過去千年的總和,到 2025 年數據將達到驚人的 175ZB,中國數據圈將增至 48.6ZB,占全球 27.8%,成為全球最大數據圈,而且這種增長沒有顯現出任何緩和的趨勢。越來越多的數據,使用方式的不同,規范使用和隱私管理,邊緣需求等等都會給架構帶來更大的挑戰。
除此之外,現階段業務上超大流量的上漲對計算資源的消耗也是巨大的,擴展雖然沒有問題,但擴展的過程會帶來非常大的損耗,另外業務與基礎設施解耦帶來的問題切分、信任等等也是架構目前遇到的主要挑戰。
數字化轉型帶來的挑戰與思考
除了技術上的挑戰,企業遇到的問題同樣不可忽視。數字化給傳統企業帶來了無限的能量,在企業都進行數字化轉型的大背景下,做好傳統企業架構和所謂的互聯網架構的融合至關重要,這就需要考慮多個層面的問題。
首先,企業對外的業務如何通過互聯網數字化等方式做得更好,在面臨大規模高并發的秒殺活動等業務時如何處理。如何利用互聯網架構解決實時性、大規模、高并發的問題。其次,企業對內需要使用數字化提升效率,打通各種老系統,數字化自己的內部人才,將傳統與互聯網和云更好的融合。
除此之外,軟硬件關注基礎設施層面的創新也至關重要,正所謂”巧婦難為無米之炊“,基礎設施如果不具備條件,業務需求也就無法實現。在云原生時代,基于云的基礎設施設計新的架構就是重中之重,如何將云的基礎特性更好地釋放,將彈性擴縮容,成本優化、可觀測性等等處理好都是需要重點關注的。此外,在業務變多系統架構變得復雜的同時利用類似低代碼或者新的 aPaaS 等技術將效率提高,更快的完成交付。最后就是企業需要在系統增多之后,重點關注系統治理、微服務治理和技術債務等問題。
架構師的成長
成為優秀的架構師是每個技術人的初級夢想,面對挑戰,如何在未來的云原生時代中屹立不倒,除了需要過硬的基礎技術,其他能力也不可或缺,關于架構師的成長蔡超老師總結了以下幾點經驗。
第一,堅持編碼。架構師也是程序員,代碼是軟件的最終實現形態,停止編程會逐漸讓你忘記作為程序員的感受,更重要的是忘記其中的“痛”,從而容易產生一些不切實際的設計。大家可能聽說過在 Amazon,高級副總裁級別的 Distinguish Engineer(如:James Gosling,Java 之父),他們每年的編碼量也非常大,常在 10 萬行以上。
第二,堅持學習。對于 IT 人而言忙碌已成為了習慣,加班常被掛在嘴邊。“996”工作制似乎也變成了公司高效的標志。而事實上過度忙碌會導致你沒有時間學習和更新自己的知識,進而逐漸落后。
另外,除了要勇于去關注技術上新的變化,同時還要有更多思考的角度,重點思考那些歷經多年真正不變的技術和理念。
篇幅有限,更多建議推薦閱讀:一位架構師的感悟:過度忙碌使你落后
(https://www.infoq.cn/article/dyceqhlrbgzkzdvk3esd)
推薦書籍:
《Pattern Oriented Software Architecture》
《Patterns of Enterprise Application Architecture》
《Design Pattern》
《The Design of Design》
寫在最后
架構設計是一個企業的重中之重,云原生時代與數字化轉型的到來,給架構提出了更高的要求,如何正確使用相關技術,幫助企業在云原生數字化轉型時代站穩腳跟釋放更多的能量是當前的巨大挑戰。毫無疑問,軟件領域發展至今仍有大把機會等待著程序員與架構師去開疆擴土。同樣的,無論技術如何演進變化,無論我們使用何種架構和技術,初心不可變,我們最終的目的是為了簡單高效的實現業務需求,以需求為核心找到適合自己和企業的技術才是最明智的選擇。
- 新聞
- IT/互聯網
- CIO
- IT
- CTO
- 軟件信息
下一篇
推薦
-
11月28日-30日,中國數字化年會將于成都正式開幕,本屆年會以數智萬象 無界新生”為主題,設置2場主論壇、1場高峰論壇、5場專題論壇、4項特色活動、2場頒獎典禮等14項活動,以及2天數字化轉型供需對接展。
-
零次方科技發布了其首款人形機器人,可以在多種不規則路面、復雜地形中長時間穩定行走,且具備優秀的抗干擾性能,即使受到各方向的強沖擊也能保持穩定站立。
-
近日,第四屆“青年科學家502論壇”在南方科技大學舉行,美國國家工程院外籍院士沈向洋做了《通用人工智能時代,我們應該怎樣思考大模型》的主題演講,并給出了他對大模型的10個思考。
-
深度解析Meta Reality Labs的生態布局
-
TeleAI 李學龍團隊提出具身世界模型
-
2024 年 10 月 14 日,第 44 屆中東海灣信息技術展(GITEX Global)在阿聯酋迪拜開幕。紫光股份旗下新華三集團重磅亮相展會,以"精耕務實,為時代賦智慧"為主題,全面展示了公司"云-網-安-算-存-端"的全棧技術能力與國際生態合作成果。
我要評論