聊一聊面試中那些差點翻車的地獄級Spring Cloud與Spring boot難題

不論是商業應用還是用戶應用,在業務初期都很簡單,我們通常會把它實現爲單體結構的應用。但是,隨着業務逐漸發展,產品思想會變得越來越複雜,單體結構的應用也會越來越複雜。

簡單介紹

首先先簡單介紹一下二者

Spring Cloud

  • Spring Cloud是一系列框架的有序集合。它利用Spring
    Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、智能路由、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring
    Boot的開發風格做到一鍵啓動和部署。Spring
    Cloud並沒有重複製造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring
    Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包。

Spring Boot

  • SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月發佈第一個版本的全新開源的輕量級框架。它基於Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過集成大量的框架使得依賴包的版本衝突,以及引用的不穩定性等問題得到了很好的解決。SpringBoot
    是簡化 Spring 應用開發的一個框架。他整合了 Spring 的技術棧,提供各種標準化的默認配置。使得我們可以快速開發 Spring
    項目,免掉 xml 配置的麻煩。降低 Spring 項目的成本。

最新整理面試題

有需要的小夥伴可以點點我,即可領取

熱身環節

SpringBoot和SpringCloud的區別?

SpringBoot專注於快速方便的開發單個個體微服務。

SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並管理起來,

爲各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務

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

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

使用 Spring Boot 開發分佈式微服務時,我們面臨以下問題:

  • 與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。

  • 服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,然後能夠查找並連接到該目錄中的服務。

  • 冗餘-分佈式系統中的冗餘問題。

  • 負載平衡 --負載平衡改善跨多個計算資源的工作負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。

  • 性能-問題 由於各種運營開銷導致的性能問題。

  • 部署複雜性-Devops 技能的要求。

SpringBoot 自動配置原理

首先可以看到啓動類上面有一個 SpringBootApplication 註解,點進去之後,又 EnableAutoConfiguration 註解。然後再進去,發現有個 @Import 註解,其導入的是 EnableAutoConfigurationImportSelector 類。再看這個類,他是集成了一個抽象的 AutoConfigutationimportSelector 。再往上就是接口 ImportSelector 。然後如果實現了接口的 selectImport 接口就會將其中的返回的數組全部加載到 Spring 容器中。其中實現的最主要的地方是 getCandidateConfigurations 方法。那個方法內部實現就是回去讀取 meta-inf 下的 spring.factories 。所以主要在那裏面配置的類就都會被自動加載。

什麼是 Hystrix?它如何實現容錯?
Hystrix 是一個延遲和容錯庫,旨在隔離遠程系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,停止級聯故障並在複雜的分佈式系統中實現彈性。

通常對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協作。

思考以下微服務


假設如果上圖中的微服務 9 失敗了,那麼使用傳統方法我們將傳播一個異常。但這仍然會導致整個系統崩潰。

隨着微服務數量的增加,這個問題變得更加複雜。微服務的數量可以高達 1000.這是 hystrix 出現的地方 我們將使用 Hystrix 在這種情況下的 Fallback 方法功能。我們有兩個服務 employee-consumer 使用由 employee-consumer 公開的服務。

簡化圖如下所示


現在假設由於某種原因,employee-producer 公開的服務會拋出異常。我們在這種情況下使用 Hystrix 定義了一個回退方法。這種後備方法應該具有與公開服務相同的返回類型。如果暴露服務中出現異常,則回退方法將返回一些值。

高階面試題

什麼是 Spring Cloud Bus?我們需要它嗎?
考慮以下情況:我們有多個應用程序使用 Spring Cloud Config 讀取屬性,而Spring Cloud Config 從 GIT 讀取這些屬性。

下面的例子中多個員工生產者模塊從 Employee Config Module 獲取 Eureka 註冊的財產。


如果假設 GIT 中的 Eureka 註冊屬性更改爲指向另一臺 Eureka 服務器,會發生什麼情況。在這種情況下,我們將不得不重新啓動服務以獲取更新的屬性。

還有另一種使用執行器端點/刷新的方式。但是我們將不得不爲每個模塊單獨調用這個 url。例如,如果 Employee Producer1 部署在端口 8080 上,則調用 http:// localhost:8080 / refresh。同樣對於 Employee Producer2 http://localhost:8081 / refresh 等等。這又很麻煩。這就是 Spring Cloud Bus 發揮作用的地方。


Spring Cloud Bus 提供了跨多個實例刷新配置的功能。因此,在上面的示例中,如果我們刷新 Employee Producer1,則會自動刷新所有其他必需的模塊。如果我們有多個微服務啓動並運行,這特別有用。這是通過將所有微服務連接到單個消息代理來實現的。無論何時刷新實例,此事件都會訂閱到偵聽此代理的所有微服務,並且它們也會刷新。可以通過使用端點/總線/刷新來實現對任何單個實例的刷新。

Spring Cloud斷路器的作用
當一個服務調用另一個服務由於網絡原因或自身原因出現問題,調用者就會等待被調用者的響應 當更多的服務請求到這些資源導致更多的請求等待,發生連鎖效應(雪崩效應)

斷路器有完全打開狀態:一段時間內 達到一定的次數無法調用 並且多次監測沒有恢復的跡象 斷路器完全打開 那麼下次請求就不會請求到該服務

半開:短時間內 有恢復跡象 斷路器會將部分請求發給該服務,正常調用時 斷路器關閉

關閉:當服務一直處於正常狀態 能正常調用

SpringBoot 外部配置文件加載順序
這個挺多的,我們就幾個重要的。

  • 高優先級的會覆蓋低優先級的。

  • 命令行上的參數配置是優先級最高的。

  • jar 包外的帶 profile 的配置文件。

  • jar 包內的帶 profile 的配置文件。

  • jar 包外的不帶 profile 的配置文件。

  • jar 包內的不帶 profile 的配置文件。

Springboot 日誌關係

SpringBoot 默認使用的 slf4j+logback 。引入 logging-starter 就可以使用。能自動適配其他日誌。只需要將日誌裏面的 commons-logging 移除。就會自動引入其他日誌。

使用 LoggerFactory 可以獲得 logger 。通過 logger 就可以記錄日誌。

日誌的一些配置

logging.level.com.atguigu=trace 指定打印級別

logging.file=G:/springboot.log 指定日誌生成路徑

logging.path=/spring/log 指定日誌生成相對路徑

logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n 指定控制檯輸出格式

logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== 指定文件中日誌輸出格式

總結

此篇地獄級的Spring Cloud和Spring boot 的難題就分享到這裏了,說實話要是面試沒有做準備突然被問到這些問題是十分容易翻車的,不知道從哪裏開始回答,希望這篇文章能幫助到正在或者準備找工作的各位,提前做好預習準備。

  • 以下是我整理的一些資料和學習筆記(部分截圖),有需要的朋友可以點點我,即可領取
    來自行獲取

真實面試經歷

最新整理大廠面試文檔

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。一鍵三連哦!



]

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