成熟度

介绍 Dubbo 各个功能、策略的成熟度

功能成熟度

FeatureMaturityStrengthProblemAdviseUser
并发控制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访问日志,用于记录调用信息本地存储,影响性能,受磁盘大小限制试用
分布式事务ResearchJTA/XA三阶段提交事务不稳定不可用

策略成熟度

FeatureMaturityStrengthProblemAdviseUser
Zookeeper注册中心Stable支持基于网络的集群方式,有广泛周边开源产品,建议使用dubbo-2.3.3以上版本(推荐使用)依赖于Zookeeper的稳定性可用于生产环境
Redis注册中心Stable支持基于客户端双写的集群方式,性能高要求服务器时间同步,用于检查心跳过期脏数据可用于生产环境
Multicast注册中心Tested去中心化,不需要安装注册中心依赖于网络拓扑和路由,跨机房有风险小规模应用或开发测试环境
Simple注册中心TestedDogfooding,注册中心本身也是一个标准的RPC服务没有集群支持,可能单点故障试用
FeatureMaturityStrengthProblemAdviseUser
Simple监控中心Stable支持JFreeChart统计报表没有集群支持,可能单点故障,但故障后不影响RPC运行可用于生产环境
FeatureMaturityStrengthProblemAdviseUser
Dubbo协议Stable采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)在大文件传输时,单一连接会成为瓶颈可用于生产环境Alibaba
Rmi协议Stable可与原生RMI互操作,基于TCP协议偶尔会连接失败,需重建Stub可用于生产环境Alibaba
Hessian协议Stable可与原生Hessian互操作,基于HTTP协议需hessian.jar支持,http短连接的开销大可用于生产环境
FeatureMaturityStrengthProblemAdviseUser
Netty TransporterStableJBoss的NIO框架,性能较好(推荐使用)一次请求派发两种事件,需屏蔽无用事件可用于生产环境Alibaba
Mina TransporterStable老牌NIO框架,稳定待发送消息队列派发不及时,大压力下,会出现FullGC可用于生产环境Alibaba
Grizzly TransporterTestedSun的NIO框架,应用于GlassFish服务器中线程池不可扩展,Filter不能拦截下一Filter试用
FeatureMaturityStrengthProblemAdviseUser
Hessian SerializationStable性能较好,多语言支持(推荐使用)Hessian的各版本兼容性不好,可能和应用使用的Hessian冲突,Dubbo内嵌了hessian3.2.1的源码可用于生产环境Alibaba
Dubbo SerializationTested通过不传送POJO的类元信息,在大量POJO传输时,性能较好当参数对象增加字段时,需外部文件声明试用
Json SerializationTested纯文本,可跨语言解析,缺省采用FastJson解析性能较差试用
Java SerializationStableJava原生支持性能较差可用于生产环境
FeatureMaturityStrengthProblemAdviseUser
Javassist ProxyFactoryStable通过字节码生成代替反射,性能比较好(推荐使用)依赖于javassist.jar包,占用JVM的Perm内存,Perm可能要设大一些:java -XX:PermSize=128m可用于生产环境Alibaba
Jdk ProxyFactoryStableJDK原生支持性能较差可用于生产环境
FeatureMaturityStrengthProblemAdviseUser
Failover ClusterStable失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用)重试会带来更长延迟可用于生产环境Alibaba
Failfast ClusterStable快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作如果有机器正在重启,可能会出现调用失败可用于生产环境Alibaba
Failsafe ClusterStable失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作调用信息丢失可用于生产环境Monitor
Failback ClusterTested失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作不可靠,重启丢失可用于生产环境Registry
Forking ClusterTested并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作需要浪费更多服务资源可用于生产环境
Broadcast ClusterTested广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于更新提供方本地状态速度慢,任意一台报错则报错可用于生产环境
FeatureMaturityStrengthProblemAdviseUser
Random LoadBalanceStable随机,按权重设置随机概率(推荐使用)在一个截面上碰撞的概率高,重试时,可能出现瞬间压力不均可用于生产环境Alibaba
RoundRobin LoadBalanceStable轮询,按公约后的权重设置轮询比率存在慢的机器累积请求问题,极端情况可能产生雪崩可用于生产环境
LeastActive LoadBalanceStable最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差,使慢的机器收到更少请求不支持权重,在容量规划时,不能通过权重把压力导向一台机器压测容量可用于生产环境
ConsistentHash LoadBalanceStable一致性Hash,相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动压力分摊不均可用于生产环境
FeatureMaturityStrengthProblemAdviseUser
条件路由规则Stable基于条件表达式的路由规则,功能简单易用有些复杂多分支条件情况,规则很难描述可用于生产环境Alibaba
脚本路由规则Tested基于脚本引擎的路由规则,功能强大没有运行沙箱,脚本能力过于强大,可能成为后门试用
FeatureMaturityStrengthProblemAdviseUser
Spring ContainerStable自动加载META-INF/spring目录下的所有Spring配置可用于生产环境Alibaba
Jetty ContainerStable启动一个内嵌Jetty,用于汇报状态大量访问页面时,会影响服务器的线程和内存可用于生产环境Alibaba
Log4j ContainerStable自动配置log4j的配置,在多进程启动时,自动给日志文件按进程分目录用户不能控制log4j的配置,不灵活可用于生产环境Alibaba

最后修改 April 15, 2021: Update serialization.md (#777) (87888ce)