1. 什么是 spring cloud?
spring cloud 是一系列框架的有序集合。它利用 spring boot 的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用 spring boot 的開發風格做到一鍵啟動和部署。
2. spring cloud 斷路器的作用是什么?
在分布式架構中,斷路器模式的作用也是類似的,當某個服務單元發生故障(類似用電器發生短路)之后,通過斷路器的故障監控(類似熔斷保險絲),向調用方返回一個錯誤響應,而不是長時間的等待。這樣就不會使得線程因調用故障服務被長時間占用不釋放,避免了故障在分布式系統中的蔓延。
3. spring cloud 的核心組件有哪些?
-
Eureka:服務注冊於發現。
-
Feign:基於動態代理機制,根據注解和選擇的機器,拼接請求 url 地址,發起請求。
-
Ribbon:實現負載均衡,從一個服務的多台機器中選擇一台。
-
Hystrix:提供線程池,不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務雪崩的問題。
-
Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務。
4. SpringCloud和Dubbo
SpringCloud和Dubbo都是現在主流的微服務架構
SpringCloud是Apache旗下的Spring體系下的微服務解決方案
Dubbo是阿里系的分布式服務治理框架
從技術維度上,其實SpringCloud遠遠的超過Dubbo,Dubbo本身只是實現了服務治理,而SpringCloud現在以及有21個子項目以后還會更多
所以其實很多人都會說Dubbo和SpringCloud是不公平的
但是由於RPC以及注冊中心元數據等原因,在技術選型的時候我們只能二者選其一,所以我們常常為用他倆來對比
服務的調用方式Dubbo使用的是RPC遠程調用,而SpringCloud使用的是 Rest API,其實更符合微服務官方的定義
服務的注冊中心來看,Dubbo使用了第三方的ZooKeeper作為其底層的注冊中心,實現服務的注冊和發現,SpringCloud使用Spring Cloud Netflix Eureka實現注冊中心,當然SpringCloud也可以使用ZooKeeper實現,但一般我們不會這樣做
服務網關,Dubbo並沒有本身的實現,只能通過其他第三方技術的整合,而SpringCloud有Zuul路由網關,作為路由服務器,進行消費者的請求分發,SpringCloud還支持斷路器,與git完美集成分布式配置文件支持版本控制,事務總線實現配置文件的更新與服務自動裝配等等一系列的微服務架構要素
從技術選型上講~
目前國內的分布式系統選型主要還是Dubbo畢竟國產,而且國內工程師的技術熟練程度高,並且Dubbo在其他維度上的缺陷可以由其他第三方框架進行集成進行彌補
而SpringCloud目前是國外比較流行,當然我覺得國內的市場也會慢慢的偏向SpringCloud,就連劉軍作為Dubbo重啟的負責人也發表過觀點,Dubbo的發展方向是積極適應SpringCloud生態,並不是起沖突
Rest和RPC對比
其實如果仔細閱讀過微服務提出者馬丁福勒的論文的話可以發現其定義的服務間通信機制就是Http Rest
RPC最主要的缺陷就是服務提供方和調用方式之間依賴太強,我們需要為每一個微服務進行接口的定義,並通過持續繼承發布,需要嚴格的版本控制才不會出現服務提供和調用之間因為版本不同而產生的沖突
而REST是輕量級的接口,服務的提供和調用不存在代碼之間的耦合,只是通過一個約定進行規范,但也有可能出現文檔和接口不一致而導致的服務集成問題,但可以通過swagger工具整合,是代碼和文檔一體化解決,所以REST在分布式環境下比RPC更加靈活
這也是為什么當當網的DubboX在對Dubbo的增強中增加了對REST的支持的原因
文檔質量和社區活躍度
SpringCloud社區活躍度遠高於Dubbo,畢竟由於梁飛團隊的原因導致Dubbo停止更新迭代五年,而中小型公司無法承擔技術開發的成本導致Dubbo社區嚴重低落,而SpringCloud異軍突起,迅速占領了微服務的市場,背靠Spring混的風生水起
Dubbo經過多年的積累文檔相當成熟,對於微服務的架構體系各個公司也有穩定的現狀
5. SpringBoot和SpringCloud
SpringBoot是Spring推出用於解決傳統框架配置文件冗余,裝配組件繁雜的基於Maven的解決方案,旨在快速搭建單個微服務
而SpringCloud專注於解決各個微服務之間的協調與配置,服務之間的通信,熔斷,負載均衡等
技術維度並相同,並且SpringCloud是依賴於SpringBoot的,而SpringBoot並不是依賴與SpringCloud,甚至還可以和Dubbo進行優秀的整合開發
總結:
-
SpringBoot專注於快速方便的開發單個個體的微服務
-
SpringCloud是關注全局的微服務協調整理治理框架,整合並管理各個微服務,為各個微服務之間提供,配置管理,服務發現,斷路器,路由,事件總線等集成服務
-
SpringBoot不依賴於SpringCloud,SpringCloud依賴於SpringBoot,屬於依賴關系
-
SpringBoot專注於快速,方便的開發單個的微服務個體,SpringCloud關注全局的服務治理框架
6. 微服務之間是如何獨立通訊的
1.遠程過程調用(Remote Procedure Invocation):
也就是我們常說的服務的注冊與發現
直接通過遠程過程調用來訪問別的service。
優點:
簡單,常見,因為沒有中間件代理,系統更簡單
缺點:
只支持請求/響應的模式,不支持別的,比如通知、請求/異步響應、發布/訂閱、發布/異步響應
降低了可用性,因為客戶端和服務端在請求過程中必須都是可用的
2.消息:
使用異步消息來做服務間通信。服務間通過消息管道來交換消息,從而通信。
優點:
把客戶端和服務端解耦,更松耦合
提高可用性,因為消息中間件緩存了消息,直到消費者可以消費
支持很多通信機制比如通知、請求/異步響應、發布/訂閱、發布/異步響應
缺點:
消息中間件有額外的復雜
7. 負載均衡的意義是什么?
在計算中,負載均衡可以改善跨計算機,計算機集群,網絡鏈接,中央處理單元或磁盤驅動器等多種計算資源的工作負載分布。負載均衡旨在優化資源使用,最大吞吐量,最小響應時間並避免任何單一資源的過載。使用多個組件進行負載均衡而不是單個組件可能會通過冗余來提高可靠性和可用性。負載平衡通常涉及專用軟件或硬件,例如多層交換機或域名系統服務進程。
8. springcloud如何實現服務的注冊?
1.服務發布時,指定對應的服務名,將服務注冊到 注冊中心(eureka zookeeper)
2.注冊中心加@EnableEurekaServer,服務用@EnableDiscoveryClient,然后用ribbon或feign進行服務直接的調用發現。
9. 什么是服務熔斷?什么是服務降級
在復雜的分布式系統中,微服務之間的相互調用,有可能出現各種各樣的原因導致服務的阻塞,在高並發場景下,服務的阻塞意味着線程的阻塞,導致當前線程不可用,服務器的線程全部阻塞,導致服務器崩潰,由於服務之間的調用關系是同步的,會對整個微服務系統造成服務雪崩
為了解決某個微服務的調用響應時間過長或者不可用進而占用越來越多的系統資源引起雪崩效應就需要進行服務熔斷和服務降級處理。
所謂的服務熔斷指的是某個服務故障或異常一起類似顯示世界中的“保險絲"當某個異常條件被觸發就直接熔斷整個服務,而不是一直等到此服務超時。
服務熔斷就是相當於我們電閘的保險絲,一旦發生服務雪崩的,就會熔斷整個服務,通過維護一個自己的線程池,當線程達到閾值的時候就啟動服務降級,如果其他請求繼續訪問就直接返回fallback的默認值
10. 微服務的優缺點分別是什么?說下你在項目開發中碰到的坑
優點
-
每一個服務足夠內聚,代碼容易理解
-
開發效率提高,一個服務只做一件事
-
微服務能夠被小團隊單獨開發
-
微服務是松耦合的,是有功能意義的服務
-
可以用不同的語言開發,面向接口編程
-
易於與第三方集成
-
微服務只是業務邏輯的代碼,不會和HTML,CSS或者其他界面組合
開發中,兩種開發模式
前后端分離
全棧工程師
-
可以靈活搭配,連接公共庫/連接獨立庫
缺點
-
分布式系統的負責性
-
多服務運維難度,隨着服務的增加,運維的壓力也在增大
-
系統部署依賴
-
服務間通信成本
-
數據一致性
-
系統集成測試
-
性能監控
11. 你所知道的微服務技術棧?
- 維度(springcloud)
- 服務開發:springboot spring springmvc
- 服務配置與管理:Netfix公司的Archaiusm ,阿里的Diamond
- 服務注冊與發現:Eureka,Zookeeper
- 服務調用:Rest RPC gRpc
- 服務熔斷器:Hystrix
- 服務負載均衡:Ribbon Nginx
- 服務接口調用:Fegin
- 消息隊列:Kafka Rabbitmq activemq
- 服務配置中心管理:SpringCloudConfig
- 服務路由(API網關)Zuul
- 事件消息總線:SpringCloud Bus
12. Eureka和ZooKeeper都可以提供服務注冊與發現的功能,請說說兩個的區別
1.ZooKeeper保證的是CP,Eureka保證的是AP
ZooKeeper在選舉期間注冊服務癱瘓,雖然服務最終會恢復,但是選舉期間不可用的
Eureka各個節點是平等關系,只要有一台Eureka就可以保證服務可用,而查詢到的數據並不是最新的
自我保護機制會導致
Eureka不再從注冊列表移除因長時間沒收到心跳而應該過期的服務
Eureka仍然能夠接受新服務的注冊和查詢請求,但是不會被同步到其他節點(高可用)
當網絡穩定時,當前實例新的注冊信息會被同步到其他節點中(最終一致性)
Eureka可以很好的應對因網絡故障導致部分節點失去聯系的情況,而不會像ZooKeeper一樣使得整個注冊系統癱瘓
2.ZooKeeper有Leader和Follower角色,Eureka各個節點平等
3.ZooKeeper采用過半數存活原則,Eureka采用自我保護機制解決分區問題
4.Eureka本質上是一個工程,而ZooKeeper只是一個進程
13. eureka自我保護機制是什么?
當Eureka Server 節點在短時間內丟失了過多實例的連接時(比如網絡故障或頻繁啟動關閉客戶端)節點會進入自我保護模式,保護注冊信息,不再刪除注冊數據,故障恢復時,自動退出自我保護模式。
14. 什么是Ribbon?
ribbon是一個負載均衡客戶端,可以很好的控制htt和tcp的一些行為。feign默認集成了ribbon。
15. 什么是feigin?它的優點是什么?
1.feign采用的是基於接口的注解
2.feign整合了ribbon,具有負載均衡的能力
3.整合了Hystrix,具有熔斷的能力
使用:
1.添加pom依賴。
2.啟動類添加@EnableFeignClients
3.定義一個接口@FeignClient(name=“xxx”)指定調用哪個服務
16. Ribbon和Feign的區別?
1.Ribbon都是調用其他服務的,但方式不同。
2.啟動類注解不同,Ribbon是@RibbonClient feign的是@EnableFeignClients
3.服務指定的位置不同,Ribbon是在@RibbonClient注解上聲明,Feign則是在定義抽象方法的接口中使用@FeignClient聲明。
4.調用方式不同,Ribbon需要自己構建http請求,模擬http請求然后使用RestTemplate發送給其他服務,步驟相當繁瑣。Feign需要將調用的方法定義成抽象方法即可。
17. 什么是Spring Cloud Bus?
spring cloud bus 將分布式的節點用輕量的消息代理連接起來,它可以用於廣播配置文件的更改或者服務直接的通訊,也可用於監控。
如果修改了配置文件,發送一次請求,所有的客戶端便會重新讀取配置文件。
使用:
1.添加依賴
2.配置rabbimq
18. 什么是Hystrix?
防雪崩利器,具備服務降級,服務熔斷,依賴隔離,監控(Hystrix Dashboard)
服務降級:
雙十一 提示 哎喲喂,被擠爆了。 app秒殺 網絡開小差了,請稍后再試。
優先核心服務,非核心服務不可用或弱可用。通過HystrixCommand注解指定。
fallbackMethod(回退函數)中具體實現降級邏輯。
19. springcloud斷路器作用?
當一個服務調用另一個服務由於網絡原因或自身原因出現問題,調用者就會等待被調用者的響應 當更多的服務請求到這些資源導致更多的請求等待,發生連鎖效應(雪崩效應)
斷路器有完全打開狀態:一段時間內 達到一定的次數無法調用 並且多次監測沒有恢復的跡象 斷路器完全打開 那么下次請求就不會請求到該服務
半開:短時間內 有恢復跡象 斷路器會將部分請求發給該服務,正常調用時 斷路器關閉
關閉:當服務一直處於正常狀態 能正常調用
20. 什么是SpringCloudConfig?
在分布式系統中,由於服務數量巨多,為了方便服務配置文件統一管理,實時更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。
使用:
1、添加pom依賴
2、配置文件添加相關配置
3、啟動類添加注解@EnableConfigServer
21. 架構?
在微服務架構中,需要幾個基礎的服務治理組件,包括服務注冊與發現、服務消費、負載均衡、斷路器、智能路由、配置管理等,由這幾個基礎組件相互協作,共同組建了一個簡單的微服務系統
在Spring Cloud微服務系統中,一種常見的負載均衡方式是,客戶端的請求首先經過負載均衡(zuul、Ngnix),再到達服務網關(zuul集群),然后再到具體的服。,服務統一注冊到高可用的服務注冊中心集群,服務的所有的配置文件由配置服務管理,配置服務的配置文件放在git倉庫,方便開發人員隨時改配置。
22. 可以秒殺全場的 Spring Cloud 微服務電商實戰項目,文檔賊全!送給大家~
項目截圖:
項目源碼:
視頻教程:
項目教程文檔(500頁):
工具清單:
如何領取?
-
掃描下方二維碼關注微信公眾號:Java團長;
-
然后在公眾號后台回復關鍵字:001