1. 程式人生 > >Spring Cloud與微服務

Spring Cloud與微服務

微服務架構

  目前,微服務是非常火的架構或者說概念,也是在構建大型網際網路專案時常採用的架構方式。

單體架構

  單體架構,是指將開發好的專案打成war包,然後釋出到tomcat等容器中的應用。

單體架構所存在的問題

  • 複雜性高

  整個專案包含的模組非常多、模組的邊界模糊、依賴關係不清晰、程式碼質量參差不齊、混亂地堆砌在一起使得整個專案非常複雜。每次修改程式碼都心驚膽戰,甚至新增一個簡單的功能,或者修改一個Bug都會帶來隱含的缺陷。

  • 技術債務

  隨著時間推移、需求變更和人員更迭,會逐漸形成應用程式的技術債務,並且越積越多。“不壞不修”,這在軟體開發中非常常見,在單體應用中這種思想更甚。已經使用的系統設計或程式碼難以被修改,因為應用程式中的其他模組可能會以意料之外的方式使用它。

  • 部署頻率低

  隨著程式碼的增多,構建和部署的時間也會增加。而在單體應用中,每次功能的變更或缺陷的修復都會導致需要重新部署整個應用。全部部署的方式耗時長、影響範圍大、風險高,這使得單體應用專案上線部署的頻率較低。而部署頻率低又導致兩次釋出之間會有大量的功能變更和缺陷修復,出錯概率比較高。

  • 可靠性差

  某個應用Bug,例如死迴圈、OOM等,可能會導致整個應用的崩潰。

  • 擴充套件能力受限

  單體應用只能作為一個整體進行擴充套件,無法根據業務模組的需要進行伸縮。例如,應用中有的模組是計算密集型的,它需要強勁的CPU;有的模組則是IO密集型的,需要更大的記憶體。由於這些模組部署在一起,不得不在硬體的選擇上作出妥協。

  • 阻礙技術創新

  單體應用往往使用統一的技術憑條或方案解決所有問題,團隊中的每個成員都必須使用相同的開發語言和框架,想要引入新框架或新技術平臺會非常困難。

而上面這些問題的解決辦法就是使用微服務架構。

什麼是微服務

  就目前來看,微服務本身並沒有一個嚴格的定義,每個人對微服務的理解都不同。MartinFowler在他的部落格中是這樣描述微服務的。

  微服務架構風格是一種將一個單一應用程式開發為一組小型服務的方法,每個服務執行在自己的程序中,服務間通訊採用輕量級通訊機制(通常用HTTP資源API)。這些服務圍繞業務能力構建並且可通過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發,使用不同的資料儲存技術。

微服務架構特徵

  • 每個服務可以執行在自己的程序裡。
  • 一系列獨立執行的微服務共同構建起整個系統。
  • 每個服務為獨立的業務開發,一個微服務只關注某個特定功能,例如訂單管理、使用者管理等。
  • 微服務之間通過一些輕量級的通訊機制進行通訊,例如通過RESTFul API進行呼叫。
  • 可以使用不同的語言與資料儲存技術。
  • 全自動的部署機制。

SpringCloud簡介

  Spring Cloud是一個基於Spring Boot實現的微服務架構開發工具。它為微服務架構中涉及的配置管理、服務管理、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。

SpringCloud

  SpringCloud本身並不是一個專案,而是由眾多的子專案組成的,可以說非常多。

  • spring-cloud-config

  SpringCloud微服務配置管理工具,支援使用git、svn等儲存配置檔案,並在支援客戶端配置資訊的重新整理,加密解密配置內容等。

  • spring-cloud-netflix

  SpringCloud微服務核心元件,對多個NetFlix OSS開源套件進行整合。

版本說明

  大多數Spring專案都是以主版本號.次版本號.增量版本號.里程版本號的形式命名版本號的,例如Spring Framework穩定版本4.3.5.RELEASE、里程版本5.0.0.M4等。其中,主版本號表示專案的重大重構;次版本號表示新特性的新增和變化;增量版本號一般表示Bug修復;里程碑版本號表示某版本號的里程碑。

  然而,Spring Cloud並未使用這種方式管理版本。下面來詳細探討一下Spring Cloud的版本。

  Spring Cloud中有些版本的名字採用倫敦地鐵站的名字,根據字母表的順序來對應版本時間順序,比如最早的Release版本為Angel,第二個Release版本為Brixton…。

  經過上面的解釋,不難猜出,之前所提到的Angel.SR6Brixton.SR5中的SR6SR5就是版本號了。

  當一個版本的Spring Cloud專案釋出內容積累到臨界點或者一個嚴重bug解決可用後,就會發佈一個Service Releases版本,簡稱SRX版本,其中X是一個遞增的數字,所以Brixton.SR5就是Brixton的第5個Release版本。

Spring Cloud框架特點

  • 約定優於配置。
  • 適用於各種環境。開發、部署在PC Server或各種雲環境(如阿里雲、AWS等)均可。
  • 隱藏了元件的複雜性,並提供宣告式、無xml的配置方式。
  • 開箱即用,快速啟動。
  • 輕量級的元件。Spring Cloud整合的元件大多比較輕量。例如Eureka、Zuul,等等。都是各自領域輕量級的實現。
  • 元件豐富,功能齊全。Spring Cloud為微服務架構提供了非常完整的支援。例如,配置管理、服務發現、斷路器、微服務網管等。
  • 選型中立、豐富。例如,Spring Cloud支援使用Eureka、ZooKeeper或Consul實現服務發現。
  • 靈活。Spring Cloud的組成部分是解耦的,開發人員可按需靈活挑選技術選型。