查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

程式設計師追風發表於2019-12-30

前言

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud並沒有重複製造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝遮蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包。
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

Spring Cloud有以下特點:

  • 約定優於配置;
  • 適用於各種環境。開發、部署PC Server或各種雲環境(例如阿里雲、AWS等)均可;
  • 隱藏了元件的複雜性,並提供宣告式、無xml的配置方式;
  • 開箱即用,快速啟動;
  • 輕量級的元件。Spring Cloud整合的元件大多比較輕量。例如Eureka、Zuul等,都是各自領域輕量級的實現;
  • 元件豐富,功能齊全。Spring Cloud 為微服務架構提供了非常完整的支援。例如、配置管理、服務發現、斷路器、微服務閘道器等;
  • 選型中立、豐富。例如,Spring Cloud支援使用Eureka、Zookeeper或Consul實現服務發現;
  • 靈活。Spring Cloud的組成部分是解耦的,開發人員可以按需靈活挑選技術選型。

關於Spring Cloud微服務架構的知識總結了個思維導圖分享給大家

查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

Spring Cloud面試題

1、什麼是 Spring Cloud?
2、使用 Spring Cloud 有什麼優勢?
3、服務註冊和發現是什麼意思?Spring Cloud 如何實現?
4、Spring Cloud 和dubbo區別?
5、SpringBoot和SpringCloud的區別?
6、負載平衡的意義什麼?
7、什麼是 Hystrix?它如何實現容錯?
8、什麼是 Hystrix 斷路器?我們需要它嗎?
9、什麼是 Netflix Feign?它的優點是什麼?
10、什麼是 Spring Cloud Bus?我們需要它嗎?
11、Spring Cloud斷路器的作用
12、什麼是SpringCloudConfig?
13、Spring Cloud Gateway?
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

1、什麼是 Spring Cloud?

Spring cloud 流應用程式啟動器是基於 Spring Boot 的 Spring 整合應用程式,提供與外部系統的整合。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限資料處理的應用程式。

2、使用 Spring Cloud 有什麼優勢?

使用 Spring Boot 開發分散式微服務時,我們面臨以下問題
(1)與分散式系統相關的複雜性-這種開銷包括網路問題,延遲開銷,頻寬問題,安全問題。
(2)服務發現-服務發現工具管理群集中的流程和服務如何查詢和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,然後能夠查詢並連線到該目錄中的服務。
(3)冗餘-分散式系統中的冗餘問題。
(4)負載平衡 --負載平衡改善跨多個計算資源的工作負荷,諸如計算機,計算機叢集,網路鏈路,中央處理單元,或磁碟驅動器的分佈。
(5)效能-問題 由於各種運營開銷導致的效能問題。
(6)部署複雜性-Devops 技能的要求。

3、服務註冊和發現是什麼意思?Spring Cloud 如何實現?

當我們開始一個專案時,我們通常在屬性檔案中進行所有的配置。隨著越來越多的服務開發和部署,新增和修改這些屬性變得更加複雜。有些服務可能會下降,而某些位置可能會發生變化。手動更改屬性可能會產生問題。 Eureka 服務註冊和發現可以在這種情況下提供幫助。由於所有服務都在 Eureka 伺服器上註冊並通過呼叫 Eureka 伺服器完成查詢,因此無需處理服務地點的任何更改和處理。

4、Spring Cloud 和dubbo區別?

(1)服務呼叫方式 dubbo是RPC springcloud Rest Api
(2)註冊中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper
(3)服務閘道器,dubbo本身沒有實現,只能通過其他第三方技術整合,springcloud有Zuul路由閘道器,作為路由伺服器,進行消費者的請求分發,springcloud支援斷路器,與git完美整合配置檔案支援版本控制,事物匯流排實現配置檔案的更新與服務自動裝配等等一系列的微服務架構要素。

5、SpringBoot和SpringCloud的區別?

SpringBoot專注於快速方便的開發單個個體微服務。
SpringCloud是關注全域性的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,
為各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件匯流排、全域性鎖、決策競選、分散式會話等等整合服務
SpringBoot可以離開SpringCloud獨立使用開發專案, 但是SpringCloud離不開SpringBoot ,屬於依賴的關係.
SpringBoot專注於快速、方便的開發單個微服務個體,SpringCloud關注全域性的服務治理框架。

6、負載平衡的意義什麼?

在計算中,負載平衡可以改善跨計算機,計算機叢集,網路連結,中央處理單元或磁碟驅動器等多種計算資源的工作負載分佈。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間並避免任何單一資源的過載。使用多個元件進行負載平衡而不是單個元件可能會通過冗餘來提高可靠性和可用性。負載平衡通常涉及專用軟體或硬體,例如多層交換機或域名系統伺服器程式。

7、什麼是 Hystrix?它如何實現容錯?

Hystrix 是一個延遲和容錯庫,旨在隔離遠端系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,停止級聯故障並在複雜的分散式系統中實現彈性。
通常對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協作。
思考以下微服務
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)
假設如果上圖中的微服務 9 失敗了,那麼使用傳統方法我們將傳播一個異常。但這仍然會導致整個系統崩潰。
隨著微服務數量的增加,這個問題變得更加複雜。微服務的數量可以高達 1000.這是 hystrix 出現的地方 我們將使用 Hystrix 在這種情況下的 Fallback 方法功能。我們有兩個服務 employee-consumer 使用由 employee-consumer 公開的服務。
簡化圖如下所示
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)
現在假設由於某種原因,employee-producer 公開的服務會丟擲異常。我們在這種情況下使用 Hystrix 定義了一個回退方法。這種後備方法應該具有與公開服務相同的返回型別。如果暴露服務中出現異常,則回退方法將返回一些值。

8、什麼是 Hystrix 斷路器?我們需要它嗎?

由於某些原因,employee-consumer 公開服務會引發異常。在這種情況下使用Hystrix 我們定義了一個回退方法。如果在公開服務中發生異常,則回退方法返回一些預設值。
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)
如果 firstPage method() 中的異常繼續發生,則 Hystrix 電路將中斷,並且員工使用者將一起跳過 firtsPage 方法,並直接呼叫回退方法。 斷路器的目的是給第一頁方法或第一頁方法可能呼叫的其他方法留出時間,並導致異常恢復。可能發生的情況是,在負載較小的情況下,導致異常的問題有更好的恢復機會 。
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

9、什麼是 Netflix Feign?它的優點是什麼?

Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 啟發的 java 客戶端聯程式設計序。
Feign 的第一個目標是將約束分母的複雜性統一到 http apis,而不考慮其穩定性。
在 employee-consumer 的例子中,我們使用了 employee-producer 使用 REST模板公開的 REST 服務。
但是我們必須編寫大量程式碼才能執行以下步驟
(1)使用功能區進行負載平衡。
(2)獲取服務例項,然後獲取基本 URL。
(3)利用 REST 模板來使用服務。 前面的程式碼如下
@Controller
public class ConsumerControllerClient {
    @Autowired
    private LoadBalancerClient loadBalancer;
    public void getEmployee() throws RestClientException, IOException {
        ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
        System.out.println(serviceInstance.getUri());
        String baseUrl=serviceInstance.getUri().toString();
        baseUrl=baseUrl+"/employee";
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response=null;
        try{
            response=restTemplate.exchange(baseUrl,
                        HttpMethod.GET, getHeaders(),String.class);
        }
        catch (Exception ex)
            {
            System.out.println(ex);
        }
        System.out.println(response.getBody());
    }複製程式碼
之前的程式碼,有像 NullPointer 這樣的例外的機會,並不是最優的。我們將看到如何使用 Netflix Feign 使呼叫變得更加輕鬆和清潔。如果 Netflix Ribbon 依賴關係也在類路徑中,那麼 Feign 預設也會負責負載平衡。

10、什麼是 Spring Cloud Bus?我們需要它嗎?

考慮以下情況:我們有多個應用程式使用 Spring Cloud Config 讀取屬性,而Spring Cloud Config 從 GIT 讀取這些屬性。
下面的例子中多個員工生產者模組從 Employee Config Module 獲取 Eureka 註冊的財產。
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

如果假設 GIT 中的 Eureka 註冊屬性更改為指向另一臺 Eureka 伺服器,會發生什麼情況。在這種情況下,我們將不得不重新啟動服務以獲取更新的屬性。
還有另一種使用執行器端點/重新整理的方式。但是我們將不得不為每個模組單獨呼叫這個 url。例如,如果 Employee Producer1 部署在埠 8080 上,則呼叫 http:// localhost:8080 / refresh。同樣對於 Employee Producer2 http://localhost:8081 / refresh 等等。這又很麻煩。這就是 Spring Cloud Bus 發揮作用的地方。
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)
Spring Cloud Bus 提供了跨多個例項重新整理配置的功能。因此,在上面的示例中,如果我們重新整理 Employee Producer1,則會自動重新整理所有其他必需的模組。如果我們有多個微服務啟動並執行,這特別有用。這是通過將所有微服務連線到單個訊息代理來實現的。無論何時重新整理例項,此事件都會訂閱到偵聽此代理的所有微服務,並且它們也會重新整理。可以通過使用端點/匯流排/重新整理來實現對任何單個例項的重新整理。

11.springcloud斷路器的作用

當一個服務呼叫另一個服務由於網路原因或自身原因出現問題,呼叫者就會等待被呼叫者的響應 當更多的服務請求到這些資源導致更多的請求等待,發生連鎖效應(雪崩效應)
斷路器有完全開啟狀態:一段時間內 達到一定的次數無法呼叫 並且多次監測沒有恢復的跡象 斷路器完全開啟 那麼下次請求就不會請求到該服務
半開:短時間內 有恢復跡象 斷路器會將部分請求發給該服務,正常呼叫時 斷路器關閉
關閉:當服務一直處於正常狀態 能正常呼叫
查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

12、什麼是SpringCloudConfig?

在分散式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分散式配置中心元件。在Spring Cloud中,有分散式配置中心元件spring cloud config ,它支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git倉庫中。在spring cloud config 元件中,分兩個角色,一是config server,二是config client。
使用:
(1)新增pom依賴
(2)配置檔案新增相關配置
(3)啟動類新增註解@EnableConfigServer

13、Spring Cloud Gateway?

Spring Cloud Gateway是Spring Cloud官方推出的第二代閘道器框架,取代Zuul閘道器。閘道器作為流量的,在微服務系統中有著非常作用,閘道器常見的功能有路由轉發、許可權校驗、限流控制等作用。
使用了一個RouteLocatorBuilder的bean去建立路由,除了建立路由RouteLocatorBuilder可以讓你新增各種predicates和filters,predicates斷言的意思,顧名思義就是根據具體的請求的規則,由具體的route去處理,filters是各種過濾器,用來對請求做各種判斷和修改。

歡迎大家關注我的公眾號【程式設計師追風】,2019年多家公司java面試題整理了1000多道400多頁pdf文件,文章都會在裡面更新,整理的資料也會放在裡面。

查漏補缺:2020年搞定SpringCloud面試(含答案和思維導圖)

最後

歡迎大家一起交流,喜歡文章記得關注我點個贊喲,感謝支援!


相關文章