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

?

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自動化容器編排內容,這里的難度等級就完全不一樣了,而且每一個組件都涉及到很多內容,傳統業務如何進行微服務的拆分下次再進行討論。?

?

轉載于:https://www.cnblogs.com/lfs2640666960/p/11110087.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構之頭指針鏈表de三種插入方式(頭插法,尾插法,在pos處插入)

1、頭插法: 流程:1 ,判斷傳入數據是否正確 2,如果正確則創建一個新的節點,并判斷節點是否創建成功 3,然后給節點成員變量賦值 4,最后讓新節點變為鏈表的第一個節點。 代碼實現: // 鏈表的頭插…

c# 科學計數法值轉換成正常值,返回字符串

/// <summary>/// 科學計數法值轉換成正常值/// </summary>/// <param name"value"></param>/// <returns></returns>public string ValueScientificNotationConvert(JToken value){if (value null) return "";var …

使用 Docker 部署 Node 服務

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 前言   Docker 是一個開源的容器引擎。開發者可以將自己的應用以及依賴打包為一個可移植的容器&#xff0c;然后發布到 Linux 機器上。…

科目三電子考的通過率普遍偏低

據調查&#xff0c;科目三電子考的通過率普遍偏低&#xff0c;是學員們公認的最難考項目。今天小編要通過自己的所看所聽分析科目三電子考通過率低的三大原因。 原因一&#xff1a;考生基本功不扎實 從歷年來考試失敗的理由中&#xff0c;可以發現&#xff0c;大多都出現上車、…

打印python包含漢字報SyntaxError: Non-ASCII character '\xe4' in file

因為本人主要使用Scala語言&#xff0c;但是之前同事包括老大都是使用python&#xff0c;加上python在spark的使用中的確越來越受歡迎&#xff0c;所以最近準備入坑python&#xff0c;但是裝完寫demo的時候出了問題&#xff0c;如下&#xff1a; 查了下發現&#xff0c;這是pyt…

數據結構之頭指針鏈表的逆序、輸出和指定位置的刪除

頭指針鏈表指定位置的刪除 實現&#xff1a;1&#xff0c;先判斷傳入的數據是否正確&#xff0c;然后再判斷是否為空表&#xff0c;最后判斷pos的值是否滿足題意 2&#xff0c;分刪除位置為1和不為1討論&#xff1a;為1時&#xff0c;直接將h指向第二個節點并釋放第一個節點的…

軟件包管理 之 fedora-rpmdevtools 工具介紹

作者&#xff1a;北南南北來自&#xff1a;LinuxSir.Org提要&#xff1a;fedora-rpmdevtools 是一款Fedora的RPM包的開發工具&#xff0c;用于Fedora Core 2.0 以上版本&#xff1b; 正文 一、fedora-rpmdevtools 介紹&#xff1b; 用于制作RPM包的工具&#xff0c;為開發者提供…

Node.js 多版本安裝配置(Window、Ubuntu 、CentOS 、Mac OS、Cloud Studio)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 向大家介紹在window和Linux上安裝Node.js的方法。 本安裝教程以Node.js v4.4.3 LTS(長期支持版本)版本為例。 Node.js安裝包及源碼下載…

場外科目三考試技巧

科目三考試可以說是學車中最有用的&#xff0c;因為這和將來正式上路是完全相同的&#xff0c;所以掌握c1科目三考試技巧也是很必要的。下面就來看看小編為大家總結的場外科目三考試技巧吧。 一、考前準備 要從車頭前繞過進入車內&#xff0c;并注意關牢車門&#xff0c;之后雙…

數據結構之單鏈表(頭結點)的一些常用操作(增刪改查逆)

刪除指定結點 流程&#xff1a;判斷傳入數據和pos的位置是否符題意——找到刪除位置的前一個結點&#xff0c;找到后要判斷所找的位置是否越界——刪除指定結點。代碼&#xff1a; //刪除指定結點 int Delete_Pos(Node* h, int pos) {if (NULL h || pos < 1){return FALS…

cookie ? 利用cookie實現 顯示上次訪問時間?

二、 <%page import"java.text.SimpleDateFormat"%> <%page import"java.util.Date"%> <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC &…

Java9Java10 Java11新特性

1轉載于:https://www.cnblogs.com/LXL616/p/11100177.html

數據結構之頭結點鏈表的三種插入方式(頭插法,尾插法,在pos處插入)

創建頭結點 流程&#xff1a;首先創建頭結點表指針并為其分配空間——并將頭結點指向空&#xff0c;防止出現段錯誤。 代碼&#xff1a; //創建頭結點 Node* Create_List () {//創建頭結點Node* list (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL list) //檢驗…

JAVA 構造 MAP 并初始化 MAP、定義時就初始化

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 第一種方法&#xff1a;static塊初始化 public class Demo{private static final Map<String, String> myMap;static{myMap new…

心?理?學?家?告?訴?你?:?男?女?怎?樣?才?叫?合?適

心理學家認為..判斷男女兩個人是否適合牽手..應考慮以下10個因素.. 第一..彼此都是對方的好朋友..不帶任何條件..喜歡與對方在一起.. 第二..彼此很容易溝通..互相可以很敞開地坦白任何事情..而不必擔心被對方懷疑或輕視.. 第三..兩人在心靈上有共同的理念和價值觀..并…

回溯---分割字符串使得每個部分都是回文數

分割字符串使得每個部分都是回文數 131. Palindrome Partitioning (Medium) For example, given s "aab", Return[["aa","b"],["a","a","b"] ] 題目描述&#xff1a; 給定一個字符串&#xff0c;將其分割成回文串…

C# 調用FLashPaper2(二)

C#調用FlashPaper2 [2011-4-14 10:06:41]c:相信大家都知道“FlashPaper”這個東西是用來干什么的&#xff0c;他是一個轉換的軟件&#xff0c;通過虛擬打印機把文件流轉換成PDF或SWF文件。這里廢話就不多說了&#xff0c;直接看如何使用C#調用FlashPaper2&#xff1a; protecte…

C語言實現簡單的電子通訊錄

**制作一個電子通訊錄&#xff0c;通過該通訊錄能錄入好友ID號、姓名(英文)、手 機號碼&#xff0c;家庭住址&#xff0c;公司電話。** 原理&#xff1a;分成5個模塊&#xff0c;將模塊功能實現寫入頭文件中。主函數部分代碼&#xff1a; 顯示函數部分&#xff0c;在Markdow…

Jackson使用:String 與對象互轉、Jackson 從 json 字符串轉換出對象

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、從json字符串轉換出對象 Pager類&#xff1a; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; JsonIgnoreProper…

13個好習慣 教你健康一整年

怎么在坐著上班時&#xff0c;練出緊實小腹&#xff1f;如何在酗咖啡的緊湊中&#xff0c;幫身體排毒&#xff1f;新年初始&#xff0c;《天下》介紹十三個小訣竅&#xff0c;讓你輕松變健康。 一年初始&#xff0c;該如何規劃最重要的“健康”&#xff1f;《天下》邀請專家&am…