我們為什麼要使用Spring Cloud?
Spring Cloud是一個集成了眾多開源的框架,利用Spring Boot的開發便利性實現了服務治理、服務註冊與發現、負載均衡、資料監控,REST API釋出方式等,基本囊括了分散式框架所需要的所有功能。是一套易開放、易部署、易維護的分散式開發工具包。在詳細的瞭解Spring Cloud中所使用的各個元件之前,我們先了解下微服務框架的前世今生。
- 1
單體架構 在網站開發的前期,專案面臨的流量相對較少,單一應用可以實現我們所需要的功能,從而減少開發、部署和維護的難度。這種用於簡單的增刪改查的資料訪問框架(ORM)十分的重要。 垂直應用架構 當用戶訪問量不斷的提升,單一應用需要不斷的增加伺服器來應對,同時將單一的應用拆分成多個應用用來處理提升效率。這種用於加速Web前端載入的Web框架(MVC)
在這一階段我們最常使用到的開發框架就是Spring(業務邏輯層管理POJO)+Struts(web層前置服務控制)+Hibernate(資料庫層持久化)。
- 1
服務化架構 伴隨著企業服務量的不斷提升,MVC框架的部署導致系統的負重越來越多,無法滿足併發的要求,系統間資料、報文的傳輸會出現頻繁的丟失。這時候我們需要考慮服務化的架構(SOA)。SOA表示面向服務的架構。將應用根據不同的職責劃分成不同的模組(類似於企業劃分不同的事業部),不同的模組使用特定的呼叫協議(RPC)和介面進行互動。 這樣使整個系統切分成很多單個元件服務來完成請求,當流量過大時通過水平擴充套件相應的元件來支撐,所有的元件通過互動來滿足整體的業務需求。 SOA服務化的優點
Spring Cloud體系中支援API Gateway落地的技術就是Zuul。Spring Cloud Zuul路由是微服務架構中不可或缺的一部分,提供動態路由,監控,彈性,安全等的邊緣服務。 Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。 它的具體作用就是服務轉發,接收並轉發所有內外部的客戶端呼叫。使用Zuul可以作為資源的統一訪問入口,同時也可以在閘道器做一些許可權校驗等類似的功能。 鏈路跟蹤 隨著服務的越來越多,對呼叫鏈的分析會越來越複雜,如服務之間的呼叫關係、某個請求對應的呼叫鏈、呼叫之間消費的時間等,對這些資訊進行監控就成為一個問題。 在實際的使用中我們需要監控服務和服務之間通訊的各項指標,這些資料將是我們改進系統架構的主要依據。 因此分散式的鏈路跟蹤就變的非常重要,Spring Cloud 也給出了具體的解決方案:Spring Cloud Sleuth 和 Zipkin。
Spring Cloud Sleuth為服務之間呼叫提供鏈路追蹤。通過Sleuth可以很清楚的瞭解到一個服務請求經過了哪些服務,每個服務處理花費了多長時間。從而讓我們可以很方便的理清各微服務間的呼叫關係。 Zipkin是Twitter的一個開源專案,允許開發者收集 Twitter 各個服務上的監控資料,並提供查詢介面。 總結 我們從整體上來看一下Spring Cloud各個元件如何來配套使用:
從上圖可以看出Spring Cloud各個元件相互配合,合作支援了一套完整的微服務架構。 其中Eureka負責服務的註冊與發現,很好將各服務連線起來 Hystrix 負責監控服務之間的呼叫情況,連續多次失敗進行熔斷保護。 Hystrix dashboard,Turbine 負責監控 Hystrix的熔斷情況,並給予圖形化的展示 Spring Cloud Config 提供了統一的配置中心服務 當配置檔案發生變化的時候,Spring Cloud Bus 負責通知各服務去獲取最新的配置資訊 所有對外的請求和服務,我們都通過Zuul來進行轉發,起到API閘道器的作用 最後我們使用Sleuth+Zipkin將所有的請求資料記錄下來,方便我們進行後續分析 Spring Cloud從設計之初就考慮了絕大多數網際網路公司架構演化所需的功能,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等。 這些功能都是以插拔的形式提供出來,方便我們系統架構演進的過程中,可以合理的選擇需要的元件進行整合,從而在架構演進的過程中會更加平滑、順利。 微服務架構是一種趨勢,Spring Cloud提供了標準化的、全站式的技術方案,意義可能會堪比當前Servlet規範的誕生,有效推進服務端軟體系統技術水平的進步。