Spring 核心技術與產品理念剖析【下】

  • 3. Spring Cloud 蝶變重生編程

Spring 框架的升級演進都是圍繞分層架構進行的,從簡單到複雜,再回到簡單的過程。若是咱們沒有經歷過 Spring 最開始繁瑣的配置,而後一步步精簡,就根本體會不到爲何會有 Spring Boot。俗話說,亂世造英雄。在新舊時代交替階段,原來統治世界的舊秩序正在慢慢失效,而新秩序還沒有成型,那些創建或者依賴舊秩序的巨頭會被慣性推着往前走,他們習慣性地用舊思惟或眼光看待世界,因此他們沒法正確地理解新時代,這也就是誕生新巨頭的機會。隨着手機等各類智能終端的普及,本來最大的開發領域從企業應用變成了互聯網應用,而這也引起了計算、存儲等需求的暴漲,雲計算隨即呼之而出。基礎架構從傳統演進到了雲計算,與傳統基礎架構匹配的應用架構是單體式分層架構,而與雲計算匹配的應用架構是什麼樣的呢?大時代須要遠見,不然容易懵圈。服務器

記得2013~2016這幾年時間裏,應用開發技術棧出現過一陣混亂,老兵哥所在公司本來有套統一的內部開發框架,就是對 Spring 進行封裝、定製和擴展,適配公司內部的基礎平臺和通用組件,知足內部各類企業應用的開發需求。企業應用都是服務於內部辦公無紙化、自動化的,用戶規模和併發訪問量都是能夠預估的,單體式分層架構就足夠了。但隨着互聯網的發展,愈來愈多的業務開始上線,包括營銷、客服等,互聯網用戶量不斷增加,併發訪問量波峯波谷的差值也愈來愈大,單體式分層架構顯然沒法知足業務發展要求了。架構

當時在互聯網領域走得比較靠前的企業,開始在業務驅動下摸着石頭過河了,那時候就出現了面向服務架構 SOA 和Web Service,Spring 最最擅長的領域就是企業應用開發,但對如何知足互聯網應用的需求也有些摸不許方向,業界也開始出現許多新物種,其中最火爆的就是阿里的 Dubbo,曾經有種說法是 Dubbo 要代替 Spring。Web Service 就像當年的 EJB,過於複雜臃腫,但在沒有更好選擇的狀況下,許多企業都採用了 Web Service。直到 RESTful 等新架構技術出現,以及 Netflix 探索出了微服務架構,業界才找到了應對互聯網化的法寶。併發

Pivotal,Spring 的東家,在 Netflix 探索微服務架構時期,它正好在爲 Netflix 提供諮詢服務。當微服務架構被驗證可行以後,Spring 就順勢將 Netflix 微服務全家桶 Netflix OSS 歸入到 Spring Cloud 當中,組件包括:Eureka、Zuul、Ribbon、Hystrix、Archaius 等。憑藉這套解決方案在技術上的先進性和成熟度,以及原先遍及全球的無數粉絲用戶,Spring 在雲計算時代從新回到了 Java 應用開發框架的頭把交椅上。Spring Boot 下降了單個應用的開發難度,Spring Cloud 下降了分佈式系統的開發難度,強強聯合,所向披靡。框架

隨着 Spring Cloud 的地位愈來愈穩固,它的生態也開始發生了些變化,首先 Netflix 宣佈 Eureka 閉源,後來 Netflix 宣佈 Hystrix 中止新功能開發。同時,Spring Cloud 也從依賴生態夥伴提供關鍵組件,演變到自研適配關鍵組件,例如:Spring Cloud Gateway、Spring Cloud Config、Spring Cloud LoadBalance 等。分佈式

J2EE 在應用開發當中所扮演的角色也在不斷演進,最初 J2EE、Spring 相關的應用會被部署至應用服務器,而現現在在 Spring Boot 的支持下,應用程序能夠採用 DevOps、雲原生的開發模式,Servlet 容器被內嵌在發佈物當中。在 Spring 5.x 以後,採用 WebFlux 的應用能夠不依賴任何 Servlet API,也能夠部署在非 Servlet 容器的服務器當中,例如:Netty 等。Spring 還在不斷創新和演進,除了 Spring Framework 以外,它還包含許多子工程:Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。至此,Spring Cloud 成功蝶變了。ide

  • 4. Spring 的產品設計理念微服務

Spring 的發展狀態不是一蹴而就的,先從點到線,再從線到面。最初僅實現了 IoC、AOP 等核心特性,支持單體式分層架構,再到 Spring Cloud 標準化不一樣系統之間的交互方式,同時不斷構築起豐富強大的生態圈。Spring 的成功不光是技術層面的,更主要是產品設計理念層面的,技術上的領先很容易被模仿抄襲,而理念差距卻很難跨越。學習

樂高(LEGO),來自童話王國丹麥的玩具品牌,歷經80多年的發展成爲世界玩具市場的領導品牌,並以強大的實力躋身世界500強(第96位)。它旗下的產品以其獨特的組合結構而風靡全球,獲得了不可勝數的孩子們甚至成年人的熱愛與收藏。這家公司如今的產品是幾種基本形狀的塑料顆粒,最初它從製造木質玩具開始的,後來轉而生產塑料玩具,但玩具市場跟服裝市場相似,每一年都有不一樣的流行款式,樂高也作不到每一年都準確預測玩具流行趨勢,生意不慍不火。雲計算

後來企業傳到了創始人的兒子手上,一個偶然的機會有個玩具經銷商建議他生產可拼裝玩具,這樣玩家就能夠拼裝各式各樣的玩具,樂高也就永遠不會過期了,大部分顆粒的模具均可以重複使用。今後,樂高開始一發不可收拾,產品熱銷全球,並且玩家自發地組成各類社區交流經驗,爲樂高的發展貢獻了無數智慧。但隨着電子玩具和遊戲的興起,樂高這種搭建體驗式的玩具受到了衝擊,直到有玩家利用單片機、電動馬達、傳感器和積木搭建出了可編程、可運動和可遙控的機器人等做品,樂高又從新回到市場領導者地位。

之因此講述樂高的發展史,是由於它跟 Spring 的成功有着相似的緣由,首先提供簡單、輕量和易用的基礎組件,再提供可編程的裝配能力,對樂高來講就是用於銜接積木的標準凹凸卡扣,以及可編程的單片機,對於 Spring 來講就是經過 XML、Annotation 或 Java 類等配置控制裝配過程的 IOC,以及標準化裝配輔助功能 AOP。等有了豐富的基礎組件和可編程的裝配能力以後,玩家或用戶就擁有了靈活性,能夠天馬行空發揮聰明才智創造出各種做品了。

相對於全球玩家或用戶的羣體智慧來講,單個公司所能僱傭的人才就很是有限了,Spring 的產品設計理念是面向羣體智慧開放的,它的靈活性激發了用戶的創造力,同時它經過開源匯聚了全球羣體智慧,構建起強大的生態圈,這就是它可以成功且長久不衰的祕密,總結起來就是:簡單(基礎組件)、靈活(可編程)、生態(開放開源),這套理論其實還能夠在蘋果 iPhone 等產品的顛覆性成功上獲得驗證。

典型的完整 Spring Web 應用:

利用第三方 Web 框架的 Spring 中間層應用:

 

遠程服務使用場景:

  • 4.1 Spring 的設計哲學

這是 Spring 官方文檔上闡釋的設計哲學,當你學習一個開發框架時,除了知道它能作什麼以外,最重要的是要了解它都遵循哪些原則,下面這些就是 Spring 這套開發框架所遵循的指導原則:

  • 提供不一樣層次的選擇。Spring 能夠幫助你將設計決策儘量地延後,例如:你能夠經過修改配置而不是代碼來替換持久化存儲提供者。這條準則對於許多基礎設施的關注點或集成第三方 APIs 一樣適用。

  • 容納多元化的觀點。Spring 擁抱靈活性,它並不執拗己見地要求事情應該怎樣作,它從不一樣維度知足應用開發各類類型、普遍的需求。

  • 保持強大的向後兼容。Spring 的版本升級會盡可能避免破壞性變化,它會精心選擇所支持的 JDK 和第三方庫的版本,方便依賴於Spring的應用和庫的維護。

  • 關注 API 的設計。設計更能反映業務本質且可以在多個版本和許多年裏都保持不變的 APIs,Spring 團隊在這件事情上投入了不少思考和時間。

  • 爲代碼質量設置更高的標準。Spring 框架很是注重有意義、及時更新和準確的 Javadoc,它是極少數可以宣稱代碼結構整潔、包之間沒有循環依賴關係的項目之一。

 

  • 5. Spring 的產品推廣策略

在單體式應用時代,老兵哥所在公司也有內部開發框架,以 Spring 爲基礎作了封裝隔離,至關於在 Spring 外面包了一層,之因此採用這種方式主要有兩個緣由:其一,經過封裝來適配公司內部技術平臺和擴展定製特定功能;其二,Spring 是開源產品,它的發展存在許多變數,爲了不它的變化對應用產生很差的影響,咱們須要隔離防禦層。

但如今到了雲計算時代,咱們再也不採用這種方式了,Spring 已經發展了近十五年,開源機制容許全球開發者參與其中,這些年已經證實它是足夠開放的,並且它已經成了行業事實標準。咱們的框架除了供內部用戶使用以外,後續還要做爲雲產品面向外部用戶,因此必需要跟 Spring Cloud 保持兼容,這樣才能藉助 Spring 已有的勢,不然就成了競爭對手,就像阿里近來推出了 Spring Cloud for Alibaba。 

  • 產品積木式標準化,從 3.x 開始 Spring 從原先總體式的產品演化爲多個組件。剛開始咱們的第一印象會認爲 Spring 是重量級的全家桶式解決方案,但實際上它並非全選或全不選的解決方案,用戶能夠只選擇其中某幾個組件來構建應用。

  • 解決方案套餐化,就像肯德基、麥當勞和真功夫等快餐連鎖企業同樣,隨着產品不斷標準和豐富,套餐化是更好知足用戶需求的必然選擇。全套推廣難度太大,按需組裝,針對不一樣的用戶場景提供個性化解決方案,下降用戶上車難度,先讓用戶用上,創建鏈接,方便後續進一步轉化。不挑用戶,而是想辦法解決不一樣用戶的問題。這樣更加符合用戶視角,由於用戶對大而全的解決方案沒有直觀感覺,他們只關心產品可否解決目前最急迫的問題。

  • 高頻特性帶動低頻特性,某些產品特性或組件通用性更強,它們被用戶使用的頻次越高,那麼這些特性或組件應該保持較低的利潤率,或者免費,藉助它們擴大用戶羣體規模,從而有機會宣傳推廣那些低頻高潤的特性或組件。這其實就是互聯網思惟,經過免費策略來作大用戶量,而後再深耕用戶,因此說免費實際上是最貴的價格。

  • 經過標準化、套餐化就可讓每一個子產品獨立研發和運營,包乾到戶,激發創造力和動力。兵分多路,多點突破,每套解決方案能夠單獨推廣,彼此共享用戶。同時,Spring 規範了定製擴展機制,團結了全部能夠團結的力量,構建了一個生態聯盟。咱們說架構設計就是設計合做機制,Spring 優良的架構設計很是有助於合做,從而可以突破重圍。開放源代碼,擁抱開源趨勢,消除了客戶對被技術鎖定的擔心。

 

  • 6. 總結

本文主要是對 Spring 的核心技術和產品理念作了梳理,能夠做爲學習 Spring 的索引參考,最好的學習資料就是官方的幫助文檔。這些知識點對於深刻掌握 Spring 是很是有必要的,平時工做中老兵哥常常要幫同事分析定位技術問題,在它們的幫助下分析定位問題會更加遊刃有餘。同時,產品設計理念和運營策略對於老兵哥推廣微服務框架也很是有借鑑意義,如何從零開始去推廣一套應用開發框架,讀者朋友們也能夠考慮將這些策略運用在其餘產品上。考慮到咱們每一個人的工做學習狀況不一樣,平時遇到的問題也不一樣,本文內容沒法覆蓋全部人遇到的問題,歡迎你們留言提問,也歡迎關注「 IT老兵哥 」交流互動,謝謝!

本系列其餘文章索引以下:Spring 核心技術與產品理念剖析(上)

相關文章
相關標籤/搜索