Spring Cloud 理論篇

微服務(wù)

在 jsp 時代,應(yīng)用前后端耦合,前后端 all in 一臺服務(wù)器筹吐,隨著流量的增大痒芝,代碼數(shù)量的增加,單體應(yīng)用不再適合互聯(lián)網(wǎng)的發(fā)展,微服務(wù)順應(yīng)提出。

image

微服務(wù)是一種用于構(gòu)建應(yīng)用的架構(gòu)方案。區(qū)別于更為傳統(tǒng)的單體式方案硝枉,將應(yīng)用拆分成多個核心功能。每個功能都被稱為一項服務(wù)倦微,可以單獨構(gòu)建和部署妻味,這意味著各項服務(wù)在工作(和出現(xiàn)故障)時不會相互影響。

image

參考:https://www.redhat.com/zh/topics/microservices/what-are-microservices

Spring Cloud 版本

在微服務(wù)大哥的帶領(lǐng)下欣福,各種架構(gòu)層出不窮责球,有 Dubbo、gRPC、Thrift棕诵、SpringCloud 等等裁良,其中 Spring Cloud 背靠 Spring 生態(tài),脫穎而出校套。Spring Cloud 框架是在 Springboot 框架基礎(chǔ)上編寫的价脾,因此在技術(shù)選型的時候,我們需要注意 Spring Cloud 版本要與 Springboot 版本對應(yīng)笛匙。

Spring Cloud 社區(qū)活躍侨把,已經(jīng)出了好幾個版本,生命力旺盛妹孙。值得一提的是他的版本號秋柄。SpringCloud 不是使用數(shù)字作為版本號,而是將倫敦地鐵站作為版本號蠢正,這讓我想起被地鐵支配的恐懼骇笔。

image

目前 SprinCloud官網(wǎng)主推薦版本是 Hoxton SR1。Spring Cloud 與 Spring Boot 有明確的版本對應(yīng)關(guān)系嚣崭。

Spring Cloud Spring Boot
Hoxton 2.2.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x
Camden 1.4.x
Brixton 1.3.x
Angel 1.2.x

從圖表可以看出 Spring Cloud 版本號的首字母是按照字母順序排列的笨触。
本文主要介紹的是基于 Spring Boot 1.5.x 的 Dalston 版本的 Spring Cloud。

Spring Cloud 是什么

Spring boot 是一個身懷絕技的武林高手雹舀,能上九天攬月下五洋捉鱉芦劣,反正就是牛,他喜歡結(jié)交武林各路英雄豪杰说榆,有 MyBatis 虚吟、Redis、RabbitMQ签财、Kafaka串慰、Elasticsearch 等等各路高手,他們喜歡行俠仗義唱蒸,助人為樂邦鲫,慢慢的以 Spring boot 為大佬的幫派越來越多,有一天 Spring boot 和兄弟們說油宜,要不我們成立一個門派把,就叫 Spring Cloud 怜姿。

大家一呼百應(yīng)慎冤。但是成立的門派后,需要管理啊沧卢,所以 Spring Cloud 成立了 Eureka 分舵(服務(wù)中心)蚁堤,負(fù)責(zé)對各個分舵同步門派的大事件,有新成員(提供者)加入門派但狭,也需要到 Eureka 分舵報道披诗,其他分舵(消費者)需要協(xié)助撬即,也像 Eureka 分舵請求支援。分舵也培養(yǎng)新分舵呈队,出現(xiàn)了幾個職能相同的分舵(服務(wù)帶集群)剥槐,Eureka 分舵看到分舵越來越多,自己也開始培養(yǎng)新分舵(服務(wù)中心集群)宪摧。同時也建立了一個 Ribbon 分舵(客戶端負(fù)載均衡)粒竖,負(fù)責(zé)對各個分舵進(jìn)行高效的溝通。 Spring Cloud 門派名聲越來越大几于,加入的人越來越多蕊苗,Spring Cloud 開始成立了 Zuul 分舵(網(wǎng)關(guān)),負(fù)責(zé)對新加入的人員進(jìn)行篩選沿彭。

江湖還在朽砰,Spring Cloud 門派也越來越強大,到處都是他的傳說

image

Spring Cloud 與 Dubbo 區(qū)別

目前來說喉刘,在 Java 領(lǐng)域瞧柔,微服務(wù)主要是 Spring Cloud 和 Dubbo 的天下,因此饱搏,人們經(jīng)常喜歡比較兩種技術(shù)非剃,然后選擇其中一種進(jìn)行搭建。

image

由于 Dubbo 是國人開發(fā)的推沸,有詳細(xì)的開發(fā)文檔备绽,在 Spring Cloud 的萌芽時, 國人憑著滿腔熱情大力發(fā)展 Dubbo鬓催,不斷試坑肺素,后來 Dubbo 發(fā)展停滯,Spring Cloud 的春風(fēng)開始席卷神州大地宇驾。不過,目前 Dubbo 又開始起色课舍,捐給了 Apache 。

技術(shù)維度 Dubbo Spring Cloud
服務(wù)注冊中心 Zookeeper Spring Cloud Netflix Eurrke
服務(wù)調(diào)用方式 RPC REST API
服務(wù)監(jiān)控 Dubbo-monitor spring boot admin
斷路器 不完善 Spirng Cloud Netflix Hystrix
服務(wù)網(wǎng)關(guān) Spring Cloud Netflix Zuul
分布式配置 Spring Cloud Config

Eureka 組件

Eureka 音譯尤里卡筝尾,是 Spring Cloud 的注冊中心。在分布式系統(tǒng)中筹淫,包含很多個節(jié)點,這些節(jié)點大體分為消費者和提供者。

image

服務(wù)端和客戶端就是通過 Eureka 進(jìn)行管理的饰剥。舉一個例子,Eureka 就好比小區(qū)的快遞箱汰蓉,快遞就是服務(wù)端,取快遞的人就是客戶端古沥。我們什么時候可以取快遞呢,等快遞箱向我們發(fā)送短信岩齿,我們就可以去取快遞了。這就是 Eureka 的作用盹沈。這樣看來服務(wù)中心 Eureka 是十分重要的龄章,為了保證高可用乞封,避免注冊中心掛掉做裙,我們兩眼一抹黑的尷尬局面,一般來說肃晚, Eureka 會做集群锚贱,保證高可用。同理可得关串,服務(wù)中心我們也需要集群拧廊,保證高可用。

Eureka 作為 Spring Cloud 框架的注冊中心晋修,與之對應(yīng)的是 Dubbo 框架的Zookeeper吧碾。他倆有什么區(qū)別呢?這里需要引入一個 CAP 定理墓卦。所謂 CAP 定理倦春,分布式系統(tǒng)的三個指標(biāo) C(一致性)、A(可用性)落剪、P(分區(qū)容錯性)不可以同時滿足了睁本。

image

一般來說,分區(qū)容錯無法避免忠怖,因此可以認(rèn)為 CAP 的 P 總是成立呢堰。CAP 定理告訴我們,剩下的 C 和 A 無法同時做到

參考:https://www.ruanyifeng.com/blog/2018/07/cap.html

而 Eureka 的設(shè)計原則是 AP脑又,即可用性和分區(qū)容錯性暮胧。他保證了注冊中心的可用性,但舍棄了數(shù)據(jù)一致性问麸,各節(jié)點上的數(shù)據(jù)有可能是不一致的(會最終一致)往衷。ZK 的設(shè)計原則是 CP,即強一致性和分區(qū)容錯性严卖。他保證數(shù)據(jù)的強一致性席舍,但舍棄了可用性,如果出現(xiàn)網(wǎng)絡(luò)問題可能會影響 ZK 的選舉哮笆,導(dǎo)致 ZK 注冊中心的不可用来颤。

參考:https://www.infoq.cn/article/jlDJQ*3wtN2PcqTDyokh

Ribbon

微服務(wù)劃分成幾個節(jié)點,他們分布在不同的虛擬機(jī)稠肘,通訊就成了一個難點福铅,通過我們會想到 HttpClient,如果是 Spring的話项阴,我們可以用 RestTemplate滑黔,但是在集群環(huán)境下环揽,他們并不能做到負(fù)載均衡。因此歉胶,Ribbon 出現(xiàn)了。Ribbon 是一款在客戶端實行負(fù)載均衡的工具通今。Ribbon 其實現(xiàn)原理就是根據(jù)在配置文件中列出的機(jī)器,自動按照某種規(guī)則(輪詢帝嗡,隨機(jī))去連接這些機(jī)器璃氢。使用者也可以自定義自己的負(fù)載均衡算法。負(fù)載均衡目的是達(dá)到高可用巢寡。

Feign

Feign 是有一款客戶端負(fù)載均衡工具椰苟。既然有了 Ribbon ,為什么還要有 Feign 呢谦絮? 在實際使用 Ribbon 組件中,我們會發(fā)現(xiàn) Ribbon 會讓我們硬編碼层皱,十分不靈活。因此草冈,在 Ribbon 的基礎(chǔ)下,面向接口編程的 Feign 組件 就出現(xiàn)了怎棱。Feign 讓我們可以編寫出優(yōu)雅的代碼绷跑,因此,實際中诅岩,F(xiàn)eign 得到大力使用带膜。

Hystrix

Hystrix 是一個用于處理分布式系統(tǒng)的延遲和容錯的開源庫,在分布式系統(tǒng)里式廷,許多依賴不可避免的會調(diào)用失敗芭挽,比如超時、異常等袜爪,Hystrix 能夠保證在一個依賴出問題的情況下辛馆,不會導(dǎo)致整體服務(wù)失敗,避免級聯(lián)故障昙篙,以提高分布式系統(tǒng)的彈性苔可。

Hystrix 斷路器是一種開關(guān)裝置,當(dāng)某個服務(wù)單元發(fā)生故障之后映屋,通過斷路器的故障監(jiān)控,向調(diào)用方返回一個符合預(yù)期的棚点、可處理的備選響應(yīng)(FallBack),而不是長時間的等待或者拋出調(diào)用方無法處理的異常,這樣就保證了服務(wù)調(diào)用方不會長時間卵蛉、不必要占用,從而避免了故障在分布式系統(tǒng)中的蔓延傻丝,乃至雪崩。

提到服務(wù)雪崩亏掀,我們可以通過一張圖來理解泛释。假設(shè)我們有三個服務(wù)調(diào)用 A B C。當(dāng)其中下游的 C 服務(wù)發(fā)生故障怜校,就有可能引起 服務(wù)雪崩。為了解決 服務(wù)雪崩魂贬,我們就需要引入 Hystrix 組件裙顽。

image

Hystrix 主要是通過服務(wù)熔斷和服務(wù)降級來解決服務(wù)雪崩問題愈犹。那么問題來了,服務(wù)熔斷和服務(wù)降級的區(qū)別又是什么萝嘁?

image

簡單來說服務(wù)熔斷屬于服務(wù)降級的一種扬卷,而服務(wù)降級有很多種降級方式!如開關(guān)降級咱枉、限流降級、熔斷降級蚕断。

參考:https://www.cnblogs.com/rjzheng/p/10340176.html

Zuul

Zuul中文是神獸的意思亿乳。在Spring Cloud 中,Zuul是一項網(wǎng)關(guān)服務(wù)葛假,可提供動態(tài)路由,監(jiān)視抱究,彈性带斑,安全性等。

image

簡單的話妈候,Zuul 就是樓下保安亭的大爺挂滓,所有進(jìn)入大樓的人,都需要大爺檢查墓毒,得到大爺?shù)脑S可亲怠。 我們可以通過一張圖理解。

image

Spring Cloud Config

實際工作中主胧,我們可能會有幾十上百的微服務(wù)節(jié)點习勤,每一個節(jié)點有需要有配置信息,比如數(shù)據(jù)庫的連接夷都,服務(wù)中心的地址等等予颤,當(dāng)中信息變化的時候,我們可能面臨手動一臺一臺修改的囧境党饮。為了解決上述問題,我們能否借鑒 Git 的思想氯窍,有一個標(biāo)準(zhǔn)的配置蹲堂,當(dāng)我們配置修改,我們只需要同步刷新一下即可,不用手動搬運呢霹娄?答案是有的,我們可以通過 Spring Cloud Config 達(dá)到同步更新配置信息踩晶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枕磁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茸苇,更是在濱河造成了極大的恐慌沦寂,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腻暮,死亡現(xiàn)場離奇詭異毯侦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)试幽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門抡草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饰及,“玉大人燎含,你說我怎么就攤上這事腿短。” “怎么了赴魁?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵颖御,是天一觀的道長凝颇。 經(jīng)常有香客問我,道長芦岂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任禽最,我火速辦了婚禮川无,結(jié)果婚禮上虑乖,老公的妹妹穿的比我還像新娘。我一直安慰自己决左,他們只是感情好佛猛,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布继找。 她就那樣靜靜地躺著,像睡著了一般幻锁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哄尔,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天岭接,我揣著相機(jī)與錄音,去河邊找鬼啃沪。 笑死,一個胖子當(dāng)著我的面吹牛创千,可吹牛的內(nèi)容都是我干的入偷。 我是一名探鬼主播盯串,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼体捏,長吁一口氣:“原來是場噩夢啊……” “哼糯崎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沃呢,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤薄霜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惰瓜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡备禀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年曲尸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽乱。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡迫淹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出敛熬,到底是詐尸還是另有隱情第股,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布诲锹,位于F島的核電站涉馅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏庸诱。R本人自食惡果不足惜桥爽,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一昧识、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缀去,春花似錦甸祭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栅贴。三九已至熏迹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坛缕,已是汗流浹背捆昏。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留宠页,地道東北人寇仓。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像俭嘁,于是被迫代替她去往敵國和親供填。 傳聞我的和親對象是個殘疾皇子蔓姚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容