Feature特征 |
Maturity成熟度 |
Strength强度 |
Problem问题 |
Advise建议 |
User用户 |
Zookeeper注冊中心 |
Stable |
支持基于网络的集群方式,有广泛周边开源产品,建议使用dubbo-2.3.3以上版本号(推荐使用) |
依赖于Zookeeper的稳定性 |
可用于生产环境 |
|
Redis注冊中心 |
Stable |
支持基于client双写的集群方式,性能高 |
要求server时间同步,用于检查心跳过期脏数据 |
可用于生产环境 |
|
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框架。应用于GlassFishserver中 |
线程池不可扩展,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 |
失败自己主动切换。当出现失败,重试其他server,通经常使用于读操作(推荐使用) |
重试会带来更长延迟 |
可用于生产环境 |
Alibaba |
Failfast Cluster |
Stable |
高速失败,仅仅发起一次调用,失败马上报错,通经常使用于非幂等性的写操作 |
假设有机器正在重新启动。可能会出现调用失败 |
可用于生产环境 |
Alibaba |
Failsafe Cluster |
Stable |
失败安全,出现异常时,直接忽略。通经常使用于写入审计日志等操作 |
调用信息丢失 |
可用于生产环境 |
Monitor |
Failback Cluster |
Tested |
失败自己主动恢复,后台记录失败请求,定时重发,通经常使用于消息通知操作 |
不可靠,重新启动丢失 |
可用于生产环境 |
Registry |
Forking Cluster |
Tested |
并行调用多个server。仅仅要一个成功即返回,通经常使用于实时性要求较高的读操作 |
须要浪费很多其它服务资源 |
可用于生产环境 |
|
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,用于汇报状态 |
大量訪问页面时。会影响server的线程和内存 |
可用于生产环境 |
Alibaba |
Log4j Container |
Stable |
自己主动配置log4j的配置。在多进程启动时,自己主动给日志文件按进程分文件夹 |
用户不能控制log4j的配置,不灵活 |
可用于生产环境 |
Alibaba |