zoukankan      html  css  js  c++  java
  • RPC序列化

    序列化:将对象状态转换为可保持或传输的二进制。

    反序列化:将二进制数据转换为对象的过程。

    常见的序列化方式:

    后续代码示例会加上。

    1.JDK原生序列化:

    • 安全性较差。

    2.JSON:

    • JSON 是典型的 Key-Value 方式,没有数据类型,是一种文本型序列化框架
    • JSON 进行序列化的额外空间开销比较大,对于大数据量服务这意味着需要巨大的内存和磁盘开销;JSON 没有类型,但像 Java 这种强类型语言,需要通过反射统一解决,所以性能不会太好。所以如果 RPC 框架选用 JSON 序列化,服务提供者与服务调用者之间传输的数据量要相对较小,否则将严重影响性能。

    3.XML:

    • 文本类序列化方式
    • 序列化的额外空间开销比较大

    4.Hessian:

    • Hessian 是动态类型、二进制、紧凑的,并且可跨语言移植的一种序列化框架。Hessian 协议要比 JDK、JSON 更加紧凑,性能上要比 JDK、JSON 序列化高效很多,而且生成的字节数也更小。
    • 相对于 JDK、JSON,由于 Hessian 更加高效,生成的字节数更小,有非常好的兼容性和稳定性,所以 Hessian 更加适合作为 RPC 框架远程通信的序列化协议。

    5.Protobuf:

    • Protobuf 是 Google 公司内部的混合语言数据标准,是一种轻便、高效的结构化数据存储格式,可以用于结构化数据序列化,支持 Java、Python、C++、Go 等语言。Protobuf 使用的时候需要定义 IDL(Interface description language),然后使用不同语言的 IDL 编译器,生成序列化工具类,
    • 优点:序列化后体积相比 JSON、Hessian 小很多;IDL 能清晰地描述语义,所以足以帮助并保证应用程序之间的类型不会丢失,无需类似 XML 解析器;序列化反序列化速度很快,不需要通过反射获取类型;消息格式升级和兼容性不错,可以做到向后兼容。

    6.Thrift:

    • Thrift是Facebook开源提供的一个高性能,轻量级RPC服务框架,其产生正是为了满足当前大数据量、分布式、跨语言、跨平台数据通讯的需求。 但是,Thrift并不仅仅是序列化协议,而是一个RPC框架。 相对于JSON和XML而言,Thrift在空间开销和解析性能上有了比较大的提升,对于对性能要求比较高的分布式系统,它是一个优秀的RPC解决方案;但是由于Thrift的序列化被嵌入到Thrift框架里面, Thrift框架本身并没有透出序列化和反序列化接口,这导致其很难和其他传输层协议共同使用(例如HTTP)。

    RPC框架如何选择序列化方式?

      优先级:安全性--通用性--兼容性--性能--效率--空间开销

    在RPC框架中,构造入参,返回值需要注意以下几点

    1. 对象要尽量简单,没有太多的依赖关系,属性不要太多,尽量高内聚;
    2. 入参对象与返回值对象体积不要太大,更不要传太大的集合;
    3. 尽量使用简单的、常用的、开发语言原生的对象,尤其是集合类;
    4. 对象不要有复杂的继承关系,最好不要有父子类的情况。
  • 相关阅读:
    plsql调试存储过程卡住的原因以及处理
    JavaWeb三大组件(Servlet、Filter、Listener)的区别
    单点登录原理
    Oracle 导表异常处理方案 (解决空表导出出错问题)
    在Oracle中删除用户时提示:ORACLE无法删除当前连接用户
    VisualSvn的权限管理
    MySql常用命令总结
    Oracle 常用SQL
    参数
    java
  • 原文地址:https://www.cnblogs.com/jiezai/p/12393171.html
Copyright © 2011-2022 走看看