很多企業(yè)都在尋找能夠快速高效構(gòu)建軟件架構(gòu)的指導(dǎo)性思維,而Neal Ford在軟件架構(gòu)領(lǐng)域豐富的經(jīng)驗和極具創(chuàng)新性的思維為眾多企業(yè)內(nèi)部的架構(gòu)師和開發(fā)者帶來了全新的思路。作為一家全球性的企業(yè),ThoughtWorks在技術(shù)方面擁有獨特的全球化視角,而Neal Ford與另外兩位同事Rebecca Parsons和Patrick Kua也正是在全球項目經(jīng)驗的積累過程中得到了演進(jìn)架構(gòu)的概念,于是就有了這本書。
演進(jìn)式架構(gòu)的出現(xiàn)
演進(jìn)式架構(gòu)的出現(xiàn)有多方面的原因。最主要的一方面在于,在數(shù)字化轉(zhuǎn)型的浪潮下,企業(yè)有推動創(chuàng)新業(yè)務(wù)的需求,然而,傳統(tǒng)的企業(yè)軟件固化的業(yè)務(wù)流程在IT層面上是創(chuàng)新的阻礙。
Neal Ford在采訪中表示,ThoughtWorks從技術(shù)的角度出發(fā),認(rèn)為更應(yīng)該照顧企業(yè)真實的應(yīng)用場景,定制化地開發(fā)軟件,或者說,從定制化的軟件平臺下開發(fā)出獨特的業(yè)務(wù)模型。這本書中所說演進(jìn)式架構(gòu)并不是要否定原有企業(yè)中常見的成體系的軟件系統(tǒng),而是要把原來的軟件比如SAP、DMS等應(yīng)用逐步演進(jìn)到微服務(wù)架構(gòu)上,這是演進(jìn)式架構(gòu)主要解決的問題。
另一方面是技術(shù)的演進(jìn),主要是微服務(wù)技術(shù)的出現(xiàn)。Neal Ford在采訪中表示,微服務(wù)本身是一種架構(gòu)的模式,或者可以把微服務(wù)視為一種架構(gòu)風(fēng)格,而這種架構(gòu)風(fēng)格正好是在這本書里面所介紹的演示架構(gòu)的一些原則和實踐的最佳的體現(xiàn)。
演進(jìn)式架構(gòu)的特點
向?qū)绞荖eal Ford所說的演進(jìn)式架構(gòu)的重要特征。向?qū)绞侵府?dāng)開發(fā)者想提升系統(tǒng)某一方面的能力的時候,可以通過定義適應(yīng)函數(shù)來明確現(xiàn)在的演進(jìn)方向是不是能想要的,可以量化地展示給開發(fā)者現(xiàn)在離目標(biāo)還有多遠(yuǎn)。向?qū)降闹敢@點對于許多企業(yè),尤其是大型企業(yè)有大規(guī)模架構(gòu)堆棧的時候尤為難得。
從這些基礎(chǔ)上我們也能看到,演進(jìn)式架構(gòu)相對于以前的架構(gòu)開發(fā)模式以及開發(fā)思想并不是跳躍性的突破,其實是有一定延續(xù)性的。據(jù)Neal Ford介紹,Netflix等大公司已經(jīng)有了演進(jìn)式架構(gòu)的實踐,在演進(jìn)式架構(gòu)的概念推出之前,更多地是將這些實踐定義為適應(yīng)性架構(gòu)。
但適應(yīng)性架構(gòu)跟現(xiàn)在的演進(jìn)式架構(gòu)還是有很大區(qū)別的。
Neal解釋說,適應(yīng)性架構(gòu)的特點是通過配置系統(tǒng)、或者配置文件來支撐整個系統(tǒng),當(dāng)業(yè)務(wù)改變的時候需要更改配置項即可讓系統(tǒng)適應(yīng)起新業(yè)務(wù)流程,這一時期的開發(fā)和運維是完全分開的。演進(jìn)式架構(gòu)的設(shè)計本身就是支持由于新業(yè)務(wù)不斷出現(xiàn)所帶來的演進(jìn)式問題,是建立在持續(xù)集成、持續(xù)交付、DevOps、基礎(chǔ)設(shè)施即代碼的基礎(chǔ)之上的,與原來的適應(yīng)性架構(gòu)的技術(shù)趨勢生態(tài)已有很大不同。
適應(yīng)性架構(gòu)要求軟件架構(gòu)本身非常大而全,通過配置項在已有的基礎(chǔ)上做配置,適應(yīng)性架構(gòu)的本身就很復(fù)雜,所以,構(gòu)建這樣一套系統(tǒng)的成本首先會很高。而演進(jìn)式架構(gòu)的做法更輕量級,是在當(dāng)需求出現(xiàn)的時候通過適應(yīng)函數(shù)來把握架構(gòu)演進(jìn)的方向,演進(jìn)式架構(gòu)隨著系統(tǒng)和業(yè)務(wù)的增加而變化,而且能夠保證用戶得到想要的部分,追求性能的得到性能上的優(yōu)化,追求擴(kuò)展性的在擴(kuò)展性方面可以不斷提升。
再簡單而言,適應(yīng)性架構(gòu)會做很多詳盡的規(guī)劃和設(shè)計,以至于會做許多無用功,演進(jìn)式架構(gòu)更著眼于實際需求,會更多地依靠后期持續(xù)反饋來調(diào)整演進(jìn)方向。
演進(jìn)式架構(gòu)的應(yīng)用、適用與作用
Neal表示,當(dāng)企業(yè)認(rèn)識到演進(jìn)式架構(gòu)能讓他比競爭對手跑得更快的時候,一定會選擇演進(jìn)式架構(gòu)。
如何開啟演進(jìn)式架構(gòu)的第一步呢?Neal表示,簡單的在企業(yè)部署一個適應(yīng)函數(shù)或者部署一個架構(gòu)檢查的過程中其實就已經(jīng)算是在采用演進(jìn)式架構(gòu)了,但這一技術(shù)層次的變革對于人和組織都沒有什么變化,想要充分發(fā)揮演進(jìn)式架構(gòu)的優(yōu)勢,還需要整個團(tuán)隊組織架構(gòu)做出變化。組織結(jié)構(gòu)需要支撐敏捷轉(zhuǎn)型,團(tuán)隊成員需要相對穩(wěn)定,需要支持DevOps,漸漸發(fā)揮演進(jìn)式架構(gòu)的作用,但剛開始的時候作用并不大,需要一個漫長的過程。
雖然演進(jìn)式架構(gòu)的優(yōu)勢非常明顯,但Neal表示演進(jìn)式架構(gòu)并不適用于所有企業(yè)用戶。想要采用演進(jìn)式架構(gòu)的企業(yè)需要一些基礎(chǔ),比如需要有敏捷的開發(fā)模型、敏捷的開發(fā)方式、持續(xù)交付、DevOps的開發(fā)基礎(chǔ)設(shè)施或者是持續(xù)的交付開發(fā)實踐等等,如果沒有這些基礎(chǔ),那么企業(yè)將很難適應(yīng)演進(jìn)式架構(gòu)。
演進(jìn)式架構(gòu)讓IT架構(gòu)師的角色也發(fā)生了改變。演進(jìn)式架構(gòu)具有向?qū)?,?dāng)架構(gòu)師在思考軟件架構(gòu)設(shè)計的時候,由于有了演進(jìn)式架構(gòu)所特有的量化性指標(biāo),能夠更有的放矢。在這樣的情況下,IT架構(gòu)師面對不斷變化的業(yè)務(wù),主要的工作是去引導(dǎo)不同團(tuán)隊在做架構(gòu)設(shè)計中所要遵循的不同原則,而IT架構(gòu)師也在演進(jìn)式架構(gòu)的推動下,從架構(gòu)的規(guī)劃管理者變成了教練員。
對企業(yè)來說,演進(jìn)式架構(gòu)能減少因人員變動而對現(xiàn)有IT架構(gòu)持續(xù)演進(jìn)所帶來的負(fù)面影響??傊?,這種架構(gòu)可以減少企業(yè)對于特定架構(gòu)師的依賴。因為,演進(jìn)式架構(gòu)把原來的架構(gòu)設(shè)計從文檔變成了適應(yīng)函數(shù),適應(yīng)函數(shù)能讓架構(gòu)師清晰地看到當(dāng)前架構(gòu)的特征,并指出演進(jìn)方向,能迅速讓新的架構(gòu)師接任原來的工作。
在數(shù)字化轉(zhuǎn)型后時代來臨的今天,越來越多的中國企業(yè)都希望建立自己的企業(yè)架構(gòu)模型。此次來華,Neal走訪了幾家大型機構(gòu),他表示,因為企業(yè)架構(gòu)有復(fù)雜性,所以在選用演進(jìn)式架構(gòu)方面,很多中國企業(yè)由于缺少部分原始積累反而會有很大的優(yōu)勢。