技術與架構之微服務框架對比(spring cloud ,dubbo)

前言

微服務很紅,一段時間有人吹捧spring cloud的神話,一段時間吹捧grpc的要拯救世界,永遠有人哀唱 dubbo(如今好一些了,)。目前也沒有人比較全面認真仔細的對比過。鳥菜啊此次就解決你們技術選型的問題git

spring cloud的組件

要弄明白,搞清楚spring cloud 的神話,就得搞清楚spring cloud全部的組件spring

Spring Cloud Config

spring cloud的默認配置中心,基於git實現。apache

Spring Cloud Netflix

spring cloud 支持 netflix公司開源的組件的一個模塊。netfilx開源組件有Eureka, Hystrix, Zuul, Archaius。json

Spring Cloud Bus

spring cloud的事件總線,負責整個微服務建構的事件(事件註冊,觸發,傳播)。好比配置發生改變(這個有用嗎?)網絡

Spring Cloud Open Service Broker

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

spring cloud cluster做用是基於Zookeeper, Redis, Hazelcast實現選舉功能。分佈式組件都有這個自帶這個功能吧框架

Spring Cloud Consul

spring cloud consul做用是基於 Hashicorp Consul實現服務註冊與發現。不是跟Eureka的功能重合了嗎?異步

Spring Cloud Security

Spring Cloud Security做用是基於OAuth2 與 zuul實現用戶與資源權限jvm

Spring Cloud Sleuth

spring cloud sleuth是基於Zipkin實現鏈路跟蹤maven

Spring Cloud Data Flow

spring cloud data flow 做用是提供一套標準從不一樣的數據源裏面讀取數據,對數據進行處理。有點想kafka... 與RocketMQ commn

Spring Cloud Stream

spring cloud stream 做用是統一了大部分消息中間件的行爲。用 spring cloud stream能夠操做不少消息中間件。好比activeMQ,RibbtMQ,kafka,RocketMQ。(必定用都沒有)

Spring Cloud Stream App Starters

spring cloud stream app starters 做用是能夠把 spring cloud stream 進行獨立部署。部署後能夠提供服務,加入Spring Cloud Data Flow

Spring Cloud Task

spring cloud task 做用是 定時任務

Spring Cloud Task App Starters

spring cloud task app starters 做用是能夠把 spring cloud task 進行獨立部署。部署後能夠提供服務

Spring Cloud Zookeeper

spring cloud zookeeper 做用是對zookeeper client 進行封裝

Spring Cloud AWS

spring cloud aws 模塊能夠把spring cloud應用直接部署到AWS服務上

Spring Cloud Connectors

spring cloud connector 做用是負責連接jvm得到jvm運行期信息。好比bean。

Spring Cloud Starters

spring cloud starters 是spring cloud 支持maven的模塊,引入spring cloud starters 會引入把全部子模塊都默認加載。

Spring Cloud CLI

spring cloud cli 可讓你以命令行方式快速創建雲組件。

Spring Cloud Contract

spring cloud contract 做用是契約測試。

Spring Cloud Gateway

spring cloud gateway 做用是網管

Spring Cloud OpenFeign

spring cloud openFeign 做用是基於feing實現http的rpc功能

總結

這麼多組件,在實際使用中你們能用到多少個組件。我列了列我用過的。

  1. Spring Cloud OpenFeign
  2. Spring Cloud Netflix
  3. Spring Cloud Gateway
  4. Spring Cloud Sleuth
  5. Spring Cloud Task

好比沒有買AWS服務沒法使用Spring Cloud AWS 組件等等

國內體系與springcloud體系的對比

dubbo 與 Spring Cloud OpenFeign 對比

功能 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 優點組件
spring cloud 國內 解讀
Security security 實在太龐大了,小公司簡單寫一個aop,大公司本身寫。
Bus 無用的組件,nacos/apollo就能夠實現傳播了
Cluster 只是作了封裝而已,業務系統基本用不到
Data Flow RocketMQ-connect 最全面的是kafka的
Stream 除了RocketMQ,鳥菜啊不會使用其餘消息中間件,其餘的實在太噁心了
Connectors 實際上是有是各個庫本身實現了,好比dubbo,driud。

spring cloud 的優點組件,對於大部分公司來講基本是雞肋。

總結

  1. spring cloud就是一個組裝貨,組件極度不穩定
  2. spring cloud的性能相對比較差
  3. spring cloud的基礎功能比較弱
  4. spring cloud 優點組件,大部分公司沒法使用
  5. spring cloud組件在高性能面前直接跪,由於組件內部設計的問題。

使用dubbo,使用國內的組件吧

相關文章
相關標籤/搜索