溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring 核心技術(shù)與產(chǎn)品理念剖析【下】

發(fā)布時(shí)間:2020-07-21 21:39:46 來(lái)源:網(wǎng)絡(luò) 閱讀:531 作者:IT老兵哥 欄目:軟件技術(shù)
  • 3. Spring Cloud 蝶變重生

Spring 框架的升級(jí)演進(jìn)都是圍繞分層架構(gòu)進(jìn)行的,從簡(jiǎn)單到復(fù)雜,再回到簡(jiǎn)單的過(guò)程。如果我們沒(méi)有經(jīng)歷過(guò) Spring 最開(kāi)始繁瑣的配置,然后一步步精簡(jiǎn),就根本體會(huì)不到為什么會(huì)有 Spring Boot。俗話說(shuō),亂世造英雄。在新舊時(shí)代交替階段,原來(lái)統(tǒng)治世界的舊秩序正在慢慢失效,而新秩序尚未成型,那些建立或者依賴舊秩序的巨頭會(huì)被慣性推著往前走,他們習(xí)慣性地用舊思維或眼光看待世界,所以他們無(wú)法正確地理解新時(shí)代,這也就是誕生新巨頭的機(jī)會(huì)。隨著手機(jī)等各種智能終端的普及,原本最大的開(kāi)發(fā)領(lǐng)域從企業(yè)應(yīng)用變成了互聯(lián)網(wǎng)應(yīng)用,而這也引發(fā)了計(jì)算、存儲(chǔ)等需求的暴漲,云計(jì)算隨即呼之而出?;A(chǔ)架構(gòu)從傳統(tǒng)演進(jìn)到了云計(jì)算,與傳統(tǒng)基礎(chǔ)架構(gòu)匹配的應(yīng)用架構(gòu)是單體式分層架構(gòu),而與云計(jì)算匹配的應(yīng)用架構(gòu)是什么樣的呢?大時(shí)代需要遠(yuǎn)見(jiàn),否則容易懵圈。

Spring 核心技術(shù)與產(chǎn)品理念剖析【下】

記得2013~2016這幾年時(shí)間里,應(yīng)用開(kāi)發(fā)技術(shù)棧出現(xiàn)過(guò)一陣混亂,老兵哥所在公司原本有套統(tǒng)一的內(nèi)部開(kāi)發(fā)框架,就是對(duì) Spring 進(jìn)行封裝、定制和擴(kuò)展,適配公司內(nèi)部的基礎(chǔ)平臺(tái)和通用組件,滿足內(nèi)部各種企業(yè)應(yīng)用的開(kāi)發(fā)需求。企業(yè)應(yīng)用都是服務(wù)于內(nèi)部辦公無(wú)紙化、自動(dòng)化的,用戶規(guī)模和并發(fā)訪問(wèn)量都是可以預(yù)估的,單體式分層架構(gòu)就足夠了。但隨著互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的業(yè)務(wù)開(kāi)始上線,包括營(yíng)銷(xiāo)、客服等,互聯(lián)網(wǎng)用戶量不斷增長(zhǎng),并發(fā)訪問(wèn)量波峰波谷的差值也越來(lái)越大,單體式分層架構(gòu)顯然無(wú)法滿足業(yè)務(wù)發(fā)展要求了。

當(dāng)時(shí)在互聯(lián)網(wǎng)領(lǐng)域走得比較靠前的企業(yè),開(kāi)始在業(yè)務(wù)驅(qū)動(dòng)下摸著石頭過(guò)河了,那時(shí)候就出現(xiàn)了面向服務(wù)架構(gòu) SOA 和Web Service,Spring 最最擅長(zhǎng)的領(lǐng)域就是企業(yè)應(yīng)用開(kāi)發(fā),但對(duì)如何滿足互聯(lián)網(wǎng)應(yīng)用的需求也有些摸不準(zhǔn)方向,業(yè)界也開(kāi)始出現(xiàn)許多新物種,其中最火爆的就是阿里的 Dubbo,曾經(jīng)有種說(shuō)法是 Dubbo 要代替 Spring。Web Service 就像當(dāng)年的 EJB,過(guò)于復(fù)雜臃腫,但在沒(méi)有更好選擇的情況下,許多企業(yè)都采用了 Web Service。直到 RESTful 等新架構(gòu)技術(shù)出現(xiàn),以及 Netflix 探索出了微服務(wù)架構(gòu),業(yè)界才找到了應(yīng)對(duì)互聯(lián)網(wǎng)化的法寶。

Pivotal,Spring 的東家,在 Netflix 探索微服務(wù)架構(gòu)時(shí)期,它正好在為 Netflix 提供咨詢服務(wù)。當(dāng)微服務(wù)架構(gòu)被驗(yàn)證可行之后,Spring 就順勢(shì)將 Netflix 微服務(wù)全家桶 Netflix OSS 納入到 Spring Cloud 當(dāng)中,組件包括:Eureka、Zuul、Ribbon、Hystrix、Archaius 等。憑借這套解決方案在技術(shù)上的先進(jìn)性和成熟度,以及原先遍布全球的無(wú)數(shù)粉絲用戶,Spring 在云計(jì)算時(shí)代重新回到了 Java 應(yīng)用開(kāi)發(fā)框架的頭把交椅上。Spring Boot 降低了單個(gè)應(yīng)用的開(kāi)發(fā)難度,Spring Cloud 降低了分布式系統(tǒng)的開(kāi)發(fā)難度,強(qiáng)強(qiáng)聯(lián)合,所向披靡。

隨著 Spring Cloud 的地位越來(lái)越穩(wěn)固,它的生態(tài)也開(kāi)始發(fā)生了些變化,首先 Netflix 宣布 Eureka 閉源,后來(lái) Netflix 宣布 Hystrix 停止新功能開(kāi)發(fā)。同時(shí),Spring Cloud 也從依賴生態(tài)伙伴提供關(guān)鍵組件,演變到自研適配關(guān)鍵組件,例如:Spring Cloud Gateway、Spring Cloud Config、Spring Cloud LoadBalance 等。

J2EE 在應(yīng)用開(kāi)發(fā)當(dāng)中所扮演的角色也在不斷演進(jìn),最初 J2EE、Spring 相關(guān)的應(yīng)用會(huì)被部署至應(yīng)用服務(wù)器,而現(xiàn)如今在 Spring Boot 的支持下,應(yīng)用程序可以采用 DevOps、云原生的開(kāi)發(fā)模式,Servlet 容器被內(nèi)嵌在發(fā)布物當(dāng)中。在 Spring 5.x 之后,采用 WebFlux 的應(yīng)用可以不依賴任何 Servlet API,也可以部署在非 Servlet 容器的服務(wù)器當(dāng)中,例如:Netty 等。Spring 還在不斷創(chuàng)新和演進(jìn),除了 Spring Framework 之外,它還包含許多子工程:Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。至此,Spring Cloud 成功蝶變了。

  • 4. Spring 的產(chǎn)品設(shè)計(jì)理念

Spring 的發(fā)展?fàn)顟B(tài)不是一蹴而就的,先從點(diǎn)到線,再?gòu)木€到面。最初僅實(shí)現(xiàn)了 IoC、AOP 等核心特性,支持單體式分層架構(gòu),再到 Spring Cloud 標(biāo)準(zhǔn)化不同系統(tǒng)之間的交互方式,同時(shí)不斷構(gòu)筑起豐富強(qiáng)大的生態(tài)圈。Spring 的成功不光是技術(shù)層面的,更主要是產(chǎn)品設(shè)計(jì)理念層面的,技術(shù)上的領(lǐng)先很容易被模仿抄襲,而理念差距卻很難跨越。

樂(lè)高(LEGO),來(lái)自童話王國(guó)丹麥的玩具品牌,歷經(jīng)80多年的發(fā)展成為世界玩具市場(chǎng)的領(lǐng)導(dǎo)品牌,并以強(qiáng)大的實(shí)力躋身世界500強(qiáng)(第96位)。它旗下的產(chǎn)品以其獨(dú)特的組合結(jié)構(gòu)而風(fēng)靡全球,得到了不計(jì)其數(shù)的孩子們甚至成年人的熱愛(ài)與收藏。這家公司現(xiàn)在的產(chǎn)品是幾種基本形狀的塑料顆粒,最初它從制造木質(zhì)玩具開(kāi)始的,后來(lái)轉(zhuǎn)而生產(chǎn)塑料玩具,但玩具市場(chǎng)跟服裝市場(chǎng)類似,每年都有不同的流行款式,樂(lè)高也做不到每年都準(zhǔn)確預(yù)測(cè)玩具流行趨勢(shì),生意不慍不火。

后來(lái)企業(yè)傳到了創(chuàng)始人的兒子手上,一個(gè)偶然的機(jī)會(huì)有個(gè)玩具經(jīng)銷(xiāo)商建議他生產(chǎn)可拼裝玩具,這樣玩家就可以拼裝各式各樣的玩具,樂(lè)高也就永遠(yuǎn)不會(huì)過(guò)時(shí)了,大部分顆粒的模具都可以重復(fù)使用。從此,樂(lè)高開(kāi)始一發(fā)不可收拾,產(chǎn)品熱銷(xiāo)全球,而且玩家自發(fā)地組成各種社區(qū)交流經(jīng)驗(yàn),為樂(lè)高的發(fā)展貢獻(xiàn)了無(wú)數(shù)智慧。但隨著電子玩具和游戲的興起,樂(lè)高這種搭建體驗(yàn)式的玩具受到了沖擊,直到有玩家利用單片機(jī)、電動(dòng)馬達(dá)、傳感器和積木搭建出了可編程、可運(yùn)動(dòng)和可遙控的機(jī)器人等作品,樂(lè)高又重新回到市場(chǎng)領(lǐng)導(dǎo)者地位。

之所以講述樂(lè)高的發(fā)展史,是因?yàn)樗?Spring 的成功有著類似的原因,首先提供簡(jiǎn)單、輕量和易用的基礎(chǔ)組件,再提供可編程的裝配能力,對(duì)樂(lè)高來(lái)說(shuō)就是用于銜接積木的標(biāo)準(zhǔn)凹凸卡扣,以及可編程的單片機(jī),對(duì)于 Spring 來(lái)說(shuō)就是通過(guò) XML、Annotation 或 Java 類等配置控制裝配過(guò)程的 IOC,以及標(biāo)準(zhǔn)化裝配輔助功能 AOP。等有了豐富的基礎(chǔ)組件和可編程的裝配能力之后,玩家或用戶就擁有了靈活性,可以天馬行空發(fā)揮聰明才智創(chuàng)造出各類作品了。

相對(duì)于全球玩家或用戶的群體智慧來(lái)說(shuō),單個(gè)公司所能雇傭的人才就非常有限了,Spring 的產(chǎn)品設(shè)計(jì)理念是面向群體智慧開(kāi)放的,它的靈活性激發(fā)了用戶的創(chuàng)造力,同時(shí)它通過(guò)開(kāi)源匯聚了全球群體智慧,構(gòu)建起強(qiáng)大的生態(tài)圈,這就是它能夠成功且長(zhǎng)久不衰的秘密,總結(jié)起來(lái)就是:簡(jiǎn)單(基礎(chǔ)組件)、靈活(可編程)、生態(tài)(開(kāi)放開(kāi)源),這套理論其實(shí)還可以在蘋(píng)果 iPhone 等產(chǎn)品的顛覆性成功上得到驗(yàn)證。

典型的完整 Spring Web 應(yīng)用:

Spring 核心技術(shù)與產(chǎn)品理念剖析【下】

利用第三方 Web 框架的 Spring 中間層應(yīng)用:

Spring 核心技術(shù)與產(chǎn)品理念剖析【下】?

遠(yuǎn)程服務(wù)使用場(chǎng)景:

Spring 核心技術(shù)與產(chǎn)品理念剖析【下】

  • 4.1 Spring 的設(shè)計(jì)哲學(xué)

這是 Spring 官方文檔上闡釋的設(shè)計(jì)哲學(xué),當(dāng)你學(xué)習(xí)一個(gè)開(kāi)發(fā)框架時(shí),除了知道它能做什么之外,最重要的是要了解它都遵循哪些原則,下面這些就是 Spring 這套開(kāi)發(fā)框架所遵循的指導(dǎo)原則:

  • 提供不同層次的選擇。Spring 可以幫助你將設(shè)計(jì)決策盡可能地延后,例如:你可以通過(guò)修改配置而不是代碼來(lái)替換持久化存儲(chǔ)提供者。這條準(zhǔn)則對(duì)于許多基礎(chǔ)設(shè)施的關(guān)注點(diǎn)或集成第三方 APIs 同樣適用。

  • 容納多元化的觀點(diǎn)。Spring 擁抱靈活性,它并不固執(zhí)己見(jiàn)地要求事情應(yīng)該怎樣做,它從不同維度滿足應(yīng)用開(kāi)發(fā)各種類型、廣泛的需求。

  • 保持強(qiáng)大的向后兼容。Spring 的版本升級(jí)會(huì)盡量避免破壞性變化,它會(huì)精心選擇所支持的 JDK 和第三方庫(kù)的版本,方便依賴于Spring的應(yīng)用和庫(kù)的維護(hù)。

  • 關(guān)注 API 的設(shè)計(jì)。設(shè)計(jì)更能反映業(yè)務(wù)本質(zhì)且能夠在多個(gè)版本和許多年里都保持不變的 APIs,Spring 團(tuán)隊(duì)在這件事情上投入了很多思考和時(shí)間。

  • 為代碼質(zhì)量設(shè)置更高的標(biāo)準(zhǔn)。Spring 框架非常注重有意義、及時(shí)更新和準(zhǔn)確的 Javadoc,它是極少數(shù)能夠宣稱代碼結(jié)構(gòu)整潔、包之間沒(méi)有循環(huán)依賴關(guān)系的項(xiàng)目之一。

?

  • 5. Spring 的產(chǎn)品推廣策略

在單體式應(yīng)用時(shí)代,老兵哥所在公司也有內(nèi)部開(kāi)發(fā)框架,以 Spring 為基礎(chǔ)做了封裝隔離,相當(dāng)于在 Spring 外面包了一層,之所以采用這種方式主要有兩個(gè)原因:其一,通過(guò)封裝來(lái)適配公司內(nèi)部技術(shù)平臺(tái)和擴(kuò)展定制特定功能;其二,Spring 是開(kāi)源產(chǎn)品,它的發(fā)展存在許多變數(shù),為了避免它的變化對(duì)應(yīng)用產(chǎn)生不好的影響,我們需要隔離防護(hù)層。

但現(xiàn)在到了云計(jì)算時(shí)代,我們不再采用這種方式了,Spring 已經(jīng)發(fā)展了近十五年,開(kāi)源機(jī)制允許全球開(kāi)發(fā)者參與其中,這些年已經(jīng)證明它是足夠開(kāi)放的,而且它已經(jīng)成了行業(yè)事實(shí)標(biāo)準(zhǔn)。我們的框架除了供內(nèi)部用戶使用之外,后續(xù)還要作為云產(chǎn)品面向外部用戶,所以必須要跟 Spring Cloud 保持兼容,這樣才能借助 Spring 已有的勢(shì),否則就成了競(jìng)爭(zhēng)對(duì)手,就像阿里近來(lái)推出了 Spring Cloud for Alibaba。?

  • 產(chǎn)品積木式標(biāo)準(zhǔn)化,從 3.x 開(kāi)始 Spring 從原先整體式的產(chǎn)品演化為多個(gè)組件。剛開(kāi)始我們的第一印象會(huì)認(rèn)為 Spring 是重量級(jí)的全家桶式解決方案,但實(shí)際上它并不是全選或全不選的解決方案,用戶可以只選擇其中某幾個(gè)組件來(lái)構(gòu)建應(yīng)用。

  • 解決方案套餐化,就像肯德基、麥當(dāng)勞和真功夫等快餐連鎖企業(yè)一樣,隨著產(chǎn)品不斷標(biāo)準(zhǔn)和豐富,套餐化是更好滿足用戶需求的必然選擇。全套推廣難度太大,按需組裝,針對(duì)不同的用戶場(chǎng)景提供個(gè)性化解決方案,降低用戶上車(chē)難度,先讓用戶用上,建立連接,方便后續(xù)進(jìn)一步轉(zhuǎn)化。不挑用戶,而是想辦法解決不同用戶的問(wèn)題。這樣更加符合用戶視角,因?yàn)橛脩魧?duì)大而全的解決方案沒(méi)有直觀感受,他們只關(guān)心產(chǎn)品能否解決目前最急迫的問(wèn)題。

  • 高頻特性帶動(dòng)低頻特性,某些產(chǎn)品特性或組件通用性更強(qiáng),它們被用戶使用的頻次越高,那么這些特性或組件應(yīng)該保持較低的利潤(rùn)率,或者免費(fèi),借助它們擴(kuò)大用戶群體規(guī)模,從而有機(jī)會(huì)宣傳推廣那些低頻高潤(rùn)的特性或組件。這其實(shí)就是互聯(lián)網(wǎng)思維,通過(guò)免費(fèi)策略來(lái)做大用戶量,然后再深耕用戶,所以說(shuō)免費(fèi)其實(shí)是最貴的價(jià)格。

  • 通過(guò)標(biāo)準(zhǔn)化、套餐化就可以讓每個(gè)子產(chǎn)品獨(dú)立研發(fā)和運(yùn)營(yíng),包干到戶,激發(fā)創(chuàng)造力和動(dòng)力。兵分多路,多點(diǎn)突破,每套解決方案可以單獨(dú)推廣,彼此共享用戶。同時(shí),Spring 規(guī)范了定制擴(kuò)展機(jī)制,團(tuán)結(jié)了所有可以團(tuán)結(jié)的力量,構(gòu)建了一個(gè)生態(tài)聯(lián)盟。我們說(shuō)架構(gòu)設(shè)計(jì)就是設(shè)計(jì)合作機(jī)制,Spring 優(yōu)良的架構(gòu)設(shè)計(jì)非常有助于合作,從而能夠突破重圍。開(kāi)放源代碼,擁抱開(kāi)源趨勢(shì),消除了客戶對(duì)被技術(shù)鎖定的擔(dān)憂。

?

  • 6. 總結(jié)

本文主要是對(duì) Spring 的核心技術(shù)和產(chǎn)品理念做了梳理,可以作為學(xué)習(xí) Spring 的索引參考,最好的學(xué)習(xí)資料就是官方的幫助文檔。這些知識(shí)點(diǎn)對(duì)于深入掌握 Spring 是非常有必要的,平時(shí)工作中老兵哥經(jīng)常要幫同事分析定位技術(shù)問(wèn)題,在它們的幫助下分析定位問(wèn)題會(huì)更加游刃有余。同時(shí),產(chǎn)品設(shè)計(jì)理念和運(yùn)營(yíng)策略對(duì)于老兵哥推廣微服務(wù)框架也非常有借鑒意義,如何從零開(kāi)始去推廣一套應(yīng)用開(kāi)發(fā)框架,讀者朋友們也可以考慮將這些策略運(yùn)用在其他產(chǎn)品上。考慮到我們每個(gè)人的工作學(xué)習(xí)情況不同,平時(shí)遇到的問(wèn)題也不同,本文內(nèi)容無(wú)法覆蓋所有人遇到的問(wèn)題,歡迎大家留言提問(wèn),也歡迎關(guān)注「?IT老兵哥?」交流互動(dòng),謝謝!

本系列其他文章索引如下:Spring 核心技術(shù)與產(chǎn)品理念剖析(上)


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI