本文主要是講述微服務面試題的Spring Cloud知識點
一、Spring Cloud有哪些特點?
Spring cloud 流應用程序啟動器是基於 Spring Boot 的 Spring 集成應用程序,提供與外部系統的集成。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限數據處理的應用程序。
特點:
1、約定優於配置。
2、適用於各種環境。開發、部署PC Server或各種雲環境如阿里雲、AWS等。
3、隱藏了組件的複雜性,並提供聲明式、無xml的配置方式。
4、開箱即用快速啟動。
5、輕量級組件。
6、組件豐富:Eureka、ribbon、Hystrix、config、bus、zuul。
7、選型中立,例如spring cloud支持Eureka、consul、zookeeper。
二、CAP與Base理論
CAP是一個已經經過證實的理論:一個分佈式系統最多隻能同時滿足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。
BASE理論是對CAP理論的延伸,思想是即使無法做到強一致性(CAP的一致性就是強一致性),但可以採用適當的採取弱一致性,即最終一致性。
BASE是指基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency)。
三、Spring cloud與Dubbo的區別
(1)服務調用方式 dubbo是RPC springcloud Rest Api;
(2)註冊中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper、consul;
(3)服務網關,dubbo本身沒有實現,只能通過其他第三方技術整合,springcloud有Zuul路由網關,作為路由服務器,進行消費者的請求分發,springcloud支持斷路器,與git完美集成配置文件支持版本控制,事物總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。
四、Spring Boot與 Spring cloud之間的關係
1、SpringBoot專注於快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。
2、SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,為各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務。
3、SpringBoot可以離開SpringCloud獨立使用開發項目, 但是SpringCloud離不開SpringBoot ,屬於依賴的關係。
五、負載均衡的意義
負載均衡可以改善跨計算機、計算機集群、網絡連接、中央處理單元或磁盤驅動等多種計算資源的工作負載分佈。負載均衡意在優化資源分配,最大化吞吐量,最小化響應時間並避免任一資源的過載。負載均衡通常會涉及專用硬件或軟件,例如F5、nginx、ribbon。
六、什麼是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會將他們保護起來,讓這些實例不會過期,這樣客戶端就很容易拿到不存在的實例,這就需要容錯機制,客戶端重試、斷路器等機制。
zone與region:
1、機房隔離
2、Ribbon默認優先訪問一個zone中的服務實例
八、介紹一下Ribbon
spring Cloud Ribbon 是一個客戶端的負載均衡器,它提供對大量的HTTP和TCP客戶端的訪問控制。
客戶端負載均衡即是當瀏覽器向後臺發出請求的時候,客戶端會向 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 Gateway是Spring Cloud官方推出的第二代網關框架,取代Zuul網關。網關作為流量的,在微服務系統中有著非常作用,網關常見的功能有路由轉發、權限校驗、限流控制等作用。
使用了一個RouteLocatorBuilder的bean去創建路由,除了創建路由RouteLocatorBuilder可以讓你添加各種predicates和filters,predicates斷言的意思,顧名思義就是根據具體的請求的規則,由具體的route去處理,filters是各種過濾器,用來對請求做各種判斷和修改。
閱讀更多 JAVA破局之路 的文章