技术对比

微服务框架对比

对比项 Spring Cloud Dubbo
服务注册中心 - Eureka
- Zookeeper
- Etcd
- Consul
- Zookeeper
- Redis
服务调用方式 REST API
RPC
gRPC
RPC
服务监控 Spring Boot Admin Dubbo-monitor
断路器 Hystrix Sentinel
服务网关 Zuul
分布式配置 Spring Cloud Config Nacos
服务跟踪 Spring Cloud Sleuth
消息总线 Spring Cloud Bus
数据流 Spring Cloud Stream
批量任务 Spring Cloud Task

网关对比

对比项 kong Traefik Ambassador Tyk Zuul Spring Cloud Gateway
用途 企业级API管理 微服务网关 微服务网关 微服务网关 微服务网关 微服务网关
学习曲线
成本 开源
企业版
开源 开源
专业版
开源
企业版
开源 开源
配置语言 - Admin REST API
- Text file(nginx、conf)
- TOML - YAML - Tyk REST API - REST API
- YAML静态配置
- REST API
- YAML静态配置
配置端点类型 命令式 声明式 声明式 命令式 命令式 命令式
拖拽配置
管理模式 configurable decentralised
self-service
decentralised
self-service
decentralised
self-service
decentralised
self-service
decentralised
self-service
Kubernetes部署难度
Cloud IAAS部署难度 -
Private Data Center部署难度 -
部署模式 金丝雀(企业版) 金丝雀 金丝雀
shadow
金丝雀 金丝雀 金丝雀
state postgres
cassandra
kubernetes kubernetes redis 内存文件 内存文件
扩展功能 插件 自己实现 插件 插件 自己实现 自己实现
扩展方法 水平 水平 水平 水平 水平 水平
服务发现 动态 动态 动态 动态 动态 动态
协议 http
https
websocket
http
https
websocket
grpc
http
https
websocket
grpc
http
https
websocket
grpc
http
https
http
https
基于 kong+nginx traefik envoy tyk zuul gateway
ssl
websocket
routing host
path
method
host
path
host
path
header
host
path
限流 需要开发
熔断 需要其它组件 需要其它组件
重试
健康检查
负载均衡算法 轮询
哈希
轮询
加权轮询
加权轮询 轮询 轮询
随机
加权轮询
自定义
轮询
随机
加权轮询
自定义
权限 Basic Auth
HMAC
JWT、Key
LDAP
OAuth2.0
PASETO
basic HMAC
JWT
Mutual TLS
OpenID Connect
Basic Auth
LDAP
社交OAuth(GPIus、Twitter、Github)
传统基本身份验证提供程序
开发实现 开发实现
tracing 需要其它组件 需要其它组件
istio集成
dashboard grafana
Prometheus
社区活跃度
成熟度
架构优势和扩展性 丰富的插件 有插件但不多
能够和Istio无缝集成
丰富的插件 完全需要自研,但与Spring Cloud深度集成 完全需要自研,但与Spring Cloud深度集成

Postgresql与Cassandra对比

对比项 Postgresql Cassandra
厂家 加利福尼亚大学伯克利分校 Facebook
开发语言 C Java
类型 关系型 NoSQL
存储方式 行存储 列存储
水平扩展方式 分片(sharding) 集群
水平扩展性 困难 容易
适用场景 存储维度表、统计结果 - 写操作较多,读比较少
- 存储监控或者日志数据的存储

服务注册中心对比

对比项 Eureka Zookeeper Etcd Consul Nacos
实现语言 Java Java Go Go Java
CAP AP CP CP CA AP
接口 http 客户端 http
grpc
http
dns
分布式一致性算法 非强一致性 Paxos Raft Raft
watch支持 支持 long polling/大部分增量 支持 支持 long polling 全量/支持long polling
自身监控 metrics - metrics metrics
服务健康检查 可配支持 (弱)长连接,keepalive 连接心跳 服务状态,内存,硬盘等
多数据中心
kv存储服务
安全 ACL https支持(弱) ACL
https
Spring Cloud集成
优点 - 1. 功能强大,不仅仅只是服务发现
2. 提供watcher机制能实时获取服务提供者的状态
3. dubbo等框架支持
1.简单易用,不需要集成sdk
2.可配置性强
1. 简单易用,不需要集成sdk
2. 自带健康检查
3. 支持多数据中心
4. 提供web管理界面
缺点 1. 客户端注册服务上报所有信息,节点多的情况下,网络,服务端压力过大,且浪费内存
2. 客户端更新服务信息通过简单的轮询机制,当服务数量巨大时,服务器压力过大
3. 集群伸缩性不强,服务端集群通过广播式的复制,增加服务器压力
4. Eureka2.0 闭源
1. 没有健康检查
2. 需在服务中集成sdk,复杂度高
3. 不支持多数据中心
1. 没有健康检查
2. 需配合第三方工具一起完成服务发现
3. 不支持多数据中心
不能实时获取服务信息的变化通知 -
厂家 Pivotal Pivotal CoreOS-->Red Hat Pivotal 阿里

配置中心对比

对比项 Spring Cloud Config Disconf Apollo Consul Zookeeper Nacos
厂商 Pivotal 百度 携程 Pivotal Pivotal 阿里
开发语言 Java Java Java Go Java Java
特点 1. 遵循Spring Cloud Config的配置管理规范
2. 后端存储支持丰富(支持Git、SVN、MySQL、Vault、本地存储等)
1. 界面良好
2. 部署简单
1. 概念较为清晰,上手简单
2. 完善的流程、权限控制
3. 界面友好
4. 文档较为丰富
1. 遵循Spring Cloud Config的配置管理规范
2. 使用较为简单
3. 有界面
4. 不仅能做配置管理,也能做注册中心
1. 遵循Spring Cloud Config的配置管理规范
2. 使用较为简单
3. 不仅能做配置管理,也能做注册中心
1. 目前在Spring Cloud孵化器中孵化,孵化成功后,将成为Spring Cloud官方推荐的组件之一
2. 不仅能做配置管理,也能做注册中心
3. 界面友好
4. 上手简单
5. 文档丰富
缺点 1. 没有界面,管理麻烦
2. 没有权限管理
3. 依赖繁多
- 如果使用Git作为后端存储,需要搭建GitLab或其他Git服务器集群
- 如需实现配置批量刷新,需要借助Spring Cloud Bus,依赖Kafka或RabbitMQ
停止维护 - - 1. 无界面
2. 无权限管理
-

链路监控对比

对比项 Cat Zipkin Pinpoint Skywalking
厂家 大众点评 Twitter Woonduk Kang(韩国人) 吴晟
实现方式 代码埋点(拦截器,注解,过滤器等) 拦截请求,发送(HTTP,mq)数据至zipkin服务 java探针,字节码增强 java探针,字节码增强
采集数据 系统层:cpu、men、disk、load等
应用层:JVM、链路、web调用、方法代码执行次数耗时等
业务层:业务KPI数据(手动埋点)
系统层:无
应用层:链路、接口执行次数、耗时等
业务层:无
系统层:cpu、men、disk、load等
应用层:JVM、链路、web调用、方法代码执行次数耗时等
系统层:cpu、men、disk、load等
应用层:JVM、链路、web调用、方法代码执行次数耗时等
接入方式 代码侵入 基于linkerd或者sleuth方式,引入配置即可 javaagent字节码 javaagent字节码
agent到collector的协议 http/tcp http,MQ thrift gRPC
OpenTracing
颗粒度 代码级 接口级 方法级 方法级
全局调用统计
traceid查询
报警
JVM监控
页面健壮度 **** ** ***** ****
数据存储 - 本地文件
- MySQL
- HDFS
- MySQL
- ES
- Cassanadra
- HBase - MySQL
- ES
- TiDB
- H2
- Sharding Sphere
web容器 - Tomcat6/7/8
- Resin
- Jetty
- JBoss
- Websphere
- Tomcat7/8/9
- Resin
- Jetty
JDBC - MySQL
- Oracle
- MySQL
- Oracle
- Sharding-JDBC
消息中间件 - ActiveMQ
- RabbitMQ
- RocketMQ 4.x
- Kafka
日志 - log4j
- Logback
- log4j
- log4j2
- Logback
HTTP库 - Apache HTTP Client
- GoogleHttpClient
- OkHttpClient
- Apache HTTP Client
- OkHttpClient
- Feign
Spring体系 - spring
- springboot
- spring
- springboot
- eureka
- hystrix
RPC框架 - Dubbo
- Thrift
- Dubbo
- Motan
- gRPC
- ServiceComb
NOSQL - Memcached
- Redis
- CASSANDRA
- Memcached
- Redis
对吞吐量影响 中高
消息传输 netty - 消息队列
- http
thrift gRPC

限流方案对比

对比项 Hystrix resilience4j Sentinel
背景 - Netflix开源
- 停止更新
- Netflix官方推荐 - 阿里
隔离策略 线程池隔离/信号量隔离 信号量隔离 信号量隔离(并发线程数限流)
熔断降级策略 基于异常比率 基于异常比率、响应时间 基于响应时间、异常比率、异常数
实时统计实现 滑动窗口(基于 RxJava) Ring Bit Buffer 滑动窗口(LeapArray)
动态规则配置 支持多种数据源 有限支持 支持多种数据源
扩展性 插件的形式 接口的形式 多个扩展点
基于注解的支持
限流 有限的支持 Rate Limiter 基于 QPS,支持基于调用关系的限流
流量整形 简单的 Rate Limiter 模式 支持预热模式、匀速器模式、预热排队模式
系统自适应保护
控制台 简单的监控查看 不提供控制台,可对接其它监控系统 提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等

鉴权、授权方案对比

对比项 CAS Apache Oltu Spring Security OAuth OAuth-Apis
SSO
OAuth
JWT
集成成本
可扩展性

负载均衡调用方式对比

对比项 Ribbon Feign
介绍 - 一个基于 HTTP 和 TCP 客户端 的负载均衡的工具
- 使用 HttpClient 或 RestTemplate 模拟http请求
- 在 Ribbon的基础上进行了一次改进
- 像是调用自身工程的方法调用,而感觉不到是调用远程方法
启动类使用的注解 @RibbonClient @EnableFeignClients
服务的指定位置 @RibbonClient注解上声明 在定义抽象方法的接口中使用@FeignClient声明
调用方式 需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务 - 在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可
- 不需要自己构建http请求,但要求抽象方法的注解、方法签名要和提供服务的方法完全一致
使用体验 繁琐 方便

HTTP与RPC对比

对比项 Http RPC
易用性 简单 复杂
开发复杂
部署复杂,很多中间件默认并不支持
序列化次数 2 1
速度 适中
协议 HTTP 二进制流的序列化协议
HTTP方法 Get
Post
Put
Delete
Options
Patch等
Get
Post
耦合性
服务发现性 不好
版本控制 简单 困难
缓存支持 HTTP缓存 自定义缓存
跨防火墙
适用场景 关注对象与资源
会有多种不同的客户端
需要良好的可发现性和文档
面向动作或者指令
仅需要简单的交互
消息密集型
对系统性能有较高要求

连接池对比

对比项 tomcat-jdbc dbcp c3p0 Druid HikariCP
代码复杂程度 简单 简单 复杂 中等 简单
是否支持PSCache
监控 jmx jmx jmx、log jmx、log、http jmx
sql拦截及解析
连接池管理 FairBlockingQueue
LinkedBlockingDeque
队列 数组 - threadlocal
- CopyOnWriteArrayList(COW)
是否更新维护
背景 - 阿里
- 监控功能强大
- 性能最好
- Spring Boot将在2.0版本默认的JDBC连接池

日志框架对比

对比项 log4j slf4j Logback log4j2
背景 - 元老级框架
- 1999年发布首个版本
- 2012年发布最后一个版本
- 2015年正式宣布终止
- 在log4j被Apache收入门下后,由于理念不合,log4j的作者Ceki离开并开发了slf4j和logback
- 不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging API,它只服务于各种各样的日志系統
- 在log4j被Apache收入门下后,由于理念不合,log4j的作者Ceki离开并开发了slf4j和logback
- logback则吸取了log4j的经验,实现了很多强大的新功能,再加上它和slf4j能够无缝集成,也受到了欢迎
Apache在2014年发布首个log4j2版本,吸收了logback的优点,又增加了新的特性
性能 最差 - - 同步模式下吞吐量大于log4j
- 异步模式下吞吐量小于log4j
- 最好
- 高于logback等10倍以上
适用场景 不推荐 - 系统中存在多种日志框架,用于整合
- 只有系统中只有一种日志系統,那就没有使用SLF4J的必要
- Spring Boot默认
- 深度使用
- 简单使用
- 看中性能

Git源码服务器对比

对比项(免费) 码云 Coding 云效
背景 OSChina 腾讯 阿里
人数 5 5 30
单个项目容量 500M 不限 2G
总容量 5G 不限 120G
仓库/项目数量 不限 不限 60
持续集成
安全 不确定
团队Wiki

Spring Security与Shiro对比

对比项 Shiro Spring Security
易用性 配置和使用比较简单 复杂
依赖性 不依赖任何框架和容器,可以独立运行 以来Spring容器
功能 比Shiro更加丰富,例如安全防护方面
社区资源 比Shiro丰富一些

kong dashboard与konga对比

对比项 kong dashboard konga
兼容性 - ≥0.6
- <2.0.0
- 完全兼容
- 从0.14.0开始,Konga仅与Kong>= 1.0.0兼容

Docker镜像构建插件对比

对比项 fabric8io spotify bibryam
docker-compose支持
注意:不支持3.0、3.0+
控制流程
远程docker主机的连接支持 -

跨域方案对比

对比项 CORS JSONP
浏览器兼容 IE >=10
其它浏览器全部支持
全部支持
请求支持 支持所有类型的 HTTP 请求 只支持GET请求
依赖条件 服务器跟浏览器必须都支持CORS
开发便利性 容易 复杂

RPC 框架对比

对比项 Dubbo motan rpcx thrift grpc
跨语言支持
多种注册中心
多序列化框架支持
分布式(服务治理)
管理中心

MongoDB 与 Elasticsearch 对比

对比项 MongoDB Elasticsearch
定位 文档型数据库 文档型搜索引擎
对比项 MongoDB Elasticsearch 备注
定位 文档型数据库 文档型搜索引擎 一个管理数据,一个检索数据
资源占用 一般 mongo 使用 c++, es 使用 Java 开发
写入延迟 es 的写入延迟默认 1s, 可配置,但是要牺牲一些东西
全文索引支持度 一般 非常好 es 本来就是搜索引擎,这个没啥可比性
有无 Schema 两者都是无 Schema
支持的数据量 PB+ TB+ ~ PB 两者支持的量并不好说的太死,都支持分片和横向扩展,但是相对来说 MongoDB 的数据量支持要更大一点
性能 非常好 MongoDB 在大部分场景性能比 es 强的多得多
索引结构 B 树 LSM 树 es 追求写入吞吐量,MongoDB 读写比较均衡
操作接口 TCP Restful(Http)
是否支持分片
是否支持副本
选主算法 Bully (霸凌) Bully (霸凌) 相比于 Paxos 和 Raft 算法实现更简单并有一定可靠性上的妥协,但是选举速度比较快
扩展难度 容易 非常容易
配置难度 非常容易
地理位置 支持 支持
运维工具 丰富 一般
插件和引擎 有多个存储引擎供选择 有大量插件可以使用 -
坚持原创技术分享,您的支持将鼓励我继续创作!
0%