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

    序列化:把对象转换为字节序列的过程称为对象的序列化。 
    反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

    dubbo 支持多种序列化方式并且序列化是和协议相对应的。比如:dubbo协议的 dubbo, hessian2,java,compactedjava,rmi协议缺省为java,以及http协议的json等。

    dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它
    hessian2序列化:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式
    json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库,但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。
    java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。
    这四种主要序列化方式的性能从上到下依次递减。对于dubbo RPC这种追求高性能的远程调用方式来说,实际上只有1、2两种高效序列化方式比较般配,而第1个 dubbo 序列化由于还不成熟,所以实际只剩下2可用,所以dubbo RPC默认采用 hessian2 序列化。

    但 hessian 是一个比较老的序列化实现了,而且它是跨语言的,所以不是单独针对java进行优化的。而dubbo RPC实际上完全是一种Java to Java的远程调用,其实没有必要采用跨语言的序列化方式(当然肯定也不排斥跨语言的序列化)。

    最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括:

    专门针对Java语言的:Kryo,FST等等
    跨语言的:ProtostuffProtoBuf,Thrift,Avro,MsgPack等等(Ctrip采用ProtoBuf,跨语言)
    这些序列化方式的性能多数都显著优于 hessian2 (甚至包括尚未成熟的dubbo序列化)。所以我们可以
    为 dubbo 引入 Kryo 和 FST 这两种高效 Java 来优化 dubbo 的序列化。

    使用Kryo和FST非常简单,只需要在dubbo RPC的XML配置中添加一个属性即可:

    <dubbo:protocol name="dubbo" serialization="kryo"/>

    方案调研(Ctrip)

    PB(ProtoBuf)和Hessian2序列化器比较

    CDubbo默认使用的是Hessian2序列化器,由于良好的兼容性,所以推荐给绝大多数场景使用。

    因为Hessian2会在序列化结果中写入对象的类信息、字段信息等,所以序列化的结果是『自解释的』,从而对开发者很友好,不需要严格限制实体对象字段添加的顺序。

    PB则出于对性能和序列化大小的考虑,在实际输出的序列化结果中,不包含任何的类信息、字段信息等,只有字段的序号信息,所以对实体对象的字段顺序有严格要求,比较容易出错。


    原文:https://blog.csdn.net/u012410733/article/details/80889014

  • 相关阅读:
    python 输出所有列表元素的乘积
    shell 变量赋值运算
    shell 判断变量是否为空
    js 获取地址栏域名以及URL
    python 获取列表大于指定长度的元素
    python 判断列表字符串元素首尾字符是否相同
    python 通过列表元素值截取列表并获取长度
    python 判断两个列表是否有公共元素
    python 获取列表的键值对
    python 判断列表的包含关系
  • 原文地址:https://www.cnblogs.com/twoheads/p/10132574.html
Copyright © 2011-2022 走看看