SpringCloud面试题分享
1、什么是Spring Cloud?
Spring cloud 流應(yīng)用程序啟動器是基于 Spring Boot 的 Spring 集成應(yīng)用程序,提供與外部系統(tǒng)的集成,更專注于服務(wù)治理。Spring cloud Task,一個生命周期短暫的微服務(wù)框架,用于快速構(gòu)建執(zhí)行有限數(shù)據(jù)處理的應(yīng)用程序。
2、Spring Cloud和Dubbo的區(qū)別
- Dubbo關(guān)注的領(lǐng)域是Spring Cloud的一個子集。Dubbo專注于服務(wù)治理,其在服務(wù)治理、灰度發(fā)布、流量分發(fā)方面比Spring Cloud更全面。Spring Cloud覆蓋整個微服務(wù)架構(gòu)領(lǐng)域。
- Dubbo使用RPC調(diào)用效率高一些,Spring Cloud使用HTTP調(diào)用效率低,使用更簡單。
3、REST和RPC的區(qū)別
- REST風(fēng)格的系統(tǒng)交互更方便,RPC調(diào)用服務(wù)提供方和調(diào)用方式之間依賴太強(qiáng)。
- REST調(diào)用系統(tǒng)性能較低,RPC調(diào)用效率比REST高。
- REST的靈活性可以跨系統(tǒng)跨語言調(diào)用,RPC只能在同語言內(nèi)調(diào)用。
- REST可以和Swagger等工具整合,自動輸出接口API文檔。
4、SpringCloud如何實(shí)現(xiàn)服務(wù)的注冊和發(fā)現(xiàn)
5、什么是服務(wù)熔斷和服務(wù)降級?
- 熔斷機(jī)制是應(yīng)對雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制。當(dāng)某個微服務(wù)不可用或者響應(yīng)時間太長時,會進(jìn)行服務(wù)降級,進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用,快速返回“錯誤”的響應(yīng)信息。當(dāng)檢測到該節(jié)點(diǎn)微服務(wù)調(diào)用響應(yīng)正常后恢復(fù)調(diào)用鏈路。在SpringCloud框架里熔斷機(jī)制通過Hystrix實(shí)現(xiàn),Hystrix會監(jiān)控微服務(wù)間調(diào)用的狀況,當(dāng)失敗的調(diào)用到一定閾值,缺省是5秒內(nèi)調(diào)用20次,如果失敗,就會啟動熔斷機(jī)制。
- 服務(wù)降級,一般是從整體負(fù)荷考慮。就是當(dāng)某個服務(wù)熔斷之后,服務(wù)器將不再被調(diào)用,此時客戶端可以自己準(zhǔn)備一個本地的fallback回調(diào),返回一個缺省值。這樣做,雖然會出現(xiàn)局部的錯誤,但可以避免因?yàn)橐粋€服務(wù)掛機(jī),而影響到整個架構(gòu)的穩(wěn)定性。
Hystrix相關(guān)注解:
- @EnableHystrix:開啟熔斷
- @HystrixCommand(fallbackMethod=”XXX”):聲明一個失敗回滾處理函數(shù)XXX,當(dāng)被注解的方法執(zhí)行超時(默認(rèn)是1000毫秒),就會執(zhí)行fallback函數(shù),返回錯誤提示。
6、項(xiàng)目中zuul常用的功能
- 提供動態(tài)路由
- 提供安全、鑒權(quán)處理
- 跨域處理
- 全局動態(tài)路由的hystrix(熔斷、降級、限流)處理
7、服務(wù)網(wǎng)關(guān)的作用
- 簡化客戶端調(diào)用復(fù)雜度,統(tǒng)一處理外部請求。
- 數(shù)據(jù)裁剪以及聚合,根據(jù)不同的接口需求,對數(shù)據(jù)加工后對外。
- 多渠道支持,針對不同的客戶端提供不同的網(wǎng)關(guān)支持。
- 遺留系統(tǒng)的微服務(wù)化改造,可以作為新老系統(tǒng)的中轉(zhuǎn)組件。
- 統(tǒng)一處理調(diào)用過程中的安全、權(quán)限問題。
Spring Cloud中的網(wǎng)關(guān)有:Zuul和Spring Cloud Gateway,最新版本中推薦使用后者。
8、ribbon和feign區(qū)別
- Ribbon添加maven依賴 spring-starter-ribbon 使用@RibbonClient(value="服務(wù)名稱") 使用RestTemplate調(diào)用遠(yuǎn)程服務(wù)對應(yīng)的方法。
- feign添加maven依賴 spring-starter-feign 服務(wù)提供方提供對外接口 調(diào)用方使用 在接口上使用@FeignClient("指定服務(wù)名")
Ribbon和Feign的區(qū)別:
Ribbon和Feign都是用于調(diào)用其他服務(wù)的,不過方式不同。
Feign則是在Ribbon的基礎(chǔ)上進(jìn)行了一次改進(jìn),采用接口的方式,將需要調(diào)用的其他服務(wù)的方法定義成抽象方法即可,
不需要自己構(gòu)建http請求。不過要注意的是抽象方法的注解、方法簽名要和提供服務(wù)的方法完全一致。
9、ribbon的負(fù)載均衡策略
10、簡述什么是CAP,并說明Eureka包含CAP中的哪些?
CAP理論:一個分布式系統(tǒng)不可能同時滿足C (一致性),A(可用性),P(分區(qū)容錯性).由于分區(qū)容錯性P在分布式系統(tǒng)中是必須要保證的,因此我們只能從A和C中進(jìn)行權(quán)衡.
Eureka 遵守 AP
- Eureka各個節(jié)點(diǎn)都是平等的,幾個節(jié)點(diǎn)掛掉不會影響正常節(jié)點(diǎn)的工作,神域的節(jié)點(diǎn)依然可以提供注冊和查詢服務(wù)。
- 而Eureka的客戶端在向某個Eureka 注冊或查詢是如果發(fā)現(xiàn)連接失敗,則會自動切換至其他節(jié)點(diǎn),只要有一臺Eureka還在,就能保證注冊服務(wù)可用(保證可用性),只不過查的信息可能不最新的不保證強(qiáng)一致性)。
11、Eureka和zookeeper都可以提供服務(wù)注冊與發(fā)現(xiàn)的功能,請說說兩個的區(qū)別?
- Zookeeper保證了CP(C:一致性,P:分區(qū)容錯性)
- Eureka保證了AP(A:高可用)
- Eureka不在從注冊列表中移除因?yàn)殚L時間沒有收到心跳而應(yīng)該過期的服務(wù)。
- Eureka仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其他節(jié)點(diǎn)上(即保證當(dāng)前節(jié)點(diǎn)仍然可用)。
- 當(dāng)網(wǎng)絡(luò)穩(wěn)定時,當(dāng)前實(shí)例新的注冊信息會被同步到其他節(jié)點(diǎn)。
因此,Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況,而不會像Zookeeper那樣使整個微服務(wù)癱瘓。
12、鏈路跟蹤Sleuth
當(dāng)我們項(xiàng)目中引入Spring Cloud Sleuth后,每次鏈路請求都會添加一串追蹤信息,格式是[server-name, main-traceId,sub-spanId,boolean]:
- server-name:服務(wù)結(jié)點(diǎn)名稱。
- main-traceId:一條鏈路唯一的ID,為TraceID。
- sub-spanId:鏈路中每一環(huán)的ID,為SpanID。
- boolean:是否將信息輸出到Zipkin等服務(wù)收集和展示。
Sleuth的實(shí)現(xiàn)是基于HTTP的,為了在數(shù)據(jù)的收集過程中不能影響到正常業(yè)務(wù),Sleuth會在每個請求的Header上添加跟蹤需求的重要信息。這樣在數(shù)據(jù)收集時,只需要將Header上的相關(guān)信息發(fā)送給對應(yīng)的圖像工具即可,圖像工具根據(jù)上傳的數(shù)據(jù),按照Span對應(yīng)的邏輯進(jìn)行分析、展示。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的SpringCloud面试题分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php对mysql的操作教程,php与M
- 下一篇: Web前端期末大作业--绿色自适应医疗健