有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准 https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
介绍 Dubbo 各个功能、策略的成熟度
功能成熟度
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
并发控制 |
Tested |
并发控制 |
|
试用 |
|
连接控制 |
Tested |
连接数控制 |
|
试用 |
|
直连提供者 |
Tested |
点对点直连服务提供方,用于测试 |
|
测试环境使用 |
Alibaba |
分组聚合 |
Tested |
分组聚合返回值,用于菜单聚合等服务 |
特殊场景使用 |
可用于生产环境 |
|
参数验证 |
Tested |
参数验证,JSR303 验证框架集成 |
对性能有影响 |
试用 |
LaiWang |
结果缓存 |
Tested |
结果缓存,用于加速请求 |
|
试用 |
|
泛化引用 |
Stable |
泛化调用,无需业务接口类进行远程调用,用于测试平台,开放网关桥接等 |
|
可用于生产环境 |
Alibaba |
泛化实现 |
Stable |
泛化实现,无需业务接口类实现任意接口,用于 Mock 平台 |
|
可用于生产环境 |
Alibaba |
回声测试 |
Tested |
回声测试 |
|
试用 |
|
隐式传参 |
Stable |
附加参数 |
|
可用于生产环境 |
|
异步调用 |
Tested |
不可靠异步调用 |
|
试用 |
|
本地调用 |
Tested |
本地调用 |
|
试用 |
|
参数回调 |
Tested |
参数回调 |
特殊场景使用 |
试用 |
Registry |
事件通知 |
Tested |
事件通知,在远程调用执行前后触发 |
|
试用 |
|
本地存根 |
Stable |
在客户端执行部分逻辑 |
|
可用于生产环境 |
Alibaba |
本地伪装 |
Stable |
伪造返回结果,可在失败时执行,或直接执行,用于服务降级 |
需注册中心支持 |
可用于生产环境 |
Alibaba |
延迟暴露 |
Stable |
延迟暴露服务,用于等待应用加载 warmup 数据,或等待 spring 加载完成 |
|
可用于生产环境 |
Alibaba |
延迟连接 |
Tested |
延迟建立连接,调用时建立 |
|
试用 |
Registry |
粘滞连接 |
Tested |
粘滞连接,总是向同一个提供方发起请求,除非此提供方挂掉,再切换到另一台 |
|
试用 |
Registry |
令牌验证 |
Tested |
令牌验证,用于服务授权 |
需注册中心支持 |
试用 |
|
路由规则 |
Tested |
动态决定调用关系 |
需注册中心支持 |
试用 |
|
配置规则 |
Tested |
动态下发配置,实现功能的开关 |
需注册中心支持 |
试用 |
|
访问日志 |
Tested |
访问日志,用于记录调用信息 |
本地存储,影响性能,受磁盘大小限制 |
试用 |
|
分布式事务 |
Research |
JTA/XA 三阶段提交事务 |
不稳定 |
不可用 |
|
策略成熟度
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Zookeeper 注册中心 |
Stable |
支持基于网络的集群方式,有广泛周边开源产品,建议使用 dubbo-2.3.3 以上版本(推荐使用) |
依赖于 Zookeeper 的稳定性 |
可用于生产环境 |
|
Redis 注册中心 |
Stable |
支持基于客户端双写的集群方式,性能高 |
要求服务器时间同步,用于检查心跳过期脏数据 |
可用于生产环境 |
|
Multicast 注册中心 |
Tested |
去中心化,不需要安装注册中心 |
依赖于网络拓扑和路由,跨机房有风险 |
小规模应用或开发测试环境 |
|
Simple 注册中心 |
Tested |
Dogfooding,注册中心本身也是一个标准的 RPC 服务 |
没有集群支持,可能单点故障 |
试用 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Simple 监控中心 |
Stable |
支持 JFreeChart 统计报表 |
没有集群支持,可能单点故障,但故障后不影响 RPC 运行 |
可用于生产环境 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Dubbo 协议 |
Stable |
采用 NIO 复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用) |
在大文件传输时,单一连接会成为瓶颈 |
可用于生产环境 |
Alibaba |
Rmi 协议 |
Stable |
可与原生 RMI 互操作,基于 TCP 协议 |
偶尔会连接失败,需重建 Stub |
可用于生产环境 |
Alibaba |
Hessian 协议 |
Stable |
可与原生 Hessian 互操作,基于 HTTP 协议 |
需 hessian.jar 支持,http 短连接的开销大 |
可用于生产环境 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Netty Transporter |
Stable |
JBoss 的 NIO 框架,性能较好(推荐使用) |
一次请求派发两种事件,需屏蔽无用事件 |
可用于生产环境 |
Alibaba |
Mina Transporter |
Stable |
老牌 NIO 框架,稳定 |
待发送消息队列派发不及时,大压力下,会出现 FullGC |
可用于生产环境 |
Alibaba |
Grizzly Transporter |
Tested |
Sun 的 NIO 框架,应用于 GlassFish 服务器中 |
线程池不可扩展,Filter 不能拦截下一 Filter |
试用 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Hessian Serialization |
Stable |
性能较好,多语言支持(推荐使用) |
Hessian 的各版本兼容性不好,可能和应用使用的 Hessian 冲突,Dubbo 内嵌了 hessian3.2.1 的源码 |
可用于生产环境 |
Alibaba |
Dubbo Serialization |
Tested |
通过不传送 POJO 的类元信息,在大量 POJO 传输时,性能较好 |
当参数对象增加字段时,需外部文件声明 |
试用 |
|
Json Serialization |
Tested |
纯文本,可跨语言解析,缺省采用 FastJson 解析 |
性能较差 |
试用 |
|
Java Serialization |
Stable |
Java 原生支持 |
性能较差 |
可用于生产环境 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Javassist ProxyFactory |
Stable |
通过字节码生成代替反射,性能比较好(推荐使用) |
依赖于 javassist.jar 包,占用 JVM 的 Perm 内存,Perm 可能要设大一些:java -XX:PermSize=128m |
可用于生产环境 |
Alibaba |
Jdk ProxyFactory |
Stable |
JDK 原生支持 |
性能较差 |
可用于生产环境 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Failover Cluster |
Stable |
失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用) |
重试会带来更长延迟 |
可用于生产环境 |
Alibaba |
Failfast Cluster |
Stable |
快速失败,只发起一次调用,失败立即报错, 通常用于非幂等性的写操作 |
如果有机器正在重启,可能会出现调用失败 |
可用于生产环境 |
Alibaba |
Failsafe Cluster |
Stable |
失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作 |
调用信息丢失 |
可用于生产环境 |
Monitor |
Failback Cluster |
Tested |
失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作 |
不可靠,重启丢失 |
可用于生产环境 |
Registry |
Forking Cluster |
Tested |
并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作 |
需要浪费更多服务资源 |
可用于生产环境 |
|
Broadcast Cluster |
Tested |
广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于更新提供方本地状态 |
速度慢,任意一台报错则报错 |
可用于生产环境 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Random LoadBalance |
Stable |
随机,按权重设置随机概率(推荐使用) |
在一个截面上碰撞的概率高,重试时,可能出现瞬间压力不均 |
可用于生产环境 |
Alibaba |
RoundRobin LoadBalance |
Stable |
轮询,按公约后的权重设置轮询比率 |
存在慢的机器累积请求问题,极端情况可能产生雪崩 |
可用于生产环境 |
|
LeastActive LoadBalance |
Stable |
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差,使慢的机器收到更少请求 |
不支持权重,在容量规划时,不能通过权重把压力导向一台机器压测容量 |
可用于生产环境 |
|
ConsistentHash LoadBalance |
Stable |
一致性 Hash,相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动 |
压力分摊不均 |
可用于生产环境 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
条件路由规则 |
Stable |
基于条件表达式的路由规则,功能简单易用 |
有些复杂多分支条件情况,规则很难描述 |
可用于生产环境 |
Alibaba |
脚本路由规则 |
Tested |
基于脚本引擎的路由规则,功能强大 |
没有运行沙箱,脚本能力过于强大,可能成为后门 |
试用 |
|
Feature |
Maturity |
Strength |
Problem |
Advise |
User |
Spring Container |
Stable |
自动加载 META-INF/spring 目录下的所有 Spring 配置 |
|
可用于生产环境 |
Alibaba |
Jetty Container |
Stable |
启动一个内嵌 Jetty,用于汇报状态 |
大量访问页面时,会影响服务器的线程和内存 |
可用于生产环境 |
Alibaba |
Log4j Container |
Stable |
自动配置 log4j 的配置,在多进程启动时,自动给日志文件按进程分目录 |
用户不能控制 log4j 的配置,不灵活 |
可用于生产环境 |
|
A
l
i
b
a
b
a
|