漫談微服務架構:什麼是Spring Cloud,為何要選擇Spring Cloud

来源:https://www.cnblogs.com/lfs2640666960/archive/2019/06/30/11110087.html
-Advertisement-
Play Games

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


 

   

Spring Cloud是基於Spring Boot的,因此還在使用SpringMVC的同學要先瞭解Spring Boot。先上一段官話,Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制匯流排、全局鎖、決策競選、分散式會話和集群狀態管理等操作提供了一種簡單的開發框架。

Spring Cloud並沒有重覆製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包。

 

Spring Cloud全家桶

上面的圖是Spring Cloud的全家桶,包羅萬象,猶如水電,涉及到開發的方方頁面。

Spring Cloud從設計之初就考慮了絕大多數互聯網公司架構演化所需的功能,如服務發現註冊、配置中心、消息匯流排、負載均衡、斷路器、數據監控等。

首先是核心服務治理的組件(服務註冊與發現)Spring Cloud Eureka

Eureka是Netflix開源的一款提供服務註冊和發現的產品,Eureka就是一個服務中心,將所有的可以提供的服務都註冊到它這裡來管理,其它各調用者需要的時候去註冊中心獲取,然後再進行調用,避免了服務之間的直接調用,方便後續的水平擴展、故障轉移等。如下圖:

 

 

當然服務中心這麼重要的組件一但掛掉將會影響全部服務,因此需要搭建Eureka集群來保持高可用性,生產中建議最少兩台。隨著系統的流量不斷增加,需要根據情況來擴展某個服務,Eureka內部已經提供均衡負載的功能,只需要增加相應的服務端實例既可。那麼在系統的運行期間某個實例掛了怎麼辦?Eureka內容有一個心跳檢測機制,如果某個實例在規定的時間內沒有進行通訊則會自動被剔除掉,避免了某個實例掛掉而影響服務。

因此使用了Eureka就自動具有了註冊中心、負載均衡、故障轉移的功能。

當然還有另外一個實現組件Spring Cloud Consul,這裡不做多介紹。

隨著微服務不斷的增多,每個微服務都有自己對應的配置文件。在研發過程中有測試環境、UAT環境、生產環境,因此每個微服務又對應至少三個不同環境的配置文件。這麼多的配置文件,如果需要修改某個公共服務的配置信息,如:緩存、資料庫等,難免會產生混亂,這個時候就需要引入Spring Cloud另外一個組件:Spring Cloud Config。

Spring Cloud Config

Spring Cloud Config是一個解決分散式系統的配置管理方案。它包含了Client和Server兩個部分,其實就是Server端將所有的配置文件服務化,需要配置文件的服務實例去Config Server獲取對應的數據。將所有的配置文件統一整理,避免了配置文件碎片化。

如果服務運行期間改變配置文件,服務是不會得到最新的配置信息,需要解決這個問題就需要引入Refresh。可以在服務的運行期間重新載入配置文件,當所有的配置文件都存儲在配置中心的時候,配置中心就成為了一個非常重要的組件。如果配置中心出現問題將會導致災難性的後果,因此在生產中建議對配置中心做集群,來支持配置中心高可用性。

Hystrix

在微服務架構中通常會有多個服務層調用,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為服務雪崩效應。

如下圖所示:A作為服務提供者,B為A的服務消費者,C和D是B的服務消費者。A不可用引起了B的不可用,並將不可用像滾雪球一樣放大到C和D時,雪崩效應就形成了。

 

 

在這種情況下就需要整個服務機構具有故障隔離的功能,避免某一個服務掛掉影響全局。在Spring Cloud 中Hystrix組件就扮演這個角色。

Hystrix會在某個服務連續調用N次不響應的情況下,立即通知調用端調用失敗,避免調用端持續等待而影響了整體服務。Hystrix間隔時間會再次檢查此服務,如果服務恢復將繼續提供服務。

Hystrix Dashboard和Turbine

當熔斷發生的時候需要迅速的響應來解決問題,避免故障進一步擴散,那麼對熔斷的監控就變得非常重要。熔斷的監控現在有兩款工具:Hystrix-dashboard和Turbine。

Hystrix-dashboard是一款針對Hystrix進行實時監控的工具,通過Hystrix Dashboard我們可以直觀地看到各Hystrix Command的請求響應時間, 請求成功率等數據。但是只使用Hystrix Dashboard的話, 你只能看到單個應用內的服務信息, 這明顯不夠. 我們需要一個工具能讓我們彙總系統內多個服務的數據並顯示到Hystrix Dashboard上, 這個工具就是Turbine. 監控的效果圖如下:

 

 

Spring Cloud Bus消息匯流排

Refresh方案雖然可以解決單個微服務運行期間重載配置信息的問題,但是在真正的實踐生產中,可能會有N多的服務需要更新配置,如果每次依靠手動Refresh將是一個巨大的工作量,這時候Spring Cloud提出了另外一個解決方案:Spring Cloud Bus

Spring Cloud Bus通過輕量消息代理連接各個分佈的節點。這會用在廣播狀態的變化(例如配置變化)或者其它的消息指令中。Spring Cloud Bus的一個核心思想是通過分散式的啟動器對Spring Boot應用進行擴展,也可以用來建立一個或多個應用之間的通信頻道。目前唯一實現的方式是用AMQP消息代理作為通道。

Spring Cloud Bus是輕量級的通訊組件,也可以用在其它類似的場景中。有了Spring Cloud Bus之後,當我們改變配置文件提交到版本庫中時,會自動的觸發對應實例的Refresh,具體的工作流程如下:

 

 

服務網關

在微服務架構模式下,後端服務的實例數一般是動態的,對於客戶端而言很難發現動態改變的服務實例的訪問地址信息。因此在基於微服務的項目中為了簡化前端的調用邏輯,通常會引入API Gateway作為輕量級網關,同時API Gateway中也會實現相關的認證邏輯從而簡化內部服務之間相互調用的複雜度。 

 

 

Spring Cloud體系中支持API Gateway落地的技術就是Zuul。Spring Cloud Zuul路由是微服務架構中不可或缺的一部分,提供動態路由,監控,彈性,安全等的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。它的具體作用就是服務轉發,接收並轉發所有內外部的客戶端調用。使用Zuul可以作為資源的統一訪問入口,同時也可以在網關做一些許可權校驗等類似的功能。

鏈路跟蹤

隨著服務的越來越多,對調用鏈的分析會越來越複雜,如服務之間的調用關係、某個請求對應的調用鏈、調用之間消費的時間等,對這些信息進行監控就成為一個問題。在實際的使用中我們需要監控服務和服務之間通訊的各項指標,這些數據將是我們改進系統架構的主要依據。因此分散式的鏈路跟蹤就變的非常重要,Spring Cloud也給出了具體的解決方案:Spring Cloud Sleuth和Zipkin

 

 

Spring Cloud Sleuth為服務之間調用提供鏈路追蹤。通過Sleuth可以很清楚的瞭解到一個服務請求經過了哪些服務,每個服務處理花費了多長時間。從而讓我們可以很方便的理清各微服務間的調用關係。分散式鏈路跟蹤需要Sleuth+Zipkin結合來實現,當然實現鏈路追蹤的還有三方開源方案,如果zipkin實現的功能非常簡單,圖形化能力也不強,所以可以試試其它的方案,如pinpoint較成熟的框架等。說到這裡順便給大家推薦一個架構學習交流圈。交流學習企鵝圈號:519752913 裡面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分散式、微服務架構的原理,JVM性能優化、分散式架構等這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

Feign

聲明式遠程調度組件。

Ribbon

負載均衡組件

Spring Cloud Data Flow

大數據操作組件,它是Spring XD的替代品,也是一個混合計算模型,可以通過命令行的方式操作數據流

Spring Cloud Task

組件基於Spring Tsak,提供任務調度和任務管理的功能

以上只介紹經常用到非常重要的內容,一般的技術棧為 SpringCloud +GitLab+Jinkins進行普通服務的開發持續集成部署CI,後面可升級用SpingCloud +GitLab+Jinkins+Docker容器化佈署,進一步升級到用 SpingCloud +GitLab+Jinkins+Docker+k8s自動化容器編排內容,這裡的難度等級就完全不一樣了,而且每一個組件都涉及到很多內容,傳統業務如何進行微服務的拆分下次再進行討論。 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 相信不少朋友閑的時候就會使用金山打字通進行打字練習,昨天突發奇想,如何在打字過程中,也屬性前端的關鍵字,所有就收集到了一些前端的關鍵字。我知道現在的編輯器都有提示功能,但是,也不能過分的依賴編輯器。 除空格外,共1347個字元,建議分成兩個部分進行練習: www url http W3C html ...
  • 做前端設計時,通常需要控制字元顯示的寬度或者行數,多餘字元通常以“...”替代;本文分兩點情況來進行設置: 1、需要字元保持固定寬度,其餘字元顯示省略號(‘...’); 2、需要字元顯示固定行數(本文以三行為例),其餘字元顯示省略號(‘...’); 以上方法基本可以滿足需求。當使用第二種情況(多行隱 ...
  • 一、三者之間的對比: 1、methods方法表示一個具體的操作,主要書寫業務邏輯; 2、watch;一個對象,鍵是需要觀察的表達式,值是對應回調函數。主要用來監聽某些特定數據的變化,從而進行某些具體業務邏輯操作;可以看作是”computed"和“methods”的結合體; 3、computed屬性的 ...
  • 一. HTML介紹: HTML是什麼? 超文本標記語言(Hypertext Markup Language),是一種用於創建網頁的標記語言,不是編程語言 本質上是瀏覽器可識別的規則,我們按照規則寫網頁,瀏覽器根據規則渲染我們的網頁.對於不同的瀏覽器,對同一個標簽可能會有不同的解釋. (相容性問題) ...
  • 下拉框等需要顯示上下箭頭切換的CSS樣式 1 .icon-right, .icon-down, .icon-up { 2 display: inline-block; 3 padding-right: 13rpx; 4 position: absolute; 5 /*組件內調整箭頭的位置*/ 6 r ...
  • 概述 本來,數據存儲都是由 cookie 完成的,但是 cookie 不適合大量數據的存儲,cookie 速度慢且效率低。 現在,HMLT5提供了兩種在客戶端存儲數據的辦法: 兩者之間的實測對比 localStorage 首先我們先運行這段代碼: 然後瀏覽器則彈出顯示: 接著,我們註釋掉localS ...
  • 目錄如下 1. 軟體架構的進化 2. 微服務的優勢和不足 3. 微服務架構所帶來的問題及解決方案 1.軟體架構的進化 於筆者經歷來看 架構大致從 單體架構 》MVC 》 微服務 單體架構 單體架構特點在於所有功能業務打包在一個發佈包里,部署在一個web容器中,運行在一個進程里。單體架構的優點在於 容 ...
  • 裝飾器模式主要對現有的類對象進行包裹和封裝,以期望在不改變類對象及其類定義的情況下,為對象添加額外功能。是一種對象結構型模式。需要註意的是,該過程是通過調用被包裹之後的對象完成功能添加的,而不是直接修改現有對象的行為,相當於增加了中間層。類似於python中的@裝飾器。 下麵還是按照老規矩,先來瞭解 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...