20 道 Spring Cloud 面試題

學習是一條漫長之路

  • 微服務的優點缺點?說下併發項目中遇到的坑?

優點
1. 每個服務器直接足夠內聚,代碼容易理解
2. 開發效率高,一個服務器只做一件事,適合小團隊開發
3. 鬆耦合,有功能意義的服務
4. 可以用不同語言開發,面向接口編程
5. 易於第三方集成
6. 微服務只是業務邏輯的代碼,不會和 HTML、CSS 或其他界面結合
7. 可以靈活搭配,連接公共庫、連接獨立庫
缺點
1. 分佈式系統的責任性
2. 多服務運維難度加大
3. 系統部署依賴,服務間通信成本,數據一致性,系統集成測試,性能監控。

  • 什麼是 Spring Cloud?
    Spring Cloud 應用程序啓動器是基於 Spring Boot 的 Spring 集成應用程序,提供與外部系統的集成。Spring Cloud Task,一個生命週期短暫的微服務框架,對於快速構建執行有限數據處理的應用程序。
  • Spring Cloud 和 Dubbo 區別?
    1. 服務調用方式 dubbo 是 RPC spring cloud Rest API
    2. 註冊中心,dubbo 是 zookeeper spring cloud 是 eureka,也可以是 zookeeper
    3. 服務網關,dubbo 本身沒有實現,是能通過其他第三方技術整合,springcloud 有 Zull 路由網關,作爲路由服務器,進行消費者的請求分發,spring cloud 支持斷路器,與 git 完美集成配置文件支持版本控制,事物總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素。
  • REST 和 RPC對比
    1. RPC 主要的缺陷是服務提供方和調用方式之間的依賴太強,需要對每一個微服務進行接口的定義,並通過持續集成發佈,嚴格版本控制纔不會出現衝突。
    2. REST 是輕量級的接口,服務的提供和調用不存在代碼之間的耦合,只需要一個約定進行規範。
  • 你所知道的微服務技術棧?
    維度:(SpringCloud)
    服務開發:(SpringCloud Spring SpringMvc)
    服務配置與管理:(Netfix 公司的 Archaiusm,阿里的 Diamond)
    服務註冊與發現:Eureka,Zookeeper
    服務調用:Rest RPC gRPC
    服務器熔斷:Hystrix
    服務負載均衡:Ribbon Nginx
    服務接口調用:Fegin
    消息隊列:KafKa Rabbitmq activemq
    服務配置中心管理: SpringCloudConfig
    服務路由(API網關):Zuul
    事件消息總線:SpringCloud Bus
  • 負載均衡的意義是什麼?
    在計算機中,負載均衡可以改善跨計算機,計算機集羣,網絡鏈接,中央處理單元或磁盤驅動等多種計算資源的工作負載分佈。負載均衡旨在優化資源使用,最大吞吐量,最小響應時間並避免任何單一資源的過載,使用多個組件進行負載均衡而不是單個組件可能會通過冗餘來提高可靠性和可用性,負載均衡通常設計專用軟件或硬件,列如:多層交換機或域名系統服務進程。
  • 微服務之間是如何獨立通訊的?
    1. 遠程調用,比如 feign 調用,直接通過遠程過程來調用訪問別的 service。
    2. 消息中間件
  • SpringCloud如何實現服務的註冊?
    1. 服務發佈時,指定對應的服務名,將服務註冊到註冊中心(eureka Zookeeper)
    2. 註冊中心加 @EnableEurekaServer,服務用 @EnableDiscoveryClient,然後用 ribbon 或 feign 進行服務直接的調用發現。
  • Eureka 和 Zookeeper區別?
    1. Eureka 取 CAP 的 AP,注重可用性,Zookeeper 取 CAP 的 CP 注重一致性。
    2. Zookeeper 在選舉期間註冊服務癱瘓,雖然服務最終會回覆,但選舉期間不可用。
    3. Eureka 的自我保護機制,會導致一個結果就是不會再從註冊列表移除因長時間沒收到心跳而過期的服務,依然能接收新服務的註冊和查詢請求,但不會被同步到其他節點,不會服務癱瘓。
    4. Zookeeper 有 Leader 和 Follower 角色,Eureka 各個節點平等。
    5. Zookeeper 採用過半存活原則, Eureka 採用自我保護機制解決分區問題。
    6. Eureka 本質是一個工程,Zookeeper 只是一個進程。
  • Eureka 自我保護機制是什麼?
    當 Eureka Server 節點在短時間內丟失了過多實例的連接時(比如網絡故障或頻繁啓動關閉客戶端)節點進入自我保護模式,保護註冊信息,不再刪除註冊數據,故障恢復時,自動退出自我保護模式。
  • 什麼是服務熔斷?什麼是服務降級?
    • 服務直接的調用,比如在高併發情況下出現進程阻塞,導致當前線程不可用,慢慢的全部線程堵塞。導致服務器雪崩。
    • 服務熔斷:相當於保險絲,出現某個異常,直接熔斷整個服務,而不是一直等到服務超時,通過維護一個自己的線程池,當線程到達閾值的時候就啓動服務降級,如果其他請求繼續訪問就直接放回 fallback 的默認值。
  • 什麼是 Ribbon?
    Ribbon 是一個負載均衡客戶端,可以很好的控制 http 和 tcp 的一些行爲,feign 默認集成了 ribbon。
  • 什麼是 feign?它的優點是什麼?
    1. feign 採用的是基於接口的註解
    2. feign 整合了 ribbon,具有負載均衡的能力
    3. 整合了 Hystrix ,具有熔斷的能力
      使用:
      1. 添加 pom.xml依賴。
      2. 啓動類添加 @EnableFeignClients
      3. 定義一個接口 @FeignClient(name = “xxx”)指定調用哪個服務
  • Ribbon 和 Feign 的區別?
    1. Ribbon 都是調用其他服務的,但方式不同。
    2. 啓動類註解不同, Ribbon 是 @RibbonClient,feign的是 @EnableFeginClients
    3. 服務指定的位置不同,Ribbon是在@RibbonClient註解上聲明,Feign則是在定義抽象方法的接口中使用 @FeginClient聲明。
    4. 調用方式不同:Ribbon需要自己構建 http 請求,模擬http請求然後使用,RestTemplate 發送給其他服務,步驟相當繁瑣,Feign 需要將調用的方法定義成抽象方法即可。
  • 什麼是Spring Cloud Bus?
    Spring Cloud bus 將分佈式的節點用輕量級的消息代理連接起來,它可以用於廣播配置文件的更改或者服務直接的通訊,也可用於監控。如果修改了配置文件,發送一次請求,所有的客戶端便會重新讀取配置文件。
    使用:
    1. 添加依賴
    2. 配置 RabbitMQ
  • SpringCloud 斷路器作用?
    當一個服務器調用另一個服務器由於網絡原因自身原因出現問題,調用者就會等待被調用者的響應 當更多的服務請求到這些資源導致更多的請求等待,發生連鎖效應(雪崩效應)
    斷路器有完全打開狀態:一段時間內 達到一定的次數無法調用 並且多次監測沒有恢復的跡象 斷路器完全打開 那麼下次請求就不會請求到該服務
    半開:短時間內 有恢復跡象 斷路器會將部分請求發給該服務,正常調用時 斷路器關閉
    關閉:當服務一直處於正常狀態 能正常調用
  • 什麼是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是各種過濾器,用來對請求做各種判斷和修改。
  • 講講微服務的架構?
    在微服務架構中,需要幾個基礎的服務治理組件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智能路由、配置管理等,由這幾個基礎組件相互協作,共同組建了一個簡單的微服務系統
    在Spring Cloud微服務系統中,一種常見的負載均衡方式是,客戶端的請求首先經過負載均衡(zuul、Ngnix),再到達服務網關(zuul集羣),然後再到具體的服。,服務統一註冊到高可用的服務註冊中心集羣,服務的所有的配置文件由配置服務管理,配置服務的配置文件放在git倉庫,方便開發人員隨時改配置。
  • 什麼是 Hystrix?
    防止雪崩利器,具備服務降級,服務熔斷,依賴隔離,監控(Hystrix Dashboard)
    服務降級:
    雙十一提示 哎呦喂,被擠爆了。app 秒殺 網絡開小差了,請稍後再試。
    優先核心服務,非核心服務不可用或弱可用,通過 HystrixCommand註解指定。
    fallbackMethod(回退函數)中具體實現降級邏輯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章