1卿闹、什么是微服務(wù)揭糕?
2萝快、微服務(wù)之間是如何通訊的衔蹲?
3蝇庭、springcloud 與dubbo有哪些區(qū)別?
4乘陪、請(qǐng)談?wù)剬?duì)SpringBoot 和SpringCloud的理解
5吏口、分布式系統(tǒng)面臨的問(wèn)題
6奄容、什么是服務(wù)熔斷,什么是服務(wù)降級(jí)
7产徊、微服務(wù)的優(yōu)缺點(diǎn)分別是什么嫩海?說(shuō)下你在項(xiàng)目開(kāi)發(fā)中碰到的坑?
8囚痴、你所知道的微服務(wù)技術(shù)棧有哪些叁怪?請(qǐng)列舉一二
9、什么是 Eureka服務(wù)注冊(cè)與發(fā)現(xiàn)
10深滚、Eureka的基本架構(gòu)是什么奕谭?
11、作為服務(wù)注冊(cè)中心痴荐,Eureka比Zookeeper好在哪里?
12血柳、什么是 Ribbon負(fù)載均衡
13、Ribbon負(fù)載均衡能干嘛生兆?
14难捌、什么是 Feign 負(fù)載均衡
15、Feign 能干什么
16鸦难、什么是 Hystrix斷路器
17根吁、Hystrix斷路器能干嘛?
18合蔽、什么是 zuul路由網(wǎng)關(guān)
19击敌、什么是SpringCloud Config分布式配置中心
20、分布式配置中心能干嘛拴事?
1沃斤、什么是微服務(wù)?
微服務(wù)架構(gòu)是一種架構(gòu)模式或者說(shuō)是一種架構(gòu)風(fēng)格刃宵,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù)衡瓶,每個(gè)服務(wù)運(yùn)行在其獨(dú)立的自己的進(jìn)程中,服務(wù)之間互相協(xié)調(diào)牲证、互相配合哮针,為用戶提供最終價(jià)值。 服務(wù)之間采用輕量級(jí)的通信機(jī)制互相溝通(通常是基于HTTP的RESTful API)。每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建诚撵,并且能夠被獨(dú)立地部署到生產(chǎn)環(huán)境缭裆、類生產(chǎn)環(huán)境等。另外寿烟,應(yīng)盡量避免統(tǒng)一的澈驼、集中式的服務(wù)管理機(jī)制,對(duì)具體的一個(gè)服務(wù)而言筛武,應(yīng)根據(jù)業(yè)務(wù)上下文缝其,選擇合適的語(yǔ)言、工具對(duì)其進(jìn)行構(gòu)建徘六,可以有一個(gè)非常輕量級(jí)的集中式管理來(lái)協(xié)調(diào)這些服務(wù)内边,可以使用不同的語(yǔ)言來(lái)編寫服務(wù),也可以使用不同的數(shù)據(jù)存儲(chǔ)待锈。
從技術(shù)維度來(lái)說(shuō):
微服務(wù)化的核心就是將傳統(tǒng)的一站式應(yīng)用漠其,根據(jù)業(yè)務(wù)拆分成一個(gè)一個(gè)的服務(wù),徹底地去耦合,每一個(gè)微服務(wù)提供單個(gè)業(yè)務(wù)功能的服務(wù)竿音,一個(gè)服務(wù)做一件事和屎,從技術(shù)角度看就是一種小而獨(dú)立的處理過(guò)程,類似進(jìn)程概念春瞬,能夠自行單獨(dú)啟動(dòng)或銷毀柴信,擁有自己獨(dú)立的數(shù)據(jù)庫(kù)。
2宽气、微服務(wù)之間是如何通訊的随常?
① 遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Invocation)
直接通過(guò)遠(yuǎn)程過(guò)程調(diào)用來(lái)訪問(wèn)別的service。
示例:REST萄涯、gRPC绪氛、Apache、Thrift
優(yōu)點(diǎn):簡(jiǎn)單窃判,常見(jiàn)钞楼。因?yàn)闆](méi)有中間件代理,系統(tǒng)更簡(jiǎn)單
缺點(diǎn):只支持請(qǐng)求/響應(yīng)的模式袄琳,不支持別的,比如通知燃乍、請(qǐng)求/異步響應(yīng)唆樊、發(fā)布/訂閱、發(fā)布/異步響應(yīng)
降低了可用性刻蟹,因?yàn)榭蛻舳撕头?wù)端在請(qǐng)求過(guò)程中必須都是可用的
② 消息
使用異步消息來(lái)做服務(wù)間通信逗旁。服務(wù)間通過(guò)消息管道來(lái)交換消息,從而通信。
示例:Apache Kafka片效、RabbitMQ
優(yōu)點(diǎn):把客戶端和服務(wù)端解耦红伦,更松耦合 提高可用性,因?yàn)橄⒅虚g件緩存了消息淀衣,直到消費(fèi)者可以消費(fèi)
支持很多通信機(jī)制比如通知昙读、請(qǐng)求/異步響應(yīng)、發(fā)布/訂閱膨桥、發(fā)布/異步響應(yīng)
缺點(diǎn):消息中間件有額外的復(fù)雜性
3蛮浑、springcloud 與dubbo有哪些區(qū)別?
相同點(diǎn):
SpringCloud 和Dubbo可以實(shí)現(xiàn)RPC遠(yuǎn)程調(diào)用框架只嚣,可以實(shí)現(xiàn)服務(wù)治理沮稚。
不同點(diǎn):
SpringCloud是一套目前比較網(wǎng)站微服務(wù)框架了,整合了分布式常用解決方案遇到了問(wèn)題注冊(cè)中心Eureka册舞、負(fù)載均衡器Ribbon 蕴掏,客戶端調(diào)用工具Rest和Feign,分布式配置中心Config调鲸,服務(wù)保護(hù)Hystrix囚似,網(wǎng)關(guān)Zuul Gateway ,服務(wù)鏈路Zipkin线得,消息總線Bus等饶唤。
Dubbo內(nèi)部實(shí)現(xiàn)功能沒(méi)有SpringCloud強(qiáng)大(全家桶),只是實(shí)現(xiàn)服務(wù)治理贯钩,缺少分布式配置中心募狂、網(wǎng)關(guān)、鏈路角雷、總線等祸穷,如果需要用到這些組件,需要整合其他框架勺三。
表 Spring Cloud與Dubbo功能對(duì)比
功能名稱 Dubbo Spring Cloud
服務(wù)注冊(cè)中心 ZooKeeper Spring Cloud Netflix Eureka雷滚、ZooKeeper
服務(wù)調(diào)用方式 RPC REST API
服務(wù)網(wǎng)關(guān) 無(wú) Spring Cloud Netflix Zuul
斷路器 不完善 Spring Cloud Netflix Hystrix
分布式配置 無(wú) Spring Cloud Config
服務(wù)跟蹤 無(wú) Spring Cloud Sleuth
消息總線 無(wú) Spring Cloud Bus
數(shù)據(jù)流 無(wú) Spring Cloud Stream
批量任務(wù) 無(wú) Spring Cloud Task
4、請(qǐng)談?wù)剬?duì)SpringBoot 和SpringCloud的理解
① SpringBoot專注于快速方便的開(kāi)發(fā)單個(gè)個(gè)體微服務(wù)吗坚。
② SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)整理治理框架祈远,它將SpringBoot開(kāi)發(fā)的一個(gè)個(gè)單體微服務(wù)整合并管理起來(lái),
為各個(gè)微服務(wù)之間提供商源,配置管理车份、服務(wù)發(fā)現(xiàn)、斷路器牡彻、路由扫沼、微代理、事件總線、全局鎖缎除、決策競(jìng)選严就、分布式會(huì)話等等集成服務(wù)
③ SpringBoot可以離開(kāi)SpringCloud獨(dú)立使用開(kāi)發(fā)項(xiàng)目,但是SpringCloud離不開(kāi)SpringBoot器罐,屬于依賴的關(guān)系.
④ SpringBoot專注于快速梢为、方便的開(kāi)發(fā)單個(gè)微服務(wù)個(gè)體,SpringCloud關(guān)注全局的服務(wù)治理框架技矮。
Spring Boot可以離開(kāi)Spring Cloud獨(dú)立使用開(kāi)發(fā)項(xiàng)目抖誉,但是Spring Cloud離不開(kāi)Spring Boot,屬于依賴的關(guān)系衰倦。
5袒炉、分布式系統(tǒng)面臨的問(wèn)題
復(fù)雜分布式體系結(jié)構(gòu)中的應(yīng)用程序有數(shù)十個(gè)依賴關(guān)系,每個(gè)依賴關(guān)系在某些時(shí)候?qū)⒉豢杀苊獾厥 ?/p>
服務(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í)間過(guò)長(zhǎng)或者不可用夺艰,對(duì)微服務(wù)A的調(diào)用就會(huì)占用越來(lái)越多的系統(tǒng)資源,進(jìn)而引起系統(tǒng)崩潰沉衣,所謂的“雪崩效應(yīng)”.
對(duì)于高流量的應(yīng)用來(lái)說(shuō)郁副,單一的后端依賴可能會(huì)導(dǎo)致所有服務(wù)器上的所有資源都在幾秒鐘內(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)恰聘。
一般情況對(duì)于服務(wù)依賴的保護(hù)主要有以下三種解決方案:
① 熔斷模式:這種模式主要是參考電路熔斷,如果一條線路電壓過(guò)高吸占,保險(xiǎn)絲會(huì)熔斷晴叨,防止火災(zāi)。放到我們的系統(tǒng)中旬昭,如果某個(gè)目標(biāo)服務(wù)調(diào)用慢或者有大量超時(shí)篙螟,此時(shí),熔斷該服務(wù)的調(diào)用问拘,對(duì)于后續(xù)調(diào)用請(qǐng)求,不在繼續(xù)調(diào)用目標(biāo)服務(wù),直接返回骤坐,快速釋放資源绪杏。如果目標(biāo)服務(wù)情況好轉(zhuǎn)則恢復(fù)調(diào)用。
② 隔離模式:這種模式就像對(duì)系統(tǒng)請(qǐng)求按類型劃分成一個(gè)個(gè)小島的一樣纽绍,當(dāng)某個(gè)小島被火少光了蕾久,不會(huì)影響到其他的小島。例如可以對(duì)不同類型的請(qǐng)求使用線程池來(lái)資源隔離拌夏,每種類型的請(qǐng)求互不影響僧著,如果一種類型的請(qǐng)求線程資源耗盡,則對(duì)后續(xù)的該類型請(qǐng)求直接返回障簿,不再調(diào)用后續(xù)資源盹愚。這種模式使用場(chǎng)景非常多,例如將一個(gè)服務(wù)拆開(kāi)站故,對(duì)于重要的服務(wù)使用單獨(dú)服務(wù)器來(lái)部署皆怕,再或者公司最近推廣的多中心。
③ 限流模式:上述的熔斷模式和隔離模式都屬于出錯(cuò)后的容錯(cuò)處理機(jī)制西篓,而限流模式則可以稱為預(yù)防模式愈腾。限流模式主要是提前對(duì)各個(gè)類型的請(qǐng)求設(shè)置最高的QPS閾值,若高于設(shè)置的閾值則對(duì)該請(qǐng)求直接返回岂津,不再調(diào)用后續(xù)資源虱黄。這種模式不能解決服務(wù)依賴的問(wèn)題,只能解決系統(tǒng)整體資源分配問(wèn)題吮成,因?yàn)闆](méi)有被限流的請(qǐng)求依然有可能造成雪崩效應(yīng)橱乱。
6、什么是服務(wù)熔斷赁豆,什么是服務(wù)降級(jí)
服務(wù)熔斷
熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制仅醇。
當(dāng)扇出鏈路的某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長(zhǎng)時(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ī)制通過(guò)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。
Hystrix服務(wù)降級(jí)
其實(shí)就是線程池中單個(gè)線程障處理糠赦,防止單個(gè)線程請(qǐng)求時(shí)間太長(zhǎng)会傲,導(dǎo)致資源長(zhǎng)期被占有而得不到釋放锅棕,從而導(dǎo)致線程池被快速占用完,導(dǎo)致服務(wù)崩潰淌山。
Hystrix能解決如下問(wèn)題:
① 請(qǐng)求超時(shí)降級(jí)裸燎,線程資源不足降級(jí),降級(jí)之后可以返回自定義數(shù)據(jù)
② 線程池隔離降級(jí)泼疑,分布式服務(wù)可以針對(duì)不同的服務(wù)使用不同的線程池德绿,從而互不影響
③ 自動(dòng)觸發(fā)降級(jí)與恢復(fù)
④ 實(shí)現(xiàn)請(qǐng)求緩存和請(qǐng)求合并
7、微服務(wù)的優(yōu)缺點(diǎn)分別是什么退渗?說(shuō)下你在項(xiàng)目開(kāi)發(fā)中碰到的坑移稳?
優(yōu)點(diǎn)
每個(gè)服務(wù)足夠內(nèi)聚,足夠小会油,代碼容易理解這樣能聚焦一個(gè)指定的業(yè)務(wù)功能或業(yè)務(wù)需求
開(kāi)發(fā)簡(jiǎn)單个粱、開(kāi)發(fā)效率提高,一個(gè)服務(wù)可能就是專一的只干一件事钞啸。
微服務(wù)能夠被小團(tuán)隊(duì)單獨(dú)開(kāi)發(fā)几蜻,這個(gè)小團(tuán)隊(duì)是2到5人的開(kāi)發(fā)人員組成。
微服務(wù)是松耦合的体斩,是有功能意義的服務(wù)梭稚,無(wú)論是在開(kāi)發(fā)階段或部署階段都是獨(dú)立的。
微服務(wù)能使用不同的語(yǔ)言開(kāi)發(fā)絮吵。
易于和第三方集成弧烤,微服務(wù)允許容易且靈活的方式集成自動(dòng)部署,通過(guò)持續(xù)集成工具蹬敲,如Jenkins, Hudson, bamboo 暇昂。
微服務(wù)易于被一個(gè)開(kāi)發(fā)人員理解,修改和維護(hù)伴嗡,這樣小團(tuán)隊(duì)能夠更關(guān)注自己的工作成果急波。無(wú)需通過(guò)合作才能體現(xiàn)價(jià)值。
微服務(wù)允許你利用融合最新技術(shù)瘪校。
微服務(wù)只是業(yè)務(wù)邏輯的代碼澄暮,不會(huì)和HTML,CSS 或其他界面組件混合。
每個(gè)微服務(wù)都有自己的存儲(chǔ)能力阱扬,可以有自己的數(shù)據(jù)庫(kù)泣懊。也可以有統(tǒng)一數(shù)據(jù)庫(kù)。
缺點(diǎn)
開(kāi)發(fā)人員要處理分布式系統(tǒng)的復(fù)雜性
多服務(wù)運(yùn)維難度麻惶,隨著服務(wù)的增加馍刮,運(yùn)維的壓力也在增大
系統(tǒng)部署依賴
服務(wù)間通信成本
數(shù)據(jù)一致性
系統(tǒng)集成測(cè)試
性能監(jiān)控……
8、你所知道的微服務(wù)技術(shù)棧有哪些窃蹋?請(qǐng)列舉一二
服務(wù)開(kāi)發(fā)
Springboot卡啰、Spring静稻、SpringMVC
服務(wù)配置與管理
Netflix公司的Archaius、阿里的Diamond等
服務(wù)注冊(cè)與發(fā)現(xiàn)
Eureka碎乃、Consul姊扔、Zookeeper等
服務(wù)調(diào)用
Rest惠奸、RPC梅誓、gRPC
服務(wù)熔斷器
Hystrix、Envoy等
負(fù)載均衡
Ribbon佛南、Nginx等
服務(wù)接口調(diào)用(客戶端調(diào)用服務(wù)的簡(jiǎn)化工具)
Feign等
消息隊(duì)列
Kafka梗掰、RabbitMQ、ActiveMQ等
服務(wù)配置中心管理
SpringCloudConfig嗅回、Chef等
服務(wù)路由(API網(wǎng)關(guān))
Zuul等
服務(wù)監(jiān)控
Zabbix及穗、Nagios、Metrics绵载、Spectator等
全鏈路追蹤
Zipkin埂陆,Brave、Dapper等
服務(wù)部署
Docker娃豹、OpenStack焚虱、Kubernetes等
數(shù)據(jù)流操作開(kāi)發(fā)包
SpringCloud Stream(封裝與Redis,Rabbit、Kafka等發(fā)送接收消息)
事件消息總線
Spring Cloud Bus
9懂版、什么是 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)來(lái)說(shuō)是非常重要的蓬抄,有了服務(wù)發(fā)現(xiàn)與注冊(cè)丰嘉,只需要使用服務(wù)的標(biāo)識(shí)符,就可以訪問(wèn)到服務(wù)嚷缭,而不需要修改服務(wù)調(diào)用的配置文件了饮亏。功能類似于dubbo的注冊(cè)中心,比如Zookeeper峭状。
10克滴、Eureka的基本架構(gòu)是什么?
Spring Cloud 封裝了 Netflix 公司開(kāi)發(fā)的 Eureka 模塊來(lái)實(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ù)人員就可以通過(guò) Eureka Server 來(lái)監(jiān)控系統(tǒng)中各個(gè)微服務(wù)是否正常運(yùn)行。SpringCloud 的一些其他模塊(比如Zuul)就可以通過(guò) Eureka Server 來(lái)發(fā)現(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)的信息可以在界面中直觀的看到
EurekaClient是一個(gè)Java客戶端
用于簡(jiǎn)化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)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳挣跋,EurekaServer將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除(默認(rèn)90秒)
11、作為服務(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膨报。
Zookeeper保證CP
當(dāng)向注冊(cè)中心查詢服務(wù)列表時(shí),我們可以容忍注冊(cè)中心返回的是幾分鐘以前的注冊(cè)信息适荣,但不能接受服務(wù)直接down掉不可用现柠。也就是說(shuō),服務(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ì)重新進(jìn)行l(wèi)eader選舉丈氓。問(wèn)題在于周循,選舉leader的時(shí)間太長(zhǎng),30~120s,且選舉期間整個(gè)zk集群都是不可用的万俗,這就導(dǎo)致在選舉期間注冊(cè)服務(wù)癱瘓湾笛。在云部署的環(huán)境下,因網(wǎng)絡(luò)問(wèn)題使得zk集群失去master節(jié)點(diǎn)是較大概率會(huì)發(fā)生的事闰歪,雖然服務(wù)能夠最終恢復(fù)嚎研,但是漫長(zhǎng)的選舉時(shí)間導(dǎo)致的注冊(cè)長(zhǎng)期不可用是不能容忍的。
Eureka保證AP
Eureka看明白了這一點(diǎn)库倘,因此在設(shè)計(jì)時(shí)就優(yōu)先保證可用性临扮。Eureka各個(gè)節(jié)點(diǎn)都是平等的论矾,幾個(gè)節(jié)點(diǎn)掛掉不會(huì)影響正常節(jié)點(diǎn)的工作,剩余的節(jié)點(diǎn)依然可以提供注冊(cè)和查詢服務(wù)杆勇。而Eureka的客戶端在向某個(gè)Eureka注冊(cè)或時(shí)如果發(fā)現(xiàn)連接失敗贪壳,則會(huì)自動(dòng)切換至其它節(jié)點(diǎn),只要有一臺(tái)Eureka還在蚜退,就能保證注冊(cè)服務(wù)可用(保證可用性)闰靴,只不過(guò)查到的信息可能不是最新的(不保證強(qiáng)一致性)。
除此之外关霸,Eureka還有一種自我保護(hù)機(jī)制传黄,如果在15分鐘內(nèi)超過(guò)85%的節(jié)點(diǎn)都沒(méi)有正常的心跳,那么Eureka就認(rèn)為客戶端與注冊(cè)中心出現(xiàn)了網(wǎng)絡(luò)故障队寇,此時(shí)會(huì)出現(xiàn)以下幾種情況:
Eureka不再?gòu)淖?cè)列表中移除因?yàn)殚L(zhǎng)時(shí)間沒(méi)收到心跳而應(yīng)該過(guò)期的服務(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è)注冊(cè)服務(wù)癱瘓凡伊。
12零渐、什么是 Ribbon負(fù)載均衡
Spring Cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套客戶端 負(fù)載均衡的工具。
簡(jiǎn)單的說(shuō)系忙,Ribbon是Netflix發(fā)布的開(kāi)源項(xiàng)目诵盼,主要功能是提供客戶端的軟件負(fù)載均衡算法,將Netflix的中間層服務(wù)連接在一起银还。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí)风宁,重試等。簡(jiǎn)單的說(shuō)蛹疯,就是在配置文件中列出Load Balancer(簡(jiǎn)稱LB)后面所有的機(jī)器戒财,Ribbon會(huì)自動(dòng)的幫助你基于某種規(guī)則(如簡(jiǎn)單輪詢,隨機(jī)連接等)去連接這些機(jī)器捺弦。我們也很容易使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法饮寞。
13、Ribbon負(fù)載均衡能干嘛列吼?
LB(負(fù)載均衡)
LB幽崩,即負(fù)載均衡(Load Balance),在微服務(wù)或分布式集群中經(jīng)常用的一種應(yīng)用寞钥。
負(fù)載均衡簡(jiǎn)單的說(shuō)就是將用戶的請(qǐng)求平攤的分配到多個(gè)服務(wù)上慌申,從而達(dá)到系統(tǒng)的HA。
常見(jiàn)的負(fù)載均衡有軟件Nginx凑耻,LVS太示,硬件 F5等柠贤。
相應(yīng)的在中間件,例如:dubbo和SpringCloud中均給我們提供了負(fù)載均衡类缤,SpringCloud的負(fù)載均衡算法可以自定義臼勉。
集中式LB
即在服務(wù)的消費(fèi)方和提供方之間使用獨(dú)立的LB設(shè)施(可以是硬件,如F5, 也可以是軟件餐弱,如nginx), 由該設(shè)施負(fù)責(zé)把訪問(wèn)請(qǐng)求通過(guò)某種策略轉(zhuǎn)發(fā)至服務(wù)的提供方宴霸;
進(jìn)程內(nèi)LB
將LB邏輯集成到消費(fèi)方,消費(fèi)方從服務(wù)注冊(cè)中心獲知有哪些地址可用膏蚓,然后自己再?gòu)倪@些地址中選擇出一個(gè)合適的服務(wù)器瓢谢。
注意: Ribbon就屬于進(jìn)程內(nèi)LB,它只是一個(gè)類庫(kù)驮瞧,集成于消費(fèi)方進(jìn)程氓扛,消費(fèi)方通過(guò)它來(lái)獲取到服務(wù)提供方的地址。
14论笔、什么是 Feign 負(fù)載均衡
Feign是一個(gè)聲明式WebService客戶端采郎。使用Feign能讓編寫Web Service客戶端更加簡(jiǎn)單, 它的使用方法是定義一個(gè)接口,然后在上面添加注解狂魔,同時(shí)也支持JAX-RS標(biāo)準(zhǔn)的注解蒜埋。Feign也支持可拔插式的編碼器和解碼器。Spring Cloud對(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è)接口,然后在上面添加注解即可蚯撩。
15础倍、Feign 能干什么
Feign旨在使編寫Java Http客戶端變得更容易。
前面在使用Ribbon+RestTemplate時(shí)胎挎,利用RestTemplate對(duì)http請(qǐng)求的封裝處理沟启,形成了一套模版化的調(diào)用方法。但是在實(shí)際開(kāi)發(fā)中犹菇,由于對(duì)服務(wù)依賴的調(diào)用可能不止一處德迹,往往一個(gè)接口會(huì)被多處調(diào)用,所以通常都會(huì)針對(duì)每個(gè)微服務(wù)自行封裝一些客戶端類來(lái)包裝這些依賴服務(wù)的調(diào)用揭芍。所以胳搞,F(xiàn)eign在此基礎(chǔ)上做了進(jìn)一步封裝,由他來(lái)幫助我們定義和實(shí)現(xiàn)依賴服務(wù)接口的定義。在Feign的實(shí)現(xiàn)下肌毅,我們只需創(chuàng)建一個(gè)接口并使用注解的方式來(lái)配置它(以前是Dao接口上面標(biāo)注Mapper注解,現(xiàn)在是一個(gè)微服務(wù)接口上面標(biāo)注一個(gè)Feign注解即可)筷转,即可完成對(duì)服務(wù)提供方的接口綁定,簡(jiǎn)化了使用Spring cloud Ribbon時(shí)悬而,自動(dòng)封裝服務(wù)調(diào)用客戶端的開(kāi)發(fā)量呜舒。
Feign集成了Ribbon
利用Ribbon維護(hù)了MicroServiceCloud-Dept的服務(wù)列表信息,并且通過(guò)輪詢實(shí)現(xiàn)了客戶端的負(fù)載均衡笨奠。而與Ribbon不同的是袭蝗,通過(guò)feign只需要定義服務(wù)綁定接口且以聲明式的方法,優(yōu)雅而簡(jiǎn)單的實(shí)現(xiàn)了服務(wù)調(diào)用
Feign通過(guò)接口的方法調(diào)用Rest服務(wù)(之前是Ribbon+RestTemplate)般婆,該請(qǐng)求發(fā)送給Eureka服務(wù)器(http://MICROSERVICECLOUD-DEPT/dept/list),
通過(guò)Feign直接找到服務(wù)接口到腥,由于在進(jìn)行服務(wù)調(diào)用的時(shí)候融合了Ribbon技術(shù),所以也支持負(fù)載均衡作用蔚袍。
16乡范、什么是 Hystrix斷路器
Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲和容錯(cuò)的開(kāi)源庫(kù),在分布式系統(tǒng)里页响,許多依賴不可避免的會(huì)調(diào)用失敗篓足,比如超時(shí)、異常等闰蚕, Hystrix能夠保證在一個(gè)依賴出問(wèn)題的情況下,不會(huì)導(dǎo)致整體服務(wù)失敗连舍,避免級(jí)聯(lián)故障没陡,以提高分布式系統(tǒng)的彈性。
“斷路器”本身是一種開(kāi)關(guān)裝置索赏,當(dāng)某個(gè)服務(wù)單元發(fā)生故障之后盼玄,通過(guò)斷路器的故障監(jiān)控(類似熔斷保險(xiǎn)絲),向調(diào)用方返回一個(gè)符合預(yù)期的潜腻、可處理的備選響應(yīng)(FallBack)埃儿,而不是長(zhǎng)時(shí)間的等待或者拋出調(diào)用方無(wú)法處理的異常,這樣就保證了服務(wù)調(diào)用方的線程不會(huì)被長(zhǎng)時(shí)間融涣、不必要地占用童番,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩威鹿。
17剃斧、Hystrix斷路器能干嘛?
① 服務(wù)降級(jí)
整體資源快不夠了忽你,忍痛將某些服務(wù)先關(guān)掉幼东,待渡過(guò)難關(guān),再開(kāi)啟回來(lái)
② 服務(wù)熔斷
熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制。
當(dāng)扇出鏈路的某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長(zhǎng)時(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ī)制通過(guò)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ù)限流
④ 接近實(shí)時(shí)的監(jiān)控
除了隔離依賴服務(wù)的調(diào)用以外嘁灯,Hystrix還提供了準(zhǔn)實(shí)時(shí)的調(diào)用監(jiān)控(Hystrix
Dashboard),Hystrix會(huì)持續(xù)地記錄所有通過(guò)Hystrix發(fā)起的請(qǐng)求的執(zhí)行信息躲舌,并以統(tǒng)計(jì)報(bào)表和圖形的形式展示給用戶丑婿,包括每秒執(zhí)行多少請(qǐng)求多少成功,多少失敗等没卸。Netflix通過(guò)hystrix-metrics-event-stream項(xiàng)目實(shí)現(xiàn)了對(duì)以上指標(biāo)的監(jiān)控羹奉。Spring
Cloud也提供了Hystrix Dashboard的整合,對(duì)監(jiān)控內(nèi)容轉(zhuǎn)化成可視化界面约计。
18诀拭、什么是 zuul路由網(wǎng)關(guān)
Zuul 包含了對(duì)請(qǐng)求的路由和過(guò)濾兩個(gè)最主要的功能:
其中路由功能負(fù)責(zé)將外部請(qǐng)求轉(zhuǎn)發(fā)到具體的微服務(wù)實(shí)例上,是實(shí)現(xiàn)外部訪問(wèn)統(tǒng)一入口的基礎(chǔ)而過(guò)濾器功能則負(fù)責(zé)對(duì)請(qǐng)求的處理過(guò)程進(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èn)微服務(wù)都是通過(guò)Zuul跳轉(zhuǎn)后獲得。
注意: Zuul服務(wù)最終還是會(huì)注冊(cè)進(jìn)Eureka
提供=代理+路由+過(guò)濾 三大功能
19蜘犁、什么是SpringCloud Config分布式配置中心
SpringCloud Config為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部配置支持翰苫,配置服務(wù)器為各個(gè)不同微服務(wù)應(yīng)用的所有環(huán)境提供了一個(gè)中心化的外部配置。
20这橙、分布式配置中心能干嘛奏窑?
① 集中管理配置文件,不同環(huán)境不同配置析恋,動(dòng)態(tài)化的配置更新良哲,分環(huán)境部署比如dev/test/prod/beta/release
② 運(yùn)行期間動(dòng)態(tài)調(diào)整配置,不再需要在每個(gè)服務(wù)部署的機(jī)器上編寫配置文件助隧,服務(wù)會(huì)向配置中心統(tǒng)一拉取配置自己的信息
③ 當(dāng)配置發(fā)生變動(dòng)時(shí)筑凫,服務(wù)不需要重啟==即可感知到配置的變化并應(yīng)用新的配置將配置信息以REST接口的形式暴露
————————————————
版權(quán)聲明:本文為CSDN博主「揚(yáng)帆向夯祝」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議巍实,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明滓技。
原文鏈接:https://blog.csdn.net/weixin_43570367/article/details/103809848