微服務

雲原生時代下微服務架構演進之路 (7)

透過本篇文章您可以瞭解到以下內容:

  • 回顧
  • Spring 歷史簡介
  • 微服務開發利器 Spring Boot & Spring Cloud 宏觀介紹
  • Spring Native 徹底助您開啟雲原生之旅
  • 總結   

回顧

首先讓我們做一個簡單的回顧:

在之前的系列文章中我們依次談到了Event Storming以及Boris和Snap-E。

我們將這三步驟稱之為微服務拆分的三把利器,透過它們我們可以從業務角度順利完成微服務的劃分。

同時我們知道,微服務架構的實現可以大體分為兩部分:

第一部分即是透過從業務角度,專業的工程方法完成微服務的劃分。

第二部分即是透過技術的支援完成微服務架構落地開發的工作。

對於第二部分的內容,一個成熟、高效、開箱即用的微服務開發框架就變得尤為重要,而在Java的世界裡我們就不得不提到應用最為廣泛的Spring。

如上圖所示,關於2021年JVM生態的一份統計報告,從報告中可以清楚的看到 Spring Boot 框架已經成為Java 微服務開發框架的首選,並且相比其它框架而言,具有壓倒性的優勢。

本篇文章是Spring系列的第一篇,首先會從Spring歷史說起,接著會對微服務開發利器Spring Boot以及Spring Cloud進行宏觀上的介紹,最後會談到 Spring黑科技之Spring Native。

Spring 歷史簡介

提到Spring還要從一本書說起,相信大家都聽過,它就是《Expert One-to-One J2EE Design and Development》,這本書是由Rod Johnson撰寫的。 這本書中介紹了當時Java企業級應用程式的開發情況,以及EJB元件框架中存在的一些缺陷。同時提出了基於依賴注入的解決方案。 而這本書中的思想也恰恰是Spring最初的原型。

隨著時間的推移,Spring專案也迎來了幾個比較重要的時間節點,如下圖所示:

  • 2004年3月Spring Framework 1.0 Final Released,也就是1.0的版本正式發佈。
  • 2009年8月負責開發和維護Spring的SpringSource被VMware收購。
  • 2013年4月VMware和EMC創建了Pivotal,Spring項目轉移到了Pivotal,並有Pivotal主導和維護該專案。
  • 2014年4月Spring Boot 1.0 GA Released,成為業界最廣泛使用的Java開發框架。
  • 2015年3月Spring Cloud 1.0.0 Available,提供了開箱即用的微服務架構解決方案。
  • 2019年Pivotal回歸到了VMware,隨之Spring由VMware負責開發、維護和主導。

微服務開發利器 Spring Boot & Spring Cloud

談到Spring Boot相信大家比較熟悉了,透過Spring Boot我們可以快速、輕鬆的創建生產級的、基於Spring的 應用程式。 相比傳統Java技術框架,它具備的優勢如下:

  • 快速建構Spring應用程式。
  • 提供Starter依賴從而簡化應用程式的構建配置。
  • 內嵌Tomcat、Jetty或者Undertow,不需要透過WAR方式進行部署。
  • 不需要編寫XML檔。
  • 面向生產就緒的監控數據 Actuator,如應用運行時狀態的檢查等。
  • 透過集成外掛程式亦或Spring Initializr快速創建專案。

有了Spring Boot我們可以快速的建構單個的應用程式,但是如果需要建構整個微服務架構,單單採用Spring Boot是不夠的,Spring Cloud 的出現就是為了解決微服務架構中的共性問題,採用開箱即用的元件,幫助開發者快速搭建或者解決微服務架構設計中遇到的一些共性問題。 Spring Cloud 用於建構分散式系統中的一些常見模式(服務發現-註冊中心、網關路由、配置管理、熔斷、降級、 限流等)透過簡單的配置完成具體的功能實現,其運行的本質是透過添加對應元件的依賴包方式。

(架構圖)

成為副註冊人

服務發現-註冊中心,提供了Eureka、Zookeeper、Consul等元件可以選擇,同時透過簡單的注解編寫和yaml 配置,可以説明您迅速搭建微服務架構中註冊中心模組。

介面閘道

網關模組,由最開始的Zuul再到如今的Spring Cloud Gateway。提供了開箱即用的閘道解決方案。 包括常見的路由、負載均衡、鑒權等功能。

分散式跟蹤

鏈路追蹤,主要目的是完成整個微服務系統中監控模組,包括微服務之間調用關係、耗時、問題定位等功能。

配置伺服器

統一配置中心,每一個微服務可以理解為一個Config Client。 透過例如Git等方式進行配置的保管,透過Config server完成統一更新。

斷路器

應用級別高可用解決方案,包括熔斷、降級、限流等功能。 開箱即用的使用方式,透過添加對應的依賴,再加上少量的代碼註解以及yaml配置。

HTTP調用

OpenFeign,簡化HTTP調用過程中的代碼量書寫,同時集成了Circuit breaker,可以對本次請求完成熔斷、降級、限流等功能,另外可以使用 URLconnection、Httpclient、OKhttp等方式。

透過Spring Boot來建構每一個微服務,透過Spring Cloud提供開箱即用的元件可以幫助我們解決微服務架構開發中遇到的共性問題。

一方面Spring Boot一直致力於框架本身的性能優化,另一方面是否可以透過新的技術,使得Spring對於應用的啟動速度以及記憶體使用達到極致?  答案是肯定的,它就是Spring Native。

Spring Native 徹底助您開啟雲原生之旅

首先來讓我們看看關於Sping Native的介紹:

英文:

彈簧原生支援使用 GraalVM 原生映像編譯器將 Spring 應用程式編譯為原生可執行檔。

與 Java 虛擬機相比,本機映射可以為許多類型的工作負載提供更便宜、更可持續的託管。這些包括微服務、非常適合容器的功能工作負載和 Kubernetes。

使用本機映像可提供關鍵優勢,例如即時啟動、即時峰值性能和減少記憶體消耗。

中文:

Spring Native可以使得Spring應用程式以GraalVM原生鏡像的方式進行運行。

與Java虛擬機相比,native image可以為許多類型的工作負載提供更經濟、更可持續的託管。 這些包括微服務、非常適合容器的功能工作負載和Kubernetes。

使用native image這種方式具備一些關鍵優勢,如即時啟動、即時峰值性能和減少記憶體消耗。

如果對Spring Native進行總結式的概括,那麼可以理解為以下幾個特點:

  • 更快的啟動、快速響應擴容需求、更快地回應使用者請求
  • 更適合本地雲計算,尤其是無伺服器計算
  • 更少的記憶體需求
  • 節省資源成本
  • 更多應用程式實例

Spring native的出現改變了傳統依託於JVM的這種方式,使得Spring應用藉助於GraalVM這種方式無論是從啟動速度,還是記憶體需要都做到了極致的提升和改進。

總結

回顧全篇內容,整體包括以下內容:

  • 首先在開篇我們瞭解到了Spring的歷史。
  • 其次對微服務開發利器Spring Boot和Spring Cloud進行了宏觀的介紹。
  • 最後對Spring Native進行了宏觀的介紹。

本篇文章是從宏觀的角度對Spring做了一個整體的介紹,並沒有一一進行深入介紹,在後續系列文章中會分門別類的對Spring Boot、Spring Cloud以及Spring Native進行專門深入的講解 。 敬請期待!

參考連結:

  1. https://spring.io/
  2. https://github.com/spring-projects-experimental/spring-native

作者簡介

李剛,VMware 大中華區應用現代化部門高級系統架構師,資深企業級軟體開發和軟體系統架構師。 Spring Cloud開源社區項目貢獻者、Netflix開源社區貢獻者。 近幾年,參與並主導了許多大型企業客戶的應用現代化數位轉型專案,涉及物流、製造、金融等諸多領域。 特別對微服務實現方法、現代化應用架構設計、雲原生實施落地、開源軟體技術等方面有著豐富經驗。

评论

发表评论

电子邮件地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.