技术与架构之微服务框架对比(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,使用国内的组件吧

相关文章
相关标签/搜索