dubbo序列化以及各种序列化性能对比

dubbo RPC是dubbo体系中最核心的一种高性能、高吞吐量的远程调用方式

dubbo RPC主要用于两个dubbo系统之间作远程调用,特别适合高并发、小数据的互联网场景

而序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也起着至关重要的作用

  • 专门针对Java语言的:Kryo,FST等等
  • 这些序列化方式的性能多数都显著优于hessian2(甚至包括尚未成熟的dubbo序列化)。

    有鉴于此,我们为dubbo引入Kryo和FST这两种高效Java序列化实现,来逐步取代hessian2。

  • 在面向生产环境的应用中,我建议目前更优先选择Kryo。

  • 启用Kryo和FST

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

    注册被序列化类

    要让Kryo和FST完全发挥出高性能,最好将那些需要被序列化的类注册到dubbo系统中,例如,我们可以实现如下回调接口:

    public class SerializationOptimizerImpl implements SerializationOptimizer {
    
        public Collection getSerializableClasses() {
            List classes = new LinkedList();
            classes.add(BidRequest.class);
            classes.add(BidResponse.class);
            classes.add(Device.class);
            classes.add(Geo.class);
            classes.add(Impression.class);
            classes.add(SeatBid.class);
            return classes;
        }
    }

    然后在XML配置中添加:

    在注册这些类后,序列化的性能可能被大大提升,特别针对小数量的嵌套对象的时候。

  • 当然,在对一个类做序列化的时候,可能还级联引用到很多类,比如Java集合类。针对这种情况,我们已经自动将JDK中的常用类进行了注册,所以你不需要重复注册它们(当然你重复注册了也没有任何影响),包括:

  • GregorianCalendar
    InvocationHandler
    BigDecimal
    BigInteger
    Pattern
    BitSet
    URI
    UUID
    HashMap
    ArrayList
    LinkedList
    HashSet
    TreeSet
    Hashtable
    Date
    Calendar
    ConcurrentHashMap
    SimpleDateFormat
    Vector
    BitSet
    StringBuffer
    StringBuilder
    Object
    Object[]
    String[]
    byte[]
    char[]
    int[]
    float[]
    double[]
    

     

Dubbo RPC中不同序列化生成字节大小比较

序列化生成字节码的大小是一个比较有确定性的指标,它决定了远程调用的网络传输时间和带宽占用。

针对复杂对象的结果如下(数值越小越好):

序列化实现 请求字节数 响应字节数
Kryo 272 90
FST 288 96
Dubbo Serialization 430 186
Hessian 546 329
FastJson 461 218
Json 657 409
Java Serialization 963 630

no image found

Dubbo RPC中不同序列化响应时间和吞吐量对比

远程调用方式 平均响应时间 平均TPS(每秒事务数)
REST: Jetty + JSON 7.806 1280
REST: Jetty + JSON + GZIP TODO TODO
REST: Jetty + XML TODO TODO
REST: Jetty + XML + GZIP TODO TODO
REST: Tomcat + JSON 2.082 4796
REST: Netty + JSON 2.182 4576
Dubbo: FST 1.211 8244
Dubbo: kyro 1.182 8444
Dubbo: dubbo serialization 1.43 6982
Dubbo: hessian2 1.49 6701
Dubbo: fastjson 1.572 6352

no image found

no image found

你可能感兴趣的:(dubbo)