微服務很紅,一段時間有人吹捧spring cloud的神話,一段時間吹捧grpc的要拯救世界,永遠有人哀唱 dubbo(如今好一些了,)。目前也沒有人比較全面認真仔細的對比過。鳥菜啊此次就解決你們技術選型的問題git
要弄明白,搞清楚spring cloud 的神話,就得搞清楚spring cloud全部的組件spring
spring cloud的默認配置中心,基於git實現。apache
spring cloud 支持 netflix公司開源的組件的一個模塊。netfilx開源組件有Eureka, Hystrix, Zuul, Archaius。json
spring cloud的事件總線,負責整個微服務建構的事件(事件註冊,觸發,傳播)。好比配置發生改變(這個有用嗎?)網絡
Spring Cloud Open Service Broker是一個用於構建實現Open Service Broker API的Spring Boot應用程序的框架。 Open Service Broker API項目容許開發人員爲雲本地平臺(如Cloud Foundry,Kubernetes和OpenShift)中運行的應用程序提供服務。 Spring Cloud Open Service Broker提供了一個基於Spring Boot的框架,使您可以在支持Open Service Broker API的平臺上爲您本身的託管服務快速建立服務代理。app
spring cloud cluster做用是基於Zookeeper, Redis, Hazelcast實現選舉功能。分佈式組件都有這個自帶這個功能吧框架
spring cloud consul做用是基於 Hashicorp Consul實現服務註冊與發現。不是跟Eureka的功能重合了嗎?異步
Spring Cloud Security做用是基於OAuth2 與 zuul實現用戶與資源權限jvm
spring cloud sleuth是基於Zipkin實現鏈路跟蹤maven
spring cloud data flow 做用是提供一套標準從不一樣的數據源裏面讀取數據,對數據進行處理。有點想kafka... 與RocketMQ commn
spring cloud stream 做用是統一了大部分消息中間件的行爲。用 spring cloud stream能夠操做不少消息中間件。好比activeMQ,RibbtMQ,kafka,RocketMQ。(必定用都沒有)
spring cloud stream app starters 做用是能夠把 spring cloud stream 進行獨立部署。部署後能夠提供服務,加入Spring Cloud Data Flow
spring cloud task 做用是 定時任務
spring cloud task app starters 做用是能夠把 spring cloud task 進行獨立部署。部署後能夠提供服務
spring cloud zookeeper 做用是對zookeeper client 進行封裝
spring cloud aws 模塊能夠把spring cloud應用直接部署到AWS服務上
spring cloud connector 做用是負責連接jvm得到jvm運行期信息。好比bean。
spring cloud starters 是spring cloud 支持maven的模塊,引入spring cloud starters 會引入把全部子模塊都默認加載。
spring cloud cli 可讓你以命令行方式快速創建雲組件。
spring cloud contract 做用是契約測試。
spring cloud gateway 做用是網管
spring cloud openFeign 做用是基於feing實現http的rpc功能
這麼多組件,在實際使用中你們能用到多少個組件。我列了列我用過的。
好比沒有買AWS服務沒法使用Spring Cloud AWS 組件等等
功能 | dubbo | OpenFeign | 勝者 |
---|---|---|---|
網絡傳輸 | tcp,http(1,1,1,2.0) | http1.1 | dubbo |
支持多協議 | 是 | 否 | dubbo |
多序列支持 | 是(json,heesin等) | 否(json) | dubbo |
資源隔離 | 是 (經過線程池隔離服務) | 否 | dubbo |
在功能層面 dubbo 實在完爆 openFeian。dubbo還多功能都沒列出來了,實在不忍了。多註冊中心,異步調用等等。
性能 | dubbo | OpenFeign | 理由 | 勝者 |
---|---|---|---|---|
網絡傳輸 | tcp | http1.1 | tcp的性能至少是http1.1的5倍 | dubbo |
序列化性能 | hession | json | hession比json搞4倍 | dubbo |
方法調用方式 | 字節碼 | 動態代理 | 性能相差1.5倍 | dubbo |
在性能方法 dubbo 完爆 openFeian。
不知道爲何用 spring cloud
組件 | 國內 | spring cloud | Netflix | 理由 | 勝者 |
---|---|---|---|---|---|
註冊中心 | nacos | Consul(推薦使用eureka) | Eureka(不維護) | nacos | |
配置中間 | nacos/apollo | Config | archaius | nacos/apollo實在太強大了 | nacos/apolle |
限流 | sentry | 無 | Hystrix(不維護了) | sentry | |
分佈式定時任務 | ejob | task | 無 | ejob | |
鏈路跟蹤 | skyking | Zipkin | 無 | skyking是apache頂級項目 | skyking |
網關 | 無 | Gateway | zuul | zuul |
spring cloud | 國內 | 解讀 |
---|---|---|
Security | 無 | security 實在太龐大了,小公司簡單寫一個aop,大公司本身寫。 |
Bus | 無 | 無用的組件,nacos/apollo就能夠實現傳播了 |
Cluster | 無 | 只是作了封裝而已,業務系統基本用不到 |
Data Flow | RocketMQ-connect | 最全面的是kafka的 |
Stream | 無 | 除了RocketMQ,鳥菜啊不會使用其餘消息中間件,其餘的實在太噁心了 |
Connectors | 無 | 實際上是有是各個庫本身實現了,好比dubbo,driud。 |
spring cloud 的優點組件,對於大部分公司來講基本是雞肋。
使用dubbo,使用國內的組件吧