SpringCloud

本文代碼地址

  1. https://github.com/Colinlyj210/spring-cloud-demo
  2. https://github.com/Colinlyj210/spring-cloud-demo-config

Spring Cloud大家庭

  • Eureka:服務(wù)注冊和發(fā)現(xiàn)組件
  • Ribbon:負(fù)載均衡
  • Hystrix:熔斷組件
  • Config:統(tǒng)一配置管理
  • Zuul:路由網(wǎng)關(guān)
  • Bus:消息總線
  • Sleuth:分布式鏈路追蹤
  • ...
spring cloud.png

Eureka

Spring Cloud Eureka提供服務(wù)端與客戶端,服務(wù)端即是服務(wù)注冊中心,客戶端完成注冊與發(fā)現(xiàn)。

eureka.png

Ribbon

在微服務(wù)中使用Ribbon實(shí)現(xiàn)負(fù)載均衡,Ribbon先從Eureka Server中獲取列表,然后根據(jù)負(fù)載均衡算法進(jìn)行負(fù)載均衡,將請(qǐng)求轉(zhuǎn)發(fā)到其他微服務(wù)。

ribbon.png

Hystrix

由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)問題,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)線程阻塞,此時(shí)若有大量的請(qǐng)求涌入,Servlet容器的線程資源會(huì)被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性,故障會(huì)傳播,會(huì)對(duì)整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。為了解決這個(gè)問題,業(yè)界提出了斷路器模型。

hystric.png

Config

在分布式系統(tǒng)中,由于服務(wù)數(shù)量巨多,為了方便服務(wù)配置文件統(tǒng)一管理,實(shí)時(shí)更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在遠(yuǎn)程Git倉庫中。在spring cloud config 組件中,分兩個(gè)角色,一是config server,二是config client。

config1.png
config.png

Zuul

Zuul的主要功能是路由轉(zhuǎn)發(fā)和過濾器。路由功能是微服務(wù)的一部分,比如/api/user轉(zhuǎn)發(fā)到到user服務(wù),/api/shop轉(zhuǎn)發(fā)到到shop服務(wù)。zuul默認(rèn)和Ribbon結(jié)合實(shí)現(xiàn)了負(fù)載均衡的功能。

Zuul有以下等功能:

  • Dynamic Routing
  • Authentication
  • Security
  • Static Response handling
  • Stress Testing
  • Service Migration
  • Load Shedding
zuul.jpg

Bus

Spring Cloud Bus 將分布式的節(jié)點(diǎn)用輕量的消息代理連接起來。它可以用于廣播配置文件的更改或者服務(wù)之間的通訊,也可以用于監(jiān)控。當(dāng)git文件更改的時(shí)候,通過pc端用post 向端口為8882的config-client發(fā)送請(qǐng)求/bus/refresh/;此時(shí)8882端口會(huì)發(fā)送一個(gè)消息,由消息總線向其他服務(wù)傳遞,從而使整個(gè)微服務(wù)集群都達(dá)到更新配置文件。(Webhook)

bus.png

Sleuth

微服務(wù)架構(gòu)上通過業(yè)務(wù)來劃分服務(wù)的,通過REST調(diào)用,對(duì)外暴露的一個(gè)接口,可能需要很多個(gè)服務(wù)協(xié)同才能完成這個(gè)接口功能,如果鏈路上任何一個(gè)服務(wù)出現(xiàn)問題或者網(wǎng)絡(luò)超時(shí),都會(huì)形成導(dǎo)致接口調(diào)用失敗。隨著業(yè)務(wù)的不斷擴(kuò)張,服務(wù)之間互相調(diào)用會(huì)越來越復(fù)雜。Spring Cloud Sleuth 主要功能就是在分布式系統(tǒng)中提供追蹤解決方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相應(yīng)的依賴即可。

Spring Cloud VS Dubbo

Dubbo

dubbo.png

Spring Cloud 與Dubbo核心架構(gòu)要素對(duì)比

微服務(wù)關(guān)注點(diǎn) Spring Cloud Dubbo
服務(wù)注冊中心 Eureka Zookeeper
服務(wù)調(diào)用方式 REST API RPC
服務(wù)網(wǎng)關(guān) Zuul
斷路器 Hystrix 不完善
分布式配置 Config
負(fù)載均衡 Ribbon 自帶
分布式追蹤 Spring Cloud Sleuth
消息總線 Spring Cloud Bus

? Dubbo 只是實(shí)現(xiàn)了服務(wù)治理,而 Spring Cloud 子項(xiàng)目分別覆蓋了微服務(wù)架構(gòu)下的眾多部件,服務(wù)治理只是其中的一個(gè)方面。

? Dubbo 提供了各種 Filter,對(duì)于上述中“無”的要素,可以通過擴(kuò)展 Filter 來完善。例如:

? 分布式配置:可以使用淘寶的 diamond、百度的 disconf 來實(shí)現(xiàn)分布式配置管理。

? 服務(wù)跟蹤:可以使用京東開源的 Hydra,或者擴(kuò)展 Filter 用 Zippin 來做服務(wù)跟蹤。

? 批量任務(wù):可以使用當(dāng)當(dāng)開源的 Elastic-Job、tbschedule。

從核心要素來看,Spring Cloud 更勝一籌,在開發(fā)過程中只要整合 Spring Cloud 的子項(xiàng)目就可以順利的完成各種組件的融合,而 Dubbo 卻需要通過實(shí)現(xiàn)各種 Filter 來做定制,開發(fā)成本以及技術(shù)難度略高。

通訊協(xié)議

Dubbo 使用 RPC 通訊協(xié)議,提供序列化方式如下:

  • Dubbo:Dubbo 缺省協(xié)議采用單一長連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費(fèi)者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況。
  • RMI:RMI 協(xié)議采用 JDK 標(biāo)準(zhǔn)的 java.rmi.* 實(shí)現(xiàn),采用阻塞式短連接和 JDK 標(biāo)準(zhǔn)序列化方式。
  • Hessian:Hessian 協(xié)議用于集成 Hessian 的服務(wù),Hessian 底層采用 HTTP 通訊,采用 Servlet 暴露服務(wù),Dubbo 缺省內(nèi)嵌 Jetty 作為服務(wù)器實(shí)現(xiàn)。
  • HTTP:采用 Spring 的 Http Invoker 實(shí)現(xiàn)。
  • Webservice:基于 CXF 的 frontend-simple 和 transports-http 實(shí)現(xiàn)。

Spring Cloud 使用 HTTP 協(xié)議的 REST API。

性能比較

dubbovsspring.jpeg

Dubbo 支持各種通信協(xié)議,而且消費(fèi)方和服務(wù)方使用長鏈接方式交互,通信速度上略勝 Spring Cloud,如果對(duì)于系統(tǒng)的響應(yīng)時(shí)間有嚴(yán)格要求,長鏈接更合適。

服務(wù)依賴方式

Dubbo需要為每個(gè)微服務(wù)定義各自的 Interface 接口,并通過持續(xù)集成發(fā)布到私有倉庫中。調(diào)用方應(yīng)用對(duì)微服務(wù)提供的抽象接口存在強(qiáng)依賴關(guān)系,開發(fā)、測試、集成環(huán)境都需要嚴(yán)格的管理版本依賴。

Spring Cloud 通過 Json 交互,省略了版本管理的問題,但是具體字段含義需要統(tǒng)一管理,自身 Rest API 方式交互,為跨平臺(tái)調(diào)用奠定了基礎(chǔ)。

組件運(yùn)行流程

Dubbo 需要自己開發(fā)一套 API 網(wǎng)關(guān),而 Spring Cloud 則可以通過 Zuul 配置即可完成網(wǎng)關(guān)定制。

Kubernates

Kubernates是一個(gè)容器集群管理系統(tǒng),為容器化的應(yīng)用程序提供部署運(yùn)行、維護(hù)、擴(kuò)展、資源調(diào)度、服務(wù)發(fā)現(xiàn)等功能。Kubernates是Google運(yùn)行Borg大規(guī)模系統(tǒng)達(dá)15年之久的一個(gè)經(jīng)驗(yàn)總結(jié)。它結(jié)合了社區(qū)的最佳創(chuàng)意和實(shí)踐,旨在幫助開發(fā)人員將容器打包、動(dòng)態(tài)編排,同時(shí)幫助各大公司向微服務(wù)方向進(jìn)行技術(shù)演進(jìn)。

Kubernates VS Spring Cloud

服務(wù)關(guān)注點(diǎn) Spring Cloud Kubernates
配置管理 Config Kubernates ConfigMap
服務(wù)發(fā)現(xiàn) Eureka Kubernates Services
負(fù)載均衡 Ribbon Kubernates Services
網(wǎng)關(guān) Zuul Kubernates Services
分布式追蹤 Sleuth Open tracing
容錯(cuò) Hystrix Kubernates Health Check
分布式日志 ELK EFK
任務(wù)管理 Spring Batch Kubernates Jobs

Kubernates是支持多語言,是一個(gè)容器管理平臺(tái),使程序容器化,并在容器管理上提供微服務(wù)功能。

除了提供基本的構(gòu)建微服務(wù)功能外,還提供了環(huán)境、資源限制、管理應(yīng)用程序生命周期的功能。Kubernates更像是一個(gè)平臺(tái),而Spring Cloud是一個(gè)框架。

Kubernates面向DevOps人員,普通開發(fā)人員需要學(xué)習(xí)很多這方面的知識(shí),而且新特性更新快,需要DevOps人員學(xué)習(xí)跟進(jìn),學(xué)習(xí)成本非常高。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,646評(píng)論 19 139
  • 目錄 一、SpringCloud微服務(wù)技術(shù)簡介 1.1 微服務(wù)的功能主要體現(xiàn)在以下兒個(gè)方面。 1.2 微服務(wù)具有以...
    AI視界尼奧閱讀 3,414評(píng)論 0 1
  • https://mp.weixin.qq.com/s?__biz=MzUzNTY4NTYxMA==&mid=224...
    4ea0af17fd67閱讀 1,632評(píng)論 0 25
  • 我一直都以為我愛好文學(xué),可學(xué)識(shí)淺薄,看不懂經(jīng)典名著,提不起興趣,無數(shù)次都不能讓我要看經(jīng)典名著的勃勃興致繼續(xù),總是看...
    周雪2229閱讀 560評(píng)論 0 1
  • 一個(gè)女人最好的狀態(tài)就是:眼里寫滿了故事,臉上卻不見風(fēng)霜,每天化個(gè)淡妝,穿上喜歡的衣裳,?不羨慕誰,不嘲笑誰,也不依...
    清水幽香閱讀 228評(píng)論 0 2

友情鏈接更多精彩內(nèi)容