课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
传输协议是程序员在学习http编程开发技术的时候需要重点掌握的编程知识之一,而今天我们就通过案例分析来了解一下,传输协议的重要性与注意事项。
1、为什么需要协议
传输过程
只有二进制才能在网络中传输,在RPC请求发送前,需要将请求参数信息转换成二进制,写入本地socket,然后通过网卡发送到网络设备中
发送时,并不一定会一次性把所有请求参数的二进制数据发送到对端机器,有可能会拆分成几个数据包或者合并其他请求的数据包(合并前提是同一个TCP连接的数据),至于怎么拆分涉及到系统参数配置和TCP窗口大小。对于服务提供方来说,会从TCP通道中收到很多二进制数据,这时候需要区分哪些数据是属于一个请求的
所以需要在发送请求的时候设定一个边界,然后在收到请求时按照这个边界进行数据分割。这个边界语义的表达,就是协议
为何不用HTTP协议,而是自定义私有RPC协议
RPC负责应用间的通信,性能要求相对较高,HTTP协议数据包大小相对请求数据本身会大很多
HTTP属于无状态协议,客户端无法对请求和响应进行关联,每次请求需要重新建立连接,响应完成后再关闭连接。
因此对于高性能的RPC来说,HTTP很难满足性能需求,需要设计更加紧凑的私有协议
2、如何选择序列化
在序列化的选择上,与序列化协议的效率、性能、序列化协议后的体积相比,其通用性和兼容性优先级更高,因为他是直接关系到服务调用的稳定性和可用率的。对于服务性能来说,服务可用性又更加重要
综合考虑,总结一下这几个序列化协议
选的还是Hessian和Protobuf,因为他们在性能,时间开销,序列化后的体积,通用性,兼容性,安全性都可以满足要求。其中Hessian在使用上更加方便,在对象的兼容性更好;Protobuf则更加高效,通用性上更有优势
3、RPC框架注意事项
对象构造过于复杂
属性很多,又存在多层嵌套。序列化框架在序列化对象时,对象越复杂就越影响性能,消耗CPU,这会严重影响RPC框架的整体性能
对象过于庞大
序列化之后的字节长度达到上兆字节。序列化庞大的对象是很耗费时间的,直接影响到请求耗时。
使用框架不支持的类作为入参类
如Hessian天然不支持LinkedHashMap,LinkedHashSet,大多数情况下好不要使用三方集合类,如Guava中的集合类
对象有复杂的继承关系
在做序列化时,会对对象的属性逐个序列化,当有继承关系时,会不停寻找父类,遍历属性,对象越复杂就会越浪费性能
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。