SpringCLoud

1. 什么是微服務(wù)

  1. 以前的模式是 所有的代碼在同一個工程中 部署在同一個服務(wù)器中 同一個項目的不同模塊不同功能互相搶占資源
  2. 微服務(wù) 將工程根據(jù)不同的業(yè)務(wù)規(guī)則拆分成微服務(wù) 微服務(wù)部署在不同的機器上 服務(wù)之間進行相互調(diào)用
  3. Java微服務(wù)的框架有 dubbo(只能用來做微服務(wù))勺届,spring cloud(提供了服務(wù)的發(fā)現(xiàn)酝豪,斷路器等)
  4. 微服務(wù)化的核心就是將傳統(tǒng)的一站式應(yīng)用,根據(jù)業(yè)務(wù)拆分成一個一個的服務(wù),徹底地去耦合,
  5. 每一個微服務(wù)提供單個業(yè)務(wù)功能的服務(wù),一個服務(wù)做一件事,
  6. 從技術(shù)角度看就是一種小而獨立的處理過程,類似進程概念,能夠自行單獨啟動或銷毀
  7. 擁有自己獨立的數(shù)據(jù)庫

2. springcloud如何實現(xiàn)服務(wù)的注冊和發(fā)現(xiàn)

服務(wù)在發(fā)布時 指定對應(yīng)的服務(wù)名(服務(wù)名包括了IP地址和端口) 將服務(wù)注冊到注冊中心(eureka或者zookeeper)
這一過程是springcloud自動實現(xiàn) 只需要在main方法添加@EnableDisscoveryClient 同一個服務(wù)修改端口就可以啟動多個實例
調(diào)用方法:傳遞服務(wù)名稱通過注冊中心獲取所有的可用實例 通過負載均衡策略調(diào)用(ribbon和feign)對應(yīng)的服務(wù)

3.Ribbon和Feign的區(qū)別

Ribbon和Feign都是用于調(diào)用其他服務(wù)的撤蟆,不過方式不同挥萌。
1.啟動類使用的注解不同叫胁,Ribbon用的是@RibbonClient斑响,F(xiàn)eign用的是@EnableFeignClients菱属。
2.服務(wù)的指定位置不同,Ribbon是在@RibbonClient注解上聲明舰罚,F(xiàn)eign則是在定義抽象方法的接口中使用@FeignClient聲明纽门。
3.調(diào)用方式不同,Ribbon需要自己構(gòu)建http請求营罢,模擬http請求然后使用RestTemplate發(fā)送給其他服務(wù)膜毁,步驟相當繁瑣。
Feign則是在Ribbon的基礎(chǔ)上進行了一次改進,采用接口的方式瘟滨,將需要調(diào)用的其他服務(wù)的方法定義成抽象方法即可候醒,
不需要自己構(gòu)建http請求。不過要注意的是抽象方法的注解杂瘸、方法簽名要和提供服務(wù)的方法完全一致倒淫。

4.springcloud斷路器的作用

當一個服務(wù)調(diào)用另一個服務(wù)由于網(wǎng)絡(luò)原因或者自身原因出現(xiàn)問題時 調(diào)用者就會等待被調(diào)用者的響應(yīng) 當更多的服務(wù)請求到這些資源時 導致更多的請求等待 這樣就會發(fā)生連鎖效應(yīng)(雪崩效應(yīng)) 斷路器就是解決這一問題
斷路器有完全打開狀態(tài)
一定時間內(nèi) 達到一定的次數(shù)無法調(diào)用 并且多次檢測沒有恢復的跡象 斷路器完全打開,那么下次請求就不會請求到該服務(wù)
半開
短時間內(nèi) 有恢復跡象 斷路器會將部分請求發(fā)給該服務(wù) 當能正常調(diào)用時 斷路器關(guān)閉
關(guān)閉
當服務(wù)一直處于正常狀態(tài) 能正常調(diào)用 斷路器關(guān)閉

5. 微服務(wù)之間是如何獨立通訊的spring Cloud和 Dubbo有哪些區(qū)別?

image.png

本質(zhì)區(qū)別:

dubbo 是 基于 RPC 遠程 過程調(diào)用
cloud 是基于 http rest api 調(diào)用

最大區(qū)別: Spring Cloudi拋棄了 Dubbo的RPC通信,采用的是基于HTP的REST方式败玉。

嚴格來說,這兩種方式各有優(yōu)劣敌土。雖然從一定程度上來說,后者犧牲了服務(wù)調(diào)用的性能,但也避兔了上面提到的原生RPC帶來的問題。

而且REST相比RPC更為靈活,服務(wù)提供方和調(diào)用方的依賴只依靠一紙契約,不存在代碼級別的強依賴,這在強調(diào)快速演化的微服務(wù)環(huán)境下,顯得更加合適

很明顯, Spring Cloud的功能比 DUBBO更加強大,涵蓋面更廣,而且作為 Spring的挙頭項目,它也能夠與 Spring FrameworkSpring Boot.运翼、 Spring Data返干、 Spring Batch等其他 Springi項目完美融合,這些對于微服務(wù)而言是至關(guān)重要的。使用 Dubbo構(gòu)建的微服務(wù)架構(gòu)就像組裝電腦,各環(huán)節(jié)我們的選擇自由度很高,但是最終結(jié)果很有可能因為一條內(nèi)存質(zhì)量不行就點不亮了,總是讓人不怎么放心,但是如果你是一名高手,那這些都不是問題;而 Spring Cloud就像品牌機,在 Spring Source的整合下,做了大量的兼容性測試,保證了機器擁有更高的穩(wěn)定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎(chǔ)有足夠的了解

6.Spring Boot和 Spring Cloud,請你談?wù)剬λ麄兊睦斫?什么是服務(wù)熔斷?

spring boot 是一個快速整合第三方框架 關(guān)注的是 微觀 具體關(guān)注快速方便的開發(fā)單個個體的 服務(wù)
spring cloud 關(guān)注的是 宏觀 具體關(guān)注全局的微服務(wù)協(xié)調(diào)整理治理框架 將spring boot 開發(fā)的一個個單體服務(wù)整合 并管理起來
它為各個微服務(wù)之間提供 配置管理 服務(wù)發(fā)現(xiàn) 斷路器路由 微代理 全局鎖 分布式會話 等 集成服務(wù)
舉個例子 : 一所醫(yī)院 boot 是 一個一個科室 cloud 是把一個一個科室 組合起來 對外稱之為 醫(yī)院
存在依賴關(guān)系 cloud 離不開boot

7.hystrix 斷路器

image.png
image.png

服務(wù)熔斷 是指 由于某些原因使得服務(wù)出現(xiàn)了過載現(xiàn)象血淌,為防止造成整個系統(tǒng)故障矩欠,從而采用的一種保護措施,所以很多地方把熔斷亦稱為過載保護悠夯。

8. 什么是服務(wù)降級 微服務(wù)的優(yōu)缺點分別是什么?

用 通俗易懂的來說 : 整體資源快不夠了癌淮,忍痛將某些服務(wù)先關(guān)掉,待渡過難關(guān)沦补,再開啟回來

image.png
image.png

9. 說下你在項目開發(fā)中碰到的坑你所知道的微服務(wù)技術(shù)棧有哪些?

image.png

微服務(wù)技術(shù)棧 : 多種技術(shù)的結(jié)合體

我們在討論分布式的微服務(wù)架構(gòu)的時候 它需要有哪些維度乳蓄?

1 服務(wù)治理 2 服務(wù)注冊 3 服務(wù)調(diào)用 4 負載均衡 5 服務(wù)監(jiān)控

10.請說說eureka和 zookeeper,兩個的區(qū)別?

首先 說CAP 是什么 所謂的CAP C強一致性 A可用性 P 分區(qū)容錯性

著名的CAP理論指出,

一個分布式系統(tǒng)不可能同時滿足C(一致性)、A(可用性)和P(分區(qū)容錯性)夕膀。由于分區(qū)容錯性P在是分布式系統(tǒng)中必須要保證的,因此我們只能在A和C之間進行權(quán)衡虚倒。

zookeeper 遵守 CP

當向注冊中心查詢服務(wù)列表時, 我們可以容忍注冊中心返回的是幾分鐘以前的注冊信息, 但不能接受服務(wù)直接down掉不可用。

也就是說,服務(wù)注冊功能對可用性的要求要高于一致性产舞。

但是zookeeper 會出現(xiàn)這樣一種情況, 當 master節(jié)點因為網(wǎng)絡(luò)故障與其他節(jié)點失去聯(lián)系時,剩余節(jié)點會重新進行 leader選舉裹刮。

問題在于,選舉 leader的時間太長,30~120s,目選舉期間整個zookeeper 集群都是不可用的,這就導致在選舉期間注冊服務(wù)癱瘓。

在云部署的環(huán)境下,因網(wǎng)絡(luò)問題使得zookeeper 集群失去 master節(jié)點是較大概率會發(fā)生的事,雖然服務(wù)能夠最終恢復,但是漫長的選舉時間導致的注冊長期不可用是不能容忍的庞瘸。

或許 這個回答太過于抽象 用一種其他說法來說 就是 :

當有一個zookeeper 掛了 那其他的zookeeper 會進行 一次選舉 (強一致性 : 我一定要保持數(shù)據(jù)一致性) 而在此選舉期間 zookeeper 是不可用的 而當前 有用戶正在使用 用戶就不爽了 捧弃。

eureka 遵守 AP
Eureka:看明白了這一點,因此在設(shè)計時就優(yōu)先保證可用性。
Eureka各個節(jié)點都是平等的,幾個節(jié)點掛掉不會影響正常節(jié)點的工作,剩余的節(jié)點依然可以提供注冊和查詢服務(wù)擦囊。

而 Eureka的客戶端在向某個 Eureka注冊或時如果發(fā)現(xiàn)連接失敗,則會自動切換至其它節(jié)點

只要有一臺 Eureka還在,就能保證注冊服務(wù)可用(保證可用性),只不過查到的信息可能不是最新的不保證強一致性)违霞。

除此之外, Eureka還有一種自我保護機制,如果在15分鐘內(nèi)超過85%的節(jié)點都沒有正常的心跳,那么 Eurekas就認為客戶端與注冊中心出現(xiàn)了網(wǎng)絡(luò)故障,此時會出現(xiàn)以下幾種情況:

1. Eureka不再從注冊列表中移除因為長時間沒收到心跳而應(yīng)該過期的服務(wù)

2. Ureka仍然能夠接受新服務(wù)的注冊和査詢請求,但是不會被同步到其它節(jié)點上(即保證當前節(jié)點依然可用)

3.當網(wǎng)絡(luò)穩(wěn)定時,當前實例新的注冊信息會被同步到其它節(jié)點中

因此, Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導致部分節(jié)點失去聯(lián)系的情況,而不會像 zookeeper那樣使整個注冊服務(wù)癱瘓。

11.SpringCloud核心組件

1)Spring Cloud核心組件:Eureka(Eureka是微服務(wù)架構(gòu)中的注冊中心瞬场,專門負責服務(wù)的注冊與發(fā)現(xiàn))

Eureka Client: 負責將這個服務(wù)的信息注冊到Eureka Server中
Eureka Server: 注冊中心买鸽,里面有一個注冊表,保存了各個服務(wù)所在的機器和端口號

2)Spring Cloud核心組件:Feign( Feign的一個關(guān)鍵機制就是使用了動態(tài)代理)

沒有底層的建立連接贯被、構(gòu)造請求眼五、解析響應(yīng)的代碼妆艘,直接就是用注解定義一個 FeignClient接口,然后調(diào)用那個接口就可以了看幼。人家Feign Client會在底層根據(jù)你的注解批旺,跟你指定的服務(wù)建立連接、構(gòu)造請求诵姜、發(fā)起靕求汽煮、獲取響應(yīng)、解析響應(yīng)棚唆,等等暇赤。這一系列臟活累活,人家Feign全給你干了宵凌。

1.首先鞋囊,如果你對某個接口定義了@FeignClient注解,F(xiàn)eign就會針對這個接口創(chuàng)建一個動態(tài)代理
2.接著你要是調(diào)用那個接口瞎惫,本質(zhì)就是會調(diào)用 Feign創(chuàng)建的動態(tài)代理溜腐,這是核心中的核心
3.Feign的動態(tài)代理會根據(jù)你在接口上的@RequestMapping等注解,來動態(tài)構(gòu)造出你要請求的服務(wù)的地址
4.最后針對這個地址微饥,發(fā)起請求逗扒、解析響應(yīng)

3)Spring Cloud核心組件:Ribbon(它的作用是 負載均衡 古戴,會幫你在每次請求時選擇一臺機器欠橘,均勻的把請求分發(fā)到各個機器上)

Ribbon的負載均衡默認使用的最經(jīng)典的 Round Robin輪詢算法,還有隨機算法

此外,Ribbon是和Feign以及Eureka緊密協(xié)作现恼,完成工作的肃续,具體如下:

首先Ribbon會從 Eureka Client里獲取到對應(yīng)的服務(wù)注冊表,也就知道了所有的服務(wù)都部署在了哪些機器上叉袍,在監(jiān)聽哪些端口號始锚。

然后Ribbon就可以使用默認的Round Robin算法失乾,從中選擇一臺機器

Feign就會針對這臺機器呻逆,構(gòu)造并發(fā)起請求。

4)Spring Cloud核心組件:Hystrix( Hystrix是隔離义黎、熔斷以及降級的一個框架)

微服務(wù)架構(gòu)中恐怖的服務(wù)雪崩問題

這么多服務(wù)互相調(diào)用润文,要是不做任何保護的話姐呐,某一個服務(wù)掛了,就會引起連鎖反應(yīng)典蝌,導致別的服務(wù)也掛曙砂。比如積分服務(wù)掛了,會導致訂單服務(wù)的線程全部卡在請求積分服務(wù)這里骏掀,沒有一個線程可以工作鸠澈,瞬間導致訂單服務(wù)也掛了柱告,別人請求訂單服務(wù)全部會卡住,無法響應(yīng)笑陈。

隔離:Hystrix會搞很多個小小的線程池 际度,比如訂單服務(wù)請求庫存服務(wù)是一個線程池,請求倉儲服務(wù)是一個線程池新锈,請求積分服務(wù)是一個線程池甲脏。每個線程池里的線程就僅僅用于請求那個服務(wù)。

熔斷:但是如果積分服務(wù)都掛了妹笆,每次調(diào)用都要去卡住幾秒鐘干啥呢块请?有意義嗎?當然沒有拳缠! 所以我們直接對積分服務(wù)熔斷不就得了墩新,比如在5分鐘內(nèi)請求積分服務(wù)直接就返回了,不要去走網(wǎng)絡(luò)請求卡住幾秒鐘窟坐, 這個過程海渊,就是所謂的熔斷

降級:沒問題,咱們就來個降級:每次調(diào)用積分服務(wù)哲鸳,你就在數(shù)據(jù)庫里記錄一條消息臣疑,說給某某用戶增加了多少積分,因為積分服務(wù)掛了徙菠,導致沒增加成功讯沈!這樣等積分服務(wù)恢復了,你可以根據(jù)這些記錄手工加一下積分婿奔。 這個過程缺狠,就是所謂的降級

5)Spring Cloud核心組件:Zuul(這個組件是負責網(wǎng)絡(luò)路由的)

所以一般微服務(wù)架構(gòu)中都必然會設(shè)計一個網(wǎng)關(guān)在里面,像android萍摊、ios挤茄、pc前端、微信小程序冰木、H5等等穷劈,不用去關(guān)心后端有幾百個服務(wù),就知道有一個網(wǎng)關(guān)踊沸,所有請求都往網(wǎng)關(guān)走歇终,網(wǎng)關(guān)會根據(jù)請求中的一些特征,將請求轉(zhuǎn)發(fā)給后端的各個服務(wù)雕沿。

而且有一個網(wǎng)關(guān)之后练湿,還有很多好處,比如可以做 統(tǒng)一的降級审轮、限流肥哎、認證授權(quán)辽俗、安全 ,等等篡诽。

服務(wù)治理為心臟崖飘,路由網(wǎng)關(guān)、消息中心杈女、斷路器朱浴、鏈路追蹤、配置中心等為依托达椰,構(gòu)造了整個微服務(wù)框架的「五臟六腑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翰蠢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啰劲,更是在濱河造成了極大的恐慌梁沧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝇裤,死亡現(xiàn)場離奇詭異廷支,居然都是意外死亡,警方通過查閱死者的電腦和手機栓辜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門恋拍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人藕甩,你說我怎么就攤上這事施敢。” “怎么了辛萍?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵悯姊,是天一觀的道長羡藐。 經(jīng)常有香客問我贩毕,道長,這世上最難降的妖魔是什么仆嗦? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任辉阶,我火速辦了婚禮,結(jié)果婚禮上瘩扼,老公的妹妹穿的比我還像新娘谆甜。我一直安慰自己,他們只是感情好集绰,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布规辱。 她就那樣靜靜地躺著,像睡著了一般栽燕。 火紅的嫁衣襯著肌膚如雪罕袋。 梳的紋絲不亂的頭發(fā)上改淑,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音朵夏,去河邊找鬼。 笑死榆纽,一個胖子當著我的面吹牛仰猖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奈籽,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饥侵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衣屏?” 一聲冷哼從身側(cè)響起爆捞,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勾拉,沒想到半個月后煮甥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡藕赞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年成肘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斧蜕。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡双霍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出批销,到底是詐尸還是另有隱情洒闸,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布均芽,位于F島的核電站丘逸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掀宋。R本人自食惡果不足惜深纲,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劲妙。 院中可真熱鬧湃鹊,春花似錦、人聲如沸镣奋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侨颈。三九已至余赢,卻和暖如春掸驱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背没佑。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工毕贼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛤奢。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓鬼癣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啤贩。 傳聞我的和親對象是個殘疾皇子待秃,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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