微服务很红,一段时间有人吹捧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,使用国内的组件吧