關於SpringCloud、SpringBoot 希望這是說得最詳細的
幾年前,沒幾個jar沖突一下都不叫搭框架 —— java面試必修
什麽是Spring Boot
用我的話來理解,Spring Boot就是整合了框架的框架,它讓一切依賴都變得有序簡單,你不用操心A.jar是什麽版本,又依賴哪些版本的jar,它默認配置了很多框架的使用方式,就像 maven整合了所有的jar包,Spring Boot整合了所有的框架,第三方庫的功能你拿著就能用。
Spring Boot的核心思想就是約定大於配置,一切由內定的約束來自動完成。采用 Spring Boot可以大大的簡化你的開發模式,節省大部分照搬照抄的成本,通過少量的代碼就能創建一個獨立的,它都有對應的組件支持。
它是由 Pivotal團隊提供的全新框架,其設計目的是用來簡化新 Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。
什麽是Spring Cloud
Spring Cloud是一套分布式服務治理的框架,既然它是一套服務治理的框架,那麽它本身不會提供具體功能性的操作,更專註於服務之間的通訊、熔斷、監控等。因此就需要很多的組件來支持一套功能。
微服務是可以獨立部署、水平擴展、獨立訪問(或者有獨立的數據庫)的服務單元, Spring Cloud就是這些微服務的大管家,采用了微服務這種架構之後,項目的數量會非常多, Spring Cloud做為大管家就需要提供各種方案來維護整個生態。
SpringColoud的小弟們
小弟們可是非常多,就像梁山108好漢那樣
默默無聞服務
融合在每個微服務中、依賴其它組件並為其提供服務。
-
Ribbon,客戶端負載均衡,特性有區域親和、重試機制。
-
Hystrix,客戶端容錯保護,特性有服務降級、服務熔斷、請求緩存、請求合並、依賴隔離。
-
Feign,聲明式服務調用,本質上就是Ribbon+Hystrix
-
Stream,消息驅動,有Sink、Source、Processor三種通道,特性有訂閱發布、消費組、消息分區。
-
Bus,消息總線,配合Config倉庫修改的一種Stream實現,
-
Sleuth,分布式服務追蹤,需要搞清楚TraceID和SpanID以及抽樣,如何與ELK整合。
利刃獨挑大梁
獨自啟動不需要依賴其它組件,單槍匹馬都能幹。
-
Eureka,服務註冊中心,特性有失效剔除、服務保護。
-
Dashboard,Hystrix儀表盤,監控集群模式和單點模式,其中集群模式需要收集器Turbine配合。
-
Zuul,API服務網關,功能有路由分發和過濾。
-
Config,分布式配置中心,支持本地倉庫、SVN、Git、Jar包內配置等模式,
各司其職
每個組件都不是平白無故的產生的,是為了解決某一特定的問題而存在。
-
Eureka和Ribbon,是最基礎的組件,一個註冊服務,一個消費服務。
-
Hystrix為了優化Ribbon、防止整個微服務架構因為某個服務節點的問題導致崩潰,是個保險絲的作用。
-
Dashboard給Hystrix統計和展示用的,而且監控服務節點的整體壓力和健康情況。
-
Turbine是集群收集器,服務於Dashboard的。
-
Feign是方便我們程序員些更優美的代碼的。
-
Zuul是加在整個微服務最前沿的防火墻和代理器,隱藏微服務結點IP端口信息,加強安全保護的。
-
Config是為了解決所有微服務各自維護各自的配置,設置一個同意的配置中心,方便修改配置的。
-
Bus是因為config修改完配置後各個結點都要refresh才能生效實在太麻煩,所以交給bus來通知服務節點刷新配置的。
-
Stream是為了簡化研發人員對MQ使用的復雜度,弱化MQ的差異性,達到程序和MQ松耦合。
-
Sleuth是因為單次請求在微服務節點中跳轉無法追溯,解決任務鏈日誌追蹤問題的。
特殊成員Zipkin,之所以特殊是因為從jar包和包名來看它不屬於Spring Cloud的一員,但是它與Spring Cloud Sleuth的抽樣日誌結合的天衣無縫。乍一看它與Hystrix的Dashboard作用有重疊的部分,但是他們的側重點完全不同。Dashboard側重的是單個服務的統計和是否可用,Zipkin側重的監控環節時長。簡言之,Dashboard側重故障診斷,Ziokin側重性能優化。
與SpringCloud區別
通俗的說,SpringBoot是構建單個服務的快速架構,比如它是全家桶中的1個漢堡,SpringCloud是關註全局的微服務協調整理治理框架,類似於組成多個服務的全家桶,桶裏面不光有漢堡,還有薯條,還有番茄醬,那現在我要給漢堡加點番茄醬,它就更好吃了,意思就是SpringBoot可以配合全家桶中的這些工具組成一個強大的微服務體系,有點類似於Collection和Collections。
- Spring boot是Spring的一套快速配置腳手架,可以基於Spring Boot快速開發單個微服務;Spring Cloud是一個基於Spring Boot實現的雲應用開發工具
- Spring Boot專註於快速、方便集成的單個個體,Spring Cloud是關註全局的服務治理框架;
- Spring boot使用了默認大於配置的理念,很多集成方案已經幫你選擇好了,能不配置就不配置,Spring Cloud很大的一部分是基於Spring Boot來實現。
- Spring Boot可以離開Spring Cloud獨立使用開發項目,但是Spring Cloud離不開Spring Boot,屬於依賴的關系。
作者有話說:喜歡的話就請移步Java面試必修網 https://www.itmsbx.com ,請自備水,更多幹、幹、幹貨等著你
關於SpringCloud、SpringBoot 希望這是說得最詳細的