RPC框架Dubbo深入分析,程序员Java基础案例教程

连接个数:单连接

连接方式:长连接

传输协议:TCP

传输方式:NIO异步传输

序列化:Hessian二进制序列化

适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。

适用场景:常规远程服务方法调用

Rmi协议

可与原生RMI互操作,基于TCP协议

偶尔会连接失败,需重建Stub

Hessian协议

可与原生Hessian互操作,基于HTTP协议

需hessian.jar支持,http短连接的开销大

Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现

可以和原生Hessian服务互操作

提供者用Dubbo的Hessian协议暴露服务,消费者直接用标准Hessian接口调用

或者提供方用标准Hessian暴露服务,消费方用Dubbo的Hessian协议调用

基于Hessian的远程调用协议

总结

连接个数:多连接

连接方式:短连接

传输协议:HTTP

传输方式:同步传输

序列化:Hessian二进制序列化

适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件

适用场景:页面传输,文件传输,或与原生hessian服务互操作

约束

参数及返回值需实现Serializable接口

参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失

exchange( 信息交换层)

封装请求响应模式,同步转异步

以Request, Response为中心,扩展接口为Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer

transport( 网络传输层)

抽象mina和netty为统一接口

以Message为中心,扩展接口为Channel, Transporter, Client, Server, Codec

选择

Netty

性能较好(推荐使用)

一次请求派发两种事件,需屏蔽无用事件

Mina

老牌NIO框架,稳定

待发送消息队列派发不及时,大压力下,会出现FullGC

Grizzly

Sun的NIO框架,应用于GlassFish服务器中

线程池不可扩展,Filter不能拦截下一Filter

serialize( 数据序列化层)

可复用的一些工具

扩展接口为Serialization, ObjectInput, ObjectOutput, ThreadPool

选择

Hessian

性能较好,多语言支持(推荐使用)

Hessian的各版本兼容性不好,可能和应用使用的Hessian冲突,Dubbo内嵌了hessian3.2.1的源码

Dubbo

通过不传送POJO的类元信息,在大量POJO传输时,性能较好

当参数对象增加字段时,需外部文件声明

Json

纯文本,可跨语言解析,缺省采用FastJson解析

性能较差

Jav

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

a

Java原生支持

性能较差

关系说明

在RPC中,Pr

你可能感兴趣的:(程序员,面试,java,后端)