[java][SpringCloid]:SpringCloud相關(guān)技術(shù)介紹

Eureka服務(wù)注冊(cè)與發(fā)現(xiàn)

是什么
Eureka是Netflix的一個(gè)子模塊,也是核心模塊之一企量。Eureka是一個(gè)基本REST的服務(wù)筷转,用戶定位服務(wù)辫诅,以實(shí)現(xiàn)云端中間層服務(wù)發(fā)現(xiàn)和故障轉(zhuǎn)移哺哼。服務(wù)注冊(cè)和發(fā)現(xiàn)對(duì)于微服務(wù)架構(gòu)來說是非常重要的转质,有了服務(wù)發(fā)現(xiàn)與注冊(cè)园欣,只需要使用服務(wù)的標(biāo)識(shí)符,就可以訪問到服務(wù)休蟹,而不需要修改服務(wù)調(diào)用的配置文件了沸枯,功能類似于doubo的注冊(cè)中心,比如Zookeeper.
  遵守AP原則
三大特色
1.Eureka Server提供服務(wù)注冊(cè)和發(fā)現(xiàn)鸡挠。
  2.Service Provider服務(wù)提供方將自身服務(wù)注冊(cè)到Eureka辉饱,從而使服務(wù)消費(fèi)方能夠找到。
  3.Service Consumer服務(wù)消費(fèi)方從Eureka獲取注冊(cè)服務(wù)列表拣展,從而能夠消費(fèi)服務(wù)

基本構(gòu)架

Spring Cloud封裝了Netflix公司開發(fā)Eureka模塊來 實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)(請(qǐng)對(duì)比Zookeeper)
  Eureka采用了C-S的設(shè)計(jì)架構(gòu)彭沼。Eureka Server作為服務(wù)注冊(cè)功能的服務(wù)器,它是服務(wù)注冊(cè)中心备埃。
  而系統(tǒng)中的其他微服務(wù)姓惑,使用Eureka的客戶端連接到Eureka Server并維持心跳連接褐奴。這樣系統(tǒng)的維護(hù)人員就可以通過Eureka Server來監(jiān)控系統(tǒng)中各個(gè)微服務(wù)是否正常運(yùn)行。SpringCloud的一些其他模塊(比如Zuul)就可以通過Eureka Server來實(shí)現(xiàn)系統(tǒng)中的其他微服務(wù)于毙,并執(zhí)行相關(guān)的邏輯敦冬。

  Eureka包含兩個(gè)組件:Eureka Server和Eureka Client
  Eureka Server 提供服務(wù)注冊(cè)服務(wù)。各個(gè)節(jié)點(diǎn)啟動(dòng)后唯沮,會(huì)在EurekaServer中進(jìn)行注冊(cè)脖旱,這樣EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到介蛉。
  Eureka Client 是一個(gè)Java客戶端萌庆,用于簡化Eureka Server的交互,客戶端同時(shí)也具備一個(gè)內(nèi)置的币旧、使用輪詢(round-robin)負(fù)載算法的負(fù)載均衡器践险。在應(yīng)用啟動(dòng)后,將會(huì)向Eureka Server發(fā)送心跳(默認(rèn)周期為30秒)吹菱。如果Eureka Server在多個(gè)心跳周期內(nèi)沒有接收到某個(gè)節(jié)點(diǎn)的心跳巍虫,EurekaServer將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)。     

自我保護(hù)

導(dǎo)致原因:某時(shí)刻某一個(gè)微服務(wù)不可用了鳍刷,eureka不會(huì)立刻清理占遥,依舊會(huì)對(duì)該微服務(wù)的信息進(jìn)行保存。

  什么是自我保護(hù)模式倾剿?
  默認(rèn)情況下筷频,如果EurekaServer在一定時(shí)間內(nèi)沒有接收到某個(gè)微服務(wù)實(shí)例的心跳,EurekaServer將會(huì)注銷該實(shí)例(默認(rèn)90秒)前痘。但是當(dāng)前網(wǎng)絡(luò)分區(qū)故障發(fā)生時(shí)凛捏,微服務(wù)與EurekaServer之間無法正常通信,以上行為可能變得非常危險(xiǎn)了:因?yàn)槲⒎?wù)本身其實(shí)是健康的芹缔,此時(shí)本不應(yīng)該注銷這個(gè)微服務(wù)坯癣。
  Eureka通過“自我保護(hù)模式”來解決這個(gè)問題:當(dāng)EurekaServer節(jié)點(diǎn)在短時(shí)間內(nèi)丟失過多客戶端時(shí)(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么這個(gè)節(jié)點(diǎn)就會(huì)進(jìn)入自我保護(hù)模式最欠。一旦進(jìn)入該模式示罗,EurekaServer就會(huì)保護(hù)服務(wù)注冊(cè)中心的信息,不再刪除服務(wù)注冊(cè)表捉的數(shù)據(jù)(也就不會(huì)注銷任何微服務(wù))芝硬。當(dāng)網(wǎng)絡(luò)故障收復(fù)后蚜点,該EurekaServer節(jié)點(diǎn)會(huì)自動(dòng)退出自我保護(hù)模式。
  在自我保護(hù)模式中拌阴,EurekaServer會(huì)保護(hù)服務(wù)注冊(cè)表中的信息绍绘,不再注銷任何服務(wù)實(shí)例。當(dāng)它收到的心跳數(shù)重新恢復(fù)到閥值以上時(shí),該EurekaServer節(jié)點(diǎn)就會(huì)自動(dòng)退出自我保護(hù)模式陪拘。它的設(shè)計(jì)哲學(xué)就是寧可保留錯(cuò)誤的服務(wù)注冊(cè)信息厂镇,也不盲目注銷任何可能健康的服務(wù)實(shí)例。一句話講:好死不如耐活著左刽。
  綜上捺信,自我保護(hù)模式是一種應(yīng)對(duì)網(wǎng)絡(luò)異常的安全保護(hù)措施。它的架構(gòu)哲學(xué)是寧可同時(shí)保留所有的微服務(wù)(健康的微服務(wù)和不健康的微服務(wù)都會(huì)保留)欠痴,也不盲目注銷任何健康的微服務(wù)迄靠。使用自我保護(hù)模式,可以讓Eureka集群更加健壯喇辽、穩(wěn)定梨水。

  在Spring Cloud中,可以使用eureka.server.enable-self-preservation = false 禁用自我保護(hù)模式茵臭,不建議關(guān)閉

與Dobbo比較

Eureka01.jpeg
Eureka02.jpeg
服務(wù)發(fā)現(xiàn)
對(duì)于注冊(cè)進(jìn)eureka里面的微服務(wù),可以通過服務(wù)發(fā)現(xiàn)來獲得該服務(wù)的信息   
作為服務(wù)注冊(cè)中心舅世,eureka比zookeeper好在哪里旦委?
著名的CAP理論指出,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足C(一致性)雏亚,A(高可用), P(分區(qū)容錯(cuò)性)缨硝。由于分區(qū)容錯(cuò)性P在是分布式系統(tǒng)中必須要保證的,因此我們只能在A和C之間進(jìn)行權(quán)衡罢低。
  Zookeeper保證了CP查辩,Eureka保證了AP.
  Eureka各個(gè)節(jié)點(diǎn)是平等的;Zookeeper:一個(gè)領(lǐng)導(dǎo)者(leader)网持,多個(gè)跟隨者(follower)組成的集群宜岛。集群中只要有半數(shù)以上(>)節(jié)點(diǎn)存活,Zookeeper集群就能正常服務(wù)功舀。部署一般部署奇數(shù)臺(tái)
  1.Zookeeper保證了CP
  當(dāng)向注冊(cè)中心查詢服務(wù)列表時(shí)萍倡,我們可以容忍注冊(cè)中心返回的是幾分鐘以前的信息,但不能容忍直接down掉不可用辟汰。也就是說列敲,服務(wù)注冊(cè)功能對(duì)高可用性要求比較高,但zk會(huì)出現(xiàn)這樣一種情況帖汞,當(dāng)master節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)故障與其他節(jié)點(diǎn)失去聯(lián)系時(shí)戴而,剩余節(jié)點(diǎn)會(huì)重新選leader。問題在于翩蘸,選取leader時(shí)間過長所意,30 ~ 120s,且選取期間zk集群都不可用,這樣就會(huì)導(dǎo)致選取期間注冊(cè)服務(wù)癱瘓扁眯。在云部署的環(huán)境下壮莹,因網(wǎng)絡(luò)問題使得zk集群失去master節(jié)點(diǎn)是較大概率會(huì)發(fā)生的事,雖然服務(wù)能夠恢復(fù)姻檀,但是漫長的選取時(shí)間導(dǎo)致的注冊(cè)長期不可用是不能容忍的命满。
  2.Eureka保證了AP
  Eureka保證了可用性,Eureka各個(gè)節(jié)點(diǎn)是平等的绣版,幾個(gè)節(jié)點(diǎn)掛掉不會(huì)影響正常節(jié)點(diǎn)的工作胶台,剩余的節(jié)點(diǎn)仍然可以提供注冊(cè)和查詢服務(wù)。而Eureka的客戶端向某個(gè)Eureka注冊(cè)或發(fā)現(xiàn)是發(fā)生連接失敗杂抽,則會(huì)自動(dòng)切換到其他節(jié)點(diǎn)诈唬,只要有一臺(tái)Eureka還在,就能保證注冊(cè)服務(wù)可用缩麸,只是查到的信息可能不是最新的铸磅。除此之外,Eureka還有自我保護(hù)機(jī)制杭朱,如果在15分鐘內(nèi)超過85%的節(jié)點(diǎn)沒有正常的心跳阅仔,那么Eureka就認(rèn)為客戶端與注冊(cè)中心發(fā)生了網(wǎng)絡(luò)故障,此時(shí)會(huì)出現(xiàn)以下幾種情況:
   』⌒怠①八酒、Eureka不在從注冊(cè)列表中移除因?yàn)殚L時(shí)間沒有收到心跳而應(yīng)該過期的服務(wù)。
   ∪刑啤②羞迷、Eureka仍然能夠接受新服務(wù)的注冊(cè)和查詢請(qǐng)求,但是不會(huì)被同步到其他節(jié)點(diǎn)上(即保證當(dāng)前節(jié)點(diǎn)仍然可用)
   』ⅰ③衔瓮、當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前實(shí)例新的注冊(cè)信息會(huì)被同步到其他節(jié)點(diǎn)抖甘。
  因此报辱,Eureka可以很好的應(yīng)對(duì)因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況,而不會(huì)像Zookeeper那樣使整個(gè)微服務(wù)癱瘓单山。
  Eureka可以很好的應(yīng)對(duì)因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況碍现,而不會(huì)像zookeeper那樣整個(gè)注冊(cè)服務(wù)癱瘓

Ribbon負(fù)載均衡(客戶端)

配置完成后:完成真正的通知微服務(wù)名字從eureka上找到并訪問
是什么
SpringCloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套 客戶端 負(fù)載均衡的工具
  簡單的說,Ribbon是Netflix發(fā)布的開源項(xiàng)目米奸,主要功能是提供客戶端的軟件負(fù)載均衡算法昼接,將Netflix的中間層服務(wù)連接在一起。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如何連接超時(shí)悴晰、重試等慢睡。簡單的說逐工,就是在配置文件中列出Load Balancer(簡稱LB)后面的所有的機(jī)器,Ribbon會(huì)自動(dòng)的幫助你基于某種規(guī)則(如簡單輪詢漂辐,隨機(jī)連接等)去連接這些機(jī)器泪喊。我們也很容易使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法。
能干嘛
LB(負(fù)載均衡)髓涯,在微服務(wù)或分布式集群中經(jīng)常用到的一種應(yīng)用袒啼。負(fù)載均衡簡單的說就是將用戶的請(qǐng)求平攤到多個(gè)服務(wù)上,從而達(dá)到系統(tǒng)的HA(高可用)纬纪。
  常見的負(fù)載均衡有軟件Nginx蚓再,LVS,硬件F5等包各。
  相應(yīng)的中間件摘仅,如doubbo和SpringCloud中均給我們提供了負(fù)載均衡,SpringCloud的負(fù)載均衡算法可自定義问畅。

  1.集中式LB
  即在服務(wù)的消費(fèi)方和提供方之間使用獨(dú)立的LB設(shè)施(可以是硬件娃属,如F5,也可以是軟件护姆,如nginx)膳犹,由該設(shè)施負(fù)責(zé)把訪問請(qǐng)求通過某種策略轉(zhuǎn)發(fā)至服務(wù)的提供方。

  2.進(jìn)程內(nèi)LB
  將LB邏輯集成到消費(fèi)方签则,消費(fèi)方從服務(wù)注冊(cè)中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個(gè)合適的服務(wù)器铐料。
  Ribbon屬于進(jìn)程內(nèi)LB渐裂,它只是一個(gè)類庫,集成于消費(fèi)方進(jìn)程钠惩,消費(fèi)方通過它來獲取到服務(wù)提供方的地址柒凉。
負(fù)載均衡
架構(gòu)說明
Ribbon01.jpeg
Ribbon在工作時(shí)分成兩步:
  1.先選擇EurekaServer,它優(yōu)先選擇在同一個(gè)區(qū)域內(nèi)負(fù)載較少的server。
  2.再根據(jù)用戶指定的策略,在從server取到的服務(wù)注冊(cè)列表中選擇一個(gè)地址纯陨。
  其中Ribbon提供了多種策略:如輪詢玲献、隨機(jī)等。

  總結(jié):Ribbon其實(shí)就是一個(gè)軟負(fù)載均衡的客戶端組件拘央,它可以和其他所需請(qǐng)求的客戶端結(jié)合使用,和eureka結(jié)合只是其中的一個(gè)實(shí)例
核心組件IRule:負(fù)載均衡算法
IRule: 根據(jù)特定算法從服務(wù)列表中選取一個(gè)要訪問的服務(wù)
  默認(rèn)有7種算法:
  1.RoundRobinRule:輪詢
  2.RandomRule:隨機(jī)
  3.AvailabilityFilteringRule
  4.WeightedResponseTimeRule
  5.RetryRule:先按照RoundRobinRule的策略獲取服務(wù),如果獲取服務(wù)失敗則在指定時(shí)間內(nèi)會(huì)進(jìn)行重試林艘,獲取可用的服務(wù)
  6.BestAvailableRule
  7.ZoneAvoidanceRule

  自定義算法:
  自定義MySelfRule類不能在該主啟動(dòng)類當(dāng)前包及子包下。也就是不能放在@ComponentScan所掃描的當(dāng)前包下及子包下混坞,(@SpringBootApplication 注解里有@ComponentScan)

Feign負(fù)載均衡

Feign是什么
Feign是一個(gè)聲明式WebService客戶端狐援。使用Feign能讓編寫Web Service客戶端更加簡單钢坦,這的使用方法是定義一個(gè)接口,然后在上面添加注解啥酱,同時(shí)也支持JAX-RS標(biāo)準(zhǔn)的注解爹凹。Feign也支持可拔插式的編碼器和解碼器。SpringCloud對(duì)Feign進(jìn)行了封裝镶殷,使其支持了Spring MVC標(biāo)準(zhǔn)注解和HttpMessageConverters禾酱。Feign可以與Eureka和Ribbon組合使用以支持負(fù)載均衡。
  Feign是一個(gè)聲明式的Web服務(wù)客戶端批钠,使得編寫Web服務(wù)客戶端變得非常容易宇植,**只需要?jiǎng)?chuàng)建一個(gè)接口,然后在上面添加注解即可**埋心。也就是面向接口編程
  [官網(wǎng)資料](https://github.com/OpenFeign/feign)
Feign能干嘛
Feign旨在使編寫Java Http客戶端變得更容易指郁。
  前面在使用Ribbon + RestTemplate時(shí),利用RestTemplate對(duì)http請(qǐng)求的封裝處理拷呆,形成了一套模版化的調(diào)用方法闲坎。但是實(shí)際開發(fā)中,由于對(duì)服務(wù)依賴的調(diào)用可能不止一處茬斧,往往一個(gè)接口會(huì)被多處調(diào)用腰懂,所以通常都會(huì)針對(duì)每個(gè)微服務(wù)自行封裝一些客戶端類來包裝這些依賴服務(wù)的調(diào)用。所以项秉,F(xiàn)eign在些基礎(chǔ)上做了進(jìn)一步封裝绣溜,由他來幫助我們定義和實(shí)現(xiàn)依賴服務(wù)接口的定義。在Feign的實(shí)現(xiàn)下娄蔼,我們只需要?jiǎng)?chuàng)建一個(gè)接口并使用注釋的方式來配置它(以前是在Dao接口上標(biāo)注Mapper注解怖喻,現(xiàn)在是一個(gè)微服務(wù)接口上面標(biāo)注一個(gè)Feign注解即可),即可完成對(duì)服務(wù)提供方的接口綁定岁诉,簡化了使用SpringCloud Ribbon時(shí)锚沸,自動(dòng)封裝服務(wù)調(diào)用客戶端的開發(fā)量。   
實(shí)例說明
Feign集成了Ribbon
  利用Ribbon維護(hù)了SrpingCloud-dept的服務(wù)列表信息涕癣,并且通過輪詢實(shí)現(xiàn)了客戶端的負(fù)載均衡哗蜈。而與Ribbon不同的是,**利用feign只需要定義服務(wù)綁定接口且以聲明式的方法**坠韩,優(yōu)雅而簡單的實(shí)現(xiàn)了服務(wù)調(diào)用距潘。
  Feign通過接口的方法調(diào)用Rest服務(wù)(之前是Ribbon + RestTemplate),該請(qǐng)求發(fā)送給Eureka服務(wù)器([http://Spring-cloud-dept/dept/list)只搁,通過Feign直接找到服務(wù)接口绽昼,由于在進(jìn)行服務(wù)調(diào)用的時(shí)候融合了Ribbon技術(shù),所以也支持負(fù)載均衡作用须蜗。](http://spring-cloud-dept/dept/list)%EF%BC%8C%E9%80%9A%E8%BF%87Feign%E7%9B%B4%E6%8E%A5%E6%89%BE%E5%88%B0%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%8F%A3%EF%BC%8C%E7%94%B1%E4%BA%8E%E5%9C%A8%E8%BF%9B%E8%A1%8C%E6%9C%8D%E5%8A%A1%E8%B0%83%E7%94%A8%E7%9A%84%E6%97%B6%E5%80%99%E8%9E%8D%E5%90%88%E4%BA%86Ribbon%E6%8A%80%E6%9C%AF%EF%BC%8C%E6%89%80%E4%BB%A5%E4%B9%9F%E6%94%AF%E6%8C%81%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E4%BD%9C%E7%94%A8%E3%80%82)

Hystrix斷路器

概述
分布式系統(tǒng)面臨的問題
復(fù)雜分布式體系結(jié)構(gòu)中的應(yīng)用程序有數(shù)十個(gè)依賴關(guān)系硅确,每個(gè)依賴關(guān)系某些時(shí)候不可避免地失敗
  服務(wù)雪崩:
  多個(gè)微服務(wù)之前調(diào)用的時(shí)候目溉,假設(shè)微服務(wù)A調(diào)用微服務(wù)B和微服務(wù)C,微服務(wù)B和微微服務(wù)C又調(diào)用其他的微服務(wù)菱农,這就是所謂的”扇出“.如果扇出的鏈路上某個(gè)微服務(wù)的調(diào)用響應(yīng)時(shí)間過長或者不可用缭付,對(duì)微服務(wù)A的調(diào)用就會(huì)占用越來越多的系統(tǒng)資源,進(jìn)而引起系統(tǒng)崩潰循未,所謂的”雪崩效應(yīng)”陷猫。
  對(duì)于高流量的應(yīng)用來說,單一的后端依賴可能會(huì)導(dǎo)致所有的服務(wù)器上的所有資源都會(huì)在幾秒內(nèi)飽和的妖。比失敗更糟糕的是绣檬,這些應(yīng)用程序還可能導(dǎo)致服務(wù)之間的延遲增加,備份隊(duì)列嫂粟,線程和其他系統(tǒng)資源緊張娇未,導(dǎo)致整個(gè)系統(tǒng)發(fā)生更多的級(jí)聯(lián)故障。這些都表示需要對(duì)故障和延遲進(jìn)行隔離和管理星虹,以便單個(gè)依賴關(guān)系的失敗零抬,不能取消整個(gè)應(yīng)用程序或系統(tǒng)。
是什么
Hystrix是一個(gè)用于處理分布式系統(tǒng) **延遲** 和 **容錯(cuò)** 的開源庫宽涌,在分布式系統(tǒng)里平夜,許多依賴不可避免的會(huì)調(diào)用失敗,比如超時(shí)卸亮,異常等忽妒,Hystrix能夠保證在一個(gè)依賴出問題的情況下,**不會(huì)導(dǎo)致整體服務(wù)失敗兼贸,避免級(jí)聯(lián)故障段直,以提高分布式系統(tǒng)的彈性**。
  “斷路器”本身是一種開關(guān)裝置寝受,當(dāng)某個(gè)服務(wù)單元發(fā)生故障之后,通過斷路器的故障監(jiān)控(類似熔斷保險(xiǎn)絲)罕偎,**向調(diào)用方法回一個(gè)符合預(yù)期的很澄、可處理的備選響應(yīng)(FallBack),而不是長時(shí)間的等待或者拋出調(diào)用方式無法處理的異常**颜及,這樣就保證了服務(wù)調(diào)用方的線程不會(huì)被長時(shí)間甩苛、不必要地占用,從而避免了故障在分布式系統(tǒng)中的蔓延俏站,及至雪崩讯蒲。
  [官網(wǎng)資料](https://github.com/Netflix/Hystrix/wiki)
能干嘛
服務(wù)降級(jí)、服務(wù)熔斷肄扎、服務(wù)限流墨林、接近實(shí)時(shí)的監(jiān)控
服務(wù)熔斷
熔斷機(jī)制是應(yīng)用雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制赁酝。
  當(dāng)扇出鏈路的某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長時(shí),會(huì)進(jìn)行服務(wù)的降級(jí)旭等,進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用酌呆,快速返回“錯(cuò)誤”的響應(yīng)信息。當(dāng)檢測(cè)到該節(jié)點(diǎn)微服務(wù)調(diào)用響應(yīng)正常后恢復(fù)調(diào)用鏈路搔耕。在SpringCloud框架里熔斷機(jī)制通過Hystrix實(shí)現(xiàn)隙袁。Hystrix會(huì)監(jiān)控微服務(wù)間調(diào)用的狀況,當(dāng)失敗的調(diào)用到一定閾值弃榨,缺省是 5秒內(nèi)20次調(diào)用失敗就會(huì)啟動(dòng)熔斷機(jī)制菩收。
  熔斷機(jī)制的注解是 @HystrixCommand.
服務(wù)降級(jí)
是什么:整體資源快不夠了,忍痛將某些服務(wù)先關(guān)掉鲸睛,待渡過難關(guān)娜饵,再開啟回來
  服務(wù)降級(jí)處理是在 客戶端實(shí)現(xiàn)完成的,與服務(wù)端沒什么關(guān)系腊凶。
  此時(shí)服務(wù)端provider已經(jīng)down了划咐,但是我們做了服務(wù)降級(jí)處理,讓客戶端在服務(wù)端不可用時(shí)也會(huì)獲得提示信息而不會(huì)掛起耗死服務(wù)器
服務(wù)熔斷與服務(wù)降級(jí)總結(jié)
熔斷機(jī)制 是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制钧萍。當(dāng)扇出鏈路的某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長時(shí)褐缠,會(huì)進(jìn)行服務(wù)降級(jí),進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用风瘦,快速返回“錯(cuò)誤”的響應(yīng)信息队魏。當(dāng)檢測(cè)到該節(jié)點(diǎn)微服務(wù)調(diào)用響應(yīng)正常后恢復(fù)調(diào)用鏈路。在SpringCloud框架里熔斷機(jī)制通過Hystrix實(shí)現(xiàn)万搔,Hystrix會(huì)監(jiān)控微服務(wù)間調(diào)用的狀況胡桨,當(dāng)失敗的調(diào)用到一定閾值,缺省是5秒內(nèi)調(diào)用20次瞬雹,如果失敗昧谊,就會(huì)啟動(dòng)熔斷機(jī)制。熔斷機(jī)制的注解是@HystrixCommand
  服務(wù)降級(jí)酗捌,一般是從整體負(fù)荷考慮呢诬。就是當(dāng)某個(gè)服務(wù)熔斷之后,服務(wù)器將不再被調(diào)用胖缤,此時(shí)客戶端可以自己準(zhǔn)備一個(gè)本地的fallback回調(diào)尚镰,返回一個(gè)缺省值。這樣做哪廓,雖然水平下降狗唉,但好歹可用,比直接掛掉強(qiáng)涡真。
  
  服務(wù)熔斷:一般是某個(gè)服務(wù)故障或者異常引起分俯,類似現(xiàn)實(shí)世界中的”保險(xiǎn)絲”肾筐,當(dāng)某個(gè)異常條件被觸發(fā),直接熔斷整個(gè)服務(wù)澳迫,而不是一直等到此服務(wù)超時(shí)局齿。
  服務(wù)降級(jí):所謂降級(jí),一般是從整體負(fù)荷考慮橄登。就是當(dāng)某個(gè)服務(wù)熔斷之后抓歼,服務(wù)器將不再被調(diào)用,此時(shí)客戶端可以自己準(zhǔn)備一個(gè)本地的fallbask回調(diào)拢锹,返回一個(gè)缺省值谣妻。這樣做,雖然服務(wù)水平下降卒稳,但好歹可用蹋半,比直接掛掉要強(qiáng)。
服務(wù)監(jiān)控HystrixDashboard
是什么
除了隔離依賴服務(wù)的調(diào)用以外充坑,Hystrix還提供了 準(zhǔn)實(shí)時(shí)的調(diào)用監(jiān)控(Hystrix Dashboard)减江,Hystrix會(huì)持續(xù)記錄所有通過Hystrix發(fā)送的請(qǐng)求的執(zhí)行信息,并以統(tǒng)計(jì)報(bào)表的圖形的形式展示給用戶捻爷,包括每秒執(zhí)行多少請(qǐng)求辈灼、多少成功、多少失敗等也榄。Netflix通過hystrix-metrics-event-stream項(xiàng)目實(shí)現(xiàn)了對(duì)以上指標(biāo)的監(jiān)控巡莹。SpringCloud也提供了Hystrix Dashboard的整合,對(duì)監(jiān)控內(nèi)容轉(zhuǎn)化成可視化界面甜紫。
觀察監(jiān)控窗口
啟動(dòng)后降宅,http://localhost:9001/hystrix,可以看到頁面如下
hystrix.png
監(jiān)控http://localhost:8001/hystrix.stream。如果看:7色囚霸、1圈腰根、1線
  7色:
hystrix01.png.jpeg
1圈:實(shí)心圓:共有兩種含義。
    顏色:代表實(shí)例的健康程度拓型,健康度從綠色<黃色<橙色<紅色遞減额嘿。
    大小:根據(jù)實(shí)例的請(qǐng)求流量發(fā)生變化吨述,流量越大該實(shí)心圓越大岩睁。
    通過該實(shí)心圓的展示钞脂,可以在大量的實(shí)例中快速的發(fā)現(xiàn) 故障實(shí)例和高壓力實(shí)例揣云。
hystrix02.png.jpeg

zuul路由網(wǎng)關(guān)

概述
是什么:
  zuul包含了對(duì)請(qǐng)求的 **路由** 和 **過濾** 兩個(gè)最主要的功能:
  其中路由功能能負(fù)責(zé)將外部請(qǐng)求轉(zhuǎn)發(fā)到具體的微服務(wù)實(shí)例上,是實(shí)現(xiàn)外部訪問統(tǒng)一入口的基礎(chǔ)冰啃。而過濾器功能則對(duì)請(qǐng)求的處理過程進(jìn)行干預(yù)邓夕,是實(shí)現(xiàn)請(qǐng)求檢驗(yàn)刘莹、服務(wù)聚合等功能的基礎(chǔ)。Zuul和Eureka進(jìn)行整合焚刚,將Zuul自身注冊(cè)為Eureka服務(wù)治理下的應(yīng)用点弯,同時(shí)從Eureka中獲得其他微服務(wù)的消息,也即以后的訪問微服務(wù)都是通過Zuul跳轉(zhuǎn)后獲得矿咕。
  注意:**Zuul服務(wù)最終還是會(huì)注冊(cè)進(jìn)Eureka**
  **提供=代理 + 路由 + 過濾三大功能**

  能干嘛:路由抢肛、過濾
  [官網(wǎng)資源](https://github.com/Netflix/zuul/wiki)

分布式配置中心

概述

分布式系統(tǒng)面臨的:配置問題
微服務(wù)意味著要將單體應(yīng)用中的業(yè)務(wù)拆分成一個(gè)個(gè)子服務(wù),每個(gè)服務(wù)的粒度相對(duì)較小碳柱,因此系統(tǒng)中會(huì)出現(xiàn)大量的服務(wù)捡絮。由于每個(gè)服務(wù)都需要必要的配置信息才能運(yùn)行,所以一套集中式莲镣、動(dòng)態(tài)的配置管理設(shè)施是必不可少的福稳。SpringCloud提供了ConfigServer來解決這個(gè)問題,我們每一個(gè)微服務(wù)自己帶著一個(gè)application.yml瑞侮,上百個(gè)配置文件的管理無法想象的圆。
是什么
springCloudConfig.jpeg
SpringCloud Config為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部配置支持,配置服務(wù)器為 各個(gè)不同微服務(wù)應(yīng)用 的所有環(huán)境提供了 一個(gè)中心化的外部配置.
  SpringCloud Config分為 服務(wù)端和客戶端兩部分半火。
  服務(wù)端也稱為 分布式配置中心越妈,它是一個(gè)獨(dú)立的微服務(wù)應(yīng)用,用來連接配置服務(wù)器并為客戶端提供獲得配置信息慈缔,加密/解密信息等訪問接口叮称。
  客戶端則是通過指定的配置中心來管理應(yīng)用資源,以及與業(yè)務(wù)相關(guān)的配置內(nèi)容藐鹤,并在啟動(dòng)的時(shí)候從配置中心獲取和加載配置信息瓤檐。配置服務(wù)器默認(rèn)采用git來存儲(chǔ)配置信息,這樣就有助于對(duì)環(huán)境配置進(jìn)行版本管理娱节,并且可以通過git客戶端工具來方便的管理和訪問配置內(nèi)容挠蛉。
能干嘛
1.集中管理配置文件
  2.不同環(huán)境不同配置,動(dòng)態(tài)化的配置更新肄满,分環(huán)境部署如dev/test/prod/beta/release
  3.運(yùn)行期間動(dòng)態(tài)調(diào)整配置谴古,不再需要在每個(gè)服務(wù)部署的機(jī)器上編寫配置文件,服務(wù)會(huì)向配置中心統(tǒng)一拉取配置自己的信息
  4.當(dāng)配置發(fā)生變動(dòng)時(shí)稠歉,服務(wù)不需要重啟即可感知到配置的變化并應(yīng)用新的配置
  5.將配置信息以REST接口的形式暴露     
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掰担,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子怒炸,更是在濱河造成了極大的恐慌带饱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異勺疼,居然都是意外死亡教寂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門执庐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酪耕,“玉大人,你說我怎么就攤上這事轨淌∮厮福” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵递鹉,是天一觀的道長婚被。 經(jīng)常有香客問我,道長梳虽,這世上最難降的妖魔是什么址芯? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮窜觉,結(jié)果婚禮上谷炸,老公的妹妹穿的比我還像新娘。我一直安慰自己禀挫,他們只是感情好旬陡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著语婴,像睡著了一般描孟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砰左,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天匿醒,我揣著相機(jī)與錄音,去河邊找鬼缠导。 笑死廉羔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的僻造。 我是一名探鬼主播憋他,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼髓削!你這毒婦竟也來了竹挡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤立膛,失蹤者是張志新(化名)和其女友劉穎揪罕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耸序,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲁猩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坎怪。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖廓握,靈堂內(nèi)的尸體忽然破棺而出搅窿,到底是詐尸還是另有隱情,我是刑警寧澤隙券,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布男应,位于F島的核電站,受9級(jí)特大地震影響娱仔,放射性物質(zhì)發(fā)生泄漏沐飘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一牲迫、第九天 我趴在偏房一處隱蔽的房頂上張望耐朴。 院中可真熱鬧,春花似錦盹憎、人聲如沸筛峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽影晓。三九已至,卻和暖如春檩禾,著一層夾襖步出監(jiān)牢的瞬間挂签,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工盼产, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竹握,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓辆飘,卻偏偏與公主長得像啦辐,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜈项,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354