hi, everyone.

Before I mentioned the communication serialization scheme, I conducted JMH Test 
on protobuf, kryo and protostuff.
This is the result
@WarmUp(iterations = 10, time = 2)
@measurement(iterations = 10, time = 2)
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
@State(Scope.Benchmark)


Benchmark Mode Cnt Score Error  Units
SerializerBenchMark.Kryo thrpt          20 171204.238 ± 27941.211 ops/s
SerializerBenchMark.ProtoBuf thrpt   20 180551.996 ± 6657.504 ops/s
SerializerBenchMark.ProtoStuff thrpt  20 221247.510 ± 3620.933 ops/s


大家可以下载我分支的代码来进行测试:
https://github.com/CalvinKirs/incubator-dolphinscheduler/tree/jmh_ser/dolphinscheduler-microbench


Note: Kryo (I turned on the function of class registration)


When the data volume is too small, the efficiency of ProtoStuff is 3-5 times 
that of Kryo. When the data volume is too large, ProtoStuff still performs well 
enough.


I prefer ProtoStuff, the serialization scheme is basically becoming mature, so 
the community release will be slower. (ProtoStuff released three versions in 
2020, so I think there is no problem with community activity.) At the same 
time, it is extremely efficient, easy to use, and performs very well in 
serialization speed and serialized volume.


ProtoBuf is very good in cross-language, but we may not need cross-language 
support later. At the same time, because of the need to write proto files, I 
think this has a certain learning cost for new developers. Therefore it is not 
recommended.


What do you think? I want to hear suggestions from the community.


Best  wishes!
CalvinKirs

Reply via email to