javascript
微服务面试题 - Spring Cloud
點擊上方“Java后端技術(shù)之路”,選擇“置頂或者星標”
與你一起成長
微服務(wù)面試題
一、Spring Cloud有哪些特點?
Spring cloud 流應(yīng)用程序啟動器是基于 Spring Boot 的 Spring 集成應(yīng)用程序,提供與外部系統(tǒng)的集成。Spring cloud Task,一個生命周期短暫的微服務(wù)框架,用于快速構(gòu)建執(zhí)行有限數(shù)據(jù)處理的應(yīng)用程序。
特點:
1、約定優(yōu)于配置。
2、適用于各種環(huán)境。開發(fā)、部署PC Server或各種云環(huán)境如阿里云、AWS等。
3、隱藏了組件的復(fù)雜性,并提供聲明式、無xml的配置方式。
4、開箱即用快速啟動。
5、輕量級組件。
6、組件豐富:Eureka、ribbon、Hystrix、config、bus、zuul。
7、選型中立,例如spring cloud支持Eureka、consul、zookeeper。
?
二、CAP與Base理論
CAP是一個已經(jīng)經(jīng)過證實的理論:一個分布式系統(tǒng)最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區(qū)容錯性(Partition tolerance)這三項中的兩項。
?
BASE理論是對CAP理論的延伸,思想是即使無法做到強一致性(CAP的一致性就是強一致性),但可以采用適當?shù)牟扇∪跻恢滦?#xff0c;即最終一致性。
BASE是指基本可用(Basically Available)、軟狀態(tài)( Soft State)、最終一致性( Eventual Consistency)。
?
三、Spring cloud與Dubbo的區(qū)別
(1)服務(wù)調(diào)用方式 dubbo是RPC springcloud Rest Api;
(2)注冊中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper、consul;
(3)服務(wù)網(wǎng)關(guān),dubbo本身沒有實現(xiàn),只能通過其他第三方技術(shù)整合,springcloud有Zuul路由網(wǎng)關(guān),作為路由服務(wù)器,進行消費者的請求分發(fā),springcloud支持斷路器,與git完美集成配置文件支持版本控制,事物總線實現(xiàn)配置文件的更新與服務(wù)自動裝配等等一系列的微服務(wù)架構(gòu)要素。
四、Spring Boot與 Spring cloud之間的關(guān)系
1、SpringBoot專注于快速、方便的開發(fā)單個微服務(wù)個體,SpringCloud關(guān)注全局的服務(wù)治理框架。
2、SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)整理治理框架,它將SpringBoot開發(fā)的一個個單體微服務(wù)整合并管理起來,為各個微服務(wù)之間提供,配置管理、服務(wù)發(fā)現(xiàn)、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等集成服務(wù)。
3、SpringBoot可以離開SpringCloud獨立使用開發(fā)項目, 但是SpringCloud離不開SpringBoot ,屬于依賴的關(guān)系。
?
五、負載均衡的意義
負載均衡可以改善跨計算機、計算機集群、網(wǎng)絡(luò)連接、中央處理單元或磁盤驅(qū)動等多種計算資源的工作負載分布。負載均衡意在優(yōu)化資源分配,最大化吞吐量,最小化響應(yīng)時間并避免任一資源的過載。負載均衡通常會涉及專用硬件或軟件,例如F5、nginx、ribbon。
?
六、什么是Hystrix,如何做的容錯
服務(wù)隔離:如果整個系統(tǒng)雪崩是由于一個接口導致的,由于這一個接口響應(yīng)不及時導致問題,那么我們就有必要對這個接口進行隔離,就是只允許這個接口最多能接受多少的并發(fā),做了這樣的限制后,該接口的主機就會空余線程出來接收其他的情況,不會被哪個壞了的接口占用滿。Hystrix 就是一個不錯的服務(wù)隔離框架。
?
服務(wù)雪崩:雪崩是系統(tǒng)中的蝴蝶效應(yīng)導致其發(fā)生的原因多種多樣,有不合理的容量設(shè)計,或者是高并發(fā)下某一個方法響應(yīng)變慢,亦或是某臺機器的資源耗盡。從源頭上我們無法完全杜絕雪崩源頭的發(fā)生,但是雪崩的根本原因來源于服務(wù)之間的強依賴,所以我們可以提前評估。當整個微服務(wù)系統(tǒng)中,有一個節(jié)點出現(xiàn)異常情況,就有可能在高并發(fā)的情況下出現(xiàn)雪崩,導致調(diào)用它的上游系統(tǒng)出現(xiàn)響應(yīng)延遲,響應(yīng)延遲就會導致 tomcat 連接本耗盡,導致該服務(wù)節(jié)點不能正常的接收到正常的情況,這就是服務(wù)雪崩行為。
?
Hystrix兩種隔離策略:線程池隔離THREAD?、信號量SEMAPHORE隔離。
?
熔斷發(fā)生的三個必要條件:
1、有一個統(tǒng)計的時間周期,滾動窗口
相應(yīng)的配置屬性metrics.rollingStats.timeInMilliseconds 默認 10000 毫秒
2、請求次數(shù)必須達到一定數(shù)量
相應(yīng)的配置屬性 circuitBreaker.requestVolumeThreshold默認 20 次
3、失敗率達到默認失敗率
相應(yīng)的配置屬性 circuitBreaker.errorThresholdPercentage 默認 50%
?
用到的注解:
@EnableCircuitBreaker
@HystrixCommand(fallbackMethod="queryOrderByIdFallback",commandKey = "queryOrderById",groupKey = "querygroup-one",commandProperties = { @HystrixProperty(name ="execution.isolation.strategy", value="THREAD")},threadPoolKey = "queryOrderByIdhystrixJackpool")
?
Hystrix有哪幾種狀態(tài):開啟、關(guān)閉、半開啟。
?
?
參考文檔:https://www.toutiao.com/i6805112656714793475/
?
七、介紹一下Eureka
?
?
?
用到的注解:
@EnableEurekaServer // 注冊服務(wù)中心
@EnableEurekaClient // 服務(wù)提供端
?
服務(wù)注冊與續(xù)約:首先服務(wù)注冊到eureka server上,注冊之后服務(wù)提供者會維護一個心跳,用來告訴eureka server “我還OK”,也就是續(xù)約Renew,心跳默認三十秒檢測一次。
服務(wù)剔除:當服務(wù)實例正常下線時,服務(wù)實例會告訴eureka server “我要下線了”,將服務(wù)狀態(tài)改為 down。有時服務(wù)會出現(xiàn)非正常下線,eureka server 在啟動時會去創(chuàng)建一個定時任務(wù)檢測服務(wù)提供者,剔除服務(wù),檢測時間默認90秒。
自我保護:eureka server 會去將心跳在15分鐘內(nèi)是否低于85%,如果出現(xiàn)eureka會將他們保護起來,讓這些實例不會過期,這樣客戶端就很容易拿到不存在的實例,這就需要容錯機制,客戶端重試、斷路器等機制。
?
zone與region:
1、機房隔離
2、Ribbon默認優(yōu)先訪問一個zone中的服務(wù)實例
?
八、介紹一下Ribbon
spring Cloud Ribbon?是一個客戶端的負載均衡器,它提供對大量的HTTP和TCP客戶端的訪問控制。
客戶端負載均衡即是當瀏覽器向后臺發(fā)出請求的時候,客戶端會向 Eureka Server 讀取注冊到服務(wù)器的可用服務(wù)信息列表,然后根據(jù)設(shè)定的負載均衡策略(沒有設(shè)置即用默認的),抉擇出向哪臺服務(wù)器發(fā)送請求。
?
重要注解:@Loadbalanced 注解修飾RestTemplate
?
負載均衡策略:線性輪詢、隨機、重試機制。
?
Ribbon內(nèi)部有一個chooseServer()方法用于選擇服務(wù)。
?
九、聊聊Feign
Feign使代碼變得整潔,內(nèi)部封裝了Ribbon的負載以及Hystrix。但是性能會比較差,建議復(fù)雜業(yè)務(wù)不要使用。
?
?
十、為什么使用Spring Cloud Bus
Spring Cloud Bus 提供了跨多個實例刷新配置的功能
?
十一、什么是SpringCloudConfig?
在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多,為了方便服務(wù)配置文件統(tǒng)一管理,實時更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。
使用:
(1)添加pom依賴
(2)配置文件添加相關(guān)配置
(3)啟動類添加注解@EnableConfigServer
十二、Spring Cloud Gateway?
Spring Cloud Gateway是Spring Cloud官方推出的第二代網(wǎng)關(guān)框架,取代Zuul網(wǎng)關(guān)。網(wǎng)關(guān)作為流量的,在微服務(wù)系統(tǒng)中有著非常作用,網(wǎng)關(guān)常見的功能有路由轉(zhuǎn)發(fā)、權(quán)限校驗、限流控制等作用。
使用了一個RouteLocatorBuilder的bean去創(chuàng)建路由,除了創(chuàng)建路由RouteLocatorBuilder可以讓你添加各種predicates和filters,predicates斷言的意思,顧名思義就是根據(jù)具體的請求的規(guī)則,由具體的route去處理,filters是各種過濾器,用來對請求做各種判斷和修改。
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的微服务面试题 - Spring Cloud的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言将输入的字母串转为数字,C语言把字
- 下一篇: 8年项目总结:4个G,项目经理必备模板全