微服務面試題 - Spring Cloud

點擊上方Java後端技術之路”,選擇“置頂或者星標

與你一起成長

微服務面試題

一、Spring Cloud有哪些特點?

Spring cloud 流應用程序啓動器是基於 Spring Boot Spring 集成應用程序,提供與外部系統的集成。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限數據處理的應用程序。

特點:

1、約定優於配置。

2、適用於各種環境。開發、部署PC Server或各種雲環境如阿里雲、AWS等。

3、隱藏了組件的複雜性,並提供聲明式、無xml的配置方式。

4、開箱即用快速啓動。

5、輕量級組件。

6、組件豐富:EurekaribbonHystrixconfigbuszuul

7、選型中立,例如spring cloud支持Eurekaconsulzookeeper

 

二、CAPBase理論

CAP是一個已經經過證實的理論:一個分佈式系統最多隻能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。

 

BASE理論是對CAP理論的延伸,思想是即使無法做到強一致性(CAP的一致性就是強一致性),但可以採用適當的採取弱一致性,即最終一致性。

BASE是指基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency)。

 

三、Spring cloudDubbo的區別

1)服務調用方式 dubboRPC springcloud Rest Api

2)註冊中心,dubbo zookeeper springcloudeureka,也可以是zookeeperconsul

3)服務網關,dubbo本身沒有實現,只能通過其他第三方技術整合,springcloudZuul路由網關,作爲路由服務器,進行消費者的請求分發,springcloud支持斷路器,與git完美集成配置文件支持版本控制,事物總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。

四、Spring BootSpring cloud之間的關係

1SpringBoot專注於快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。

2SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,爲各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務。

3SpringBoot可以離開SpringCloud獨立使用開發項目, 但是SpringCloud離不開SpringBoot ,屬於依賴的關係。

 

五、負載均衡的意義

負載均衡可以改善跨計算機、計算機集羣、網絡連接、中央處理單元或磁盤驅動等多種計算資源的工作負載分佈。負載均衡意在優化資源分配,最大化吞吐量,最小化響應時間並避免任一資源的過載。負載均衡通常會涉及專用硬件或軟件,例如F5nginxribbon

 

六、什麼是Hystrix,如何做的容錯

服務隔離:如果整個系統雪崩是由於一個接口導致的,由於這一個接口響應不及時導致問題,那麼我們就有必要對這個接口進行隔離,就是隻允許這個接口最多能接受多少的併發,做了這樣的限制後,該接口的主機就會空餘線程出來接收其他的情況,不會被哪個壞了的接口占用滿。Hystrix 就是一個不錯的服務隔離框架。

 

服務雪崩:雪崩是系統中的蝴蝶效應導致其發生的原因多種多樣,有不合理的容量設計,或者是高併發下某一個方法響應變慢,亦或是某臺機器的資源耗盡。從源頭上我們無法完全杜絕雪崩源頭的發生,但是雪崩的根本原因來源於服務之間的強依賴,所以我們可以提前評估。當整個微服務系統中,有一個節點出現異常情況,就有可能在高併發的情況下出現雪崩,導致調用它的上游系統出現響應延遲,響應延遲就會導致 tomcat 連接本耗盡,導致該服務節點不能正常的接收到正常的情況,這就是服務雪崩行爲。

 

Hystrix兩種隔離策略:線程池隔離THREAD 、信號量SEMAPHORE隔離。

 

熔斷髮生的三個必要條件:

1、有一個統計的時間週期,滾動窗口

相應的配置屬性metrics.rollingStats.timeInMilliseconds 默認 10000 毫秒

2請求次數必須達到一定數量

相應的配置屬性 circuitBreaker.requestVolumeThreshold默認 20

3失敗率達到默認失敗率

相應的配置屬性 circuitBreaker.errorThresholdPercentage 默認 50%

 

用到的註解:

@EnableCircuitBreaker

@HystrixCommand(fallbackMethod="queryOrderByIdFallback",commandKey = "queryOrderById",groupKey = "querygroup-one",commandProperties = { @HystrixProperty(name ="execution.isolation.strategy", value="THREAD")},threadPoolKey = "queryOrderByIdhystrixJackpool")

 

Hystrix有哪幾種狀態:開啓、關閉、半開啓。

 

 

參考文檔:https://www.toutiao.com/i6805112656714793475/

 

七、介紹一下Eureka

 

 

 

用到的註解:

@EnableEurekaServer // 註冊服務中心

@EnableEurekaClient // 服務提供端

 

服務註冊與續約:首先服務註冊到eureka server上,註冊之後服務提供者會維護一個心跳,用來告訴eureka server “我還OK”,也就是續約Renew,心跳默認三十秒檢測一次。

服務剔除:當服務實例正常下線時,服務實例會告訴eureka server “我要下線了”,將服務狀態改爲 down。有時服務會出現非正常下線,eureka server 在啓動時會去創建一個定時任務檢測服務提供者,剔除服務,檢測時間默認90秒。

自我保護:eureka server 會去將心跳在15分鐘內是否低於85%,如果出現eureka會將他們保護起來,讓這些實例不會過期,這樣客戶端就很容易拿到不存在的實例,這就需要容錯機制,客戶端重試、斷路器等機制。

 

zoneregion

1、機房隔離

2Ribbon默認優先訪問一個zone中的服務實例

 

八、介紹一下Ribbon

spring Cloud Ribbon 是一個客戶端的負載均衡器,它提供對大量的HTTPTCP客戶端的訪問控制。

客戶端負載均衡即是當瀏覽器向後臺發出請求的時候,客戶端會向 Eureka Server 讀取註冊到服務器的可用服務信息列表,然後根據設定的負載均衡策略(沒有設置即用默認的),抉擇出向哪臺服務器發送請求。

 

重要註解:@Loadbalanced 註解修飾RestTemplate

 

負載均衡策略:線性輪詢、隨機、重試機制。

 

Ribbon內部有一個chooseServer()方法用於選擇服務。

 

九、聊聊Feign

Feign使代碼變得整潔,內部封裝了Ribbon的負載以及Hystrix。但是性能會比較差,建議複雜業務不要使用。

 

 

十、爲什麼使用Spring Cloud Bus

Spring Cloud Bus 提供了跨多個實例刷新配置的功能

 

十一、什麼是SpringCloudConfig?

在分佈式系統中,由於服務數量巨多,爲了方便服務配置文件統一管理,實時更新,所以需要分佈式配置中心組件。在Spring Cloud中,有分佈式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client

使用:

1)添加pom依賴

2)配置文件添加相關配置

3)啓動類添加註解@EnableConfigServer

十二、Spring Cloud Gateway?

Spring Cloud GatewaySpring Cloud官方推出的第二代網關框架,取代Zuul網關。網關作爲流量的,在微服務系統中有着非常作用,網關常見的功能有路由轉發、權限校驗、限流控制等作用。

使用了一個RouteLocatorBuilderbean去創建路由,除了創建路由RouteLocatorBuilder可以讓你添加各種predicatesfilterspredicates斷言的意思,顧名思義就是根據具體的請求的規則,由具體的route去處理,filters是各種過濾器,用來對請求做各種判斷和修改。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章