C轮融资|Fury:一个基于JIT动态编译的高性能多语言原生序列化框架(11)


f9 = new short[fbsBar.f9Length()
; for (int i = 0; ifbsBar.f9Length(); i++) { f9[i
= fbsBar.f9(i);bar.f9 = f9;{ ListLongf10 = new ArrayList(); for (int i = 0; ifbsBar.f10Length(); i++) { f10.add(fbsBar.f10(i));bar.f10 = f10;return bar;public static Foo deserializeFoo(FBSFoo fbsFoo) { Foo foo = new Foo(); foo.f1 = fbsFoo.string(); HashMapString Integermap = new HashMap(); foo.f2 = map; for (int i = 0; ifbsFoo.f2KeyLength(); i++) { map.put(fbsFoo.f2Key(i) fbsFoo.f2Value(i));return foo; Python序列化代码:大概200~250行
GoLang序列化代码:大概200~250行
将Flatbuffer生成类型包装到其它符合面向对象设计的类里面:由于Flatbuffer序列化过程需要保存大量中间offset , 且需要先把所有可变长度对象写入buffer , 因此通过wrapper修改flatbuffer数据会比较复杂 , 使得包装Flatbuffer生成类型只适合反序列化读数据过程 , 导致添加wrapper也变得很困难 。对比Msgpack
Msgpack Java和Python并不支持自定义类型序列化 , 需要用户增加扩展类型手动进行序列化 , 因此这里省略 。
总结 Fury最早是我在2019年开发 , 当时是为了支持分布式计算框架Ray[14
的跨语言序列化以及蚂蚁在线学习场景样本流的跨语言传输问题 。 经过蚂蚁丰富业务场景的打磨 , 目前已经在蚂蚁在线学习、运筹优化、Serving等多个计算场景稳定运行多年 。
总体来看Fury主要优势主要是:
跨语言原生序列化 , 大幅提高了跨语言序列化的易用性 , 降低研发成本; 通过JIT技术来优化序列化性能 。 这里也可以看到通过把数据库和大数据领域的代码生成思想用在序列化上面是一个很好的思路 , 可以取得非常显著的性能提升; Zero-Copy序列化 , 避免所有不必要的内存拷贝; 多语言行存支持避免序列化和元数据开销; 未来我们会在协议、框架和生态三个方面继续优化:
协议层面 JIT代码生成支持数据压缩模式 进一步通过SIMD向量化指令进行大规模数据压缩 框架层面 更多Java序列化代码JIT化; 完善C++支持 , 通过使用Macro、模板和编译时反射在编译时注册捕获Fury需要的类型信息 , 实现自动C++序列化; 通过Golang-ASM支持基于JIT的Golang序列化实现; 通过将更多Python代码Cython化来进一步加速Python序列化; 支持JavaScript , 打通NodeJS生态; 支持Rust; 生态层面 与RPC框架SOFA、Dubbo、Akka等集成 与分布式计算框架Spark和Flink等集成 多语言的支持与生态建设是一项复杂的工作 , 接下来我们会尽快开源Fury , 吸引感兴趣的同学一起参与进来 。 如果有开源使用场景或者合作意向 , 欢迎通过邮箱chaokun.yck@antgroup.com 交流 。
参考链接:
[1
https://github.com/EsotericSoftware/kryo
[2
https://spark.apache.org/docs/latest/index.html
[3
https://flink.apache.org/
[4
https://databricks.com/blog/2015/04/28/project-tungsten-bringing-spark-closer-to-bare-metal.html
[5
https://arrow.apache.org/
[6
https://developers.google.com/protocol-buffers/docs/javatutorial#parsing-and-serialization
[7
https://peps.python.org/pep-0574
[8
https://github.com/EsotericSoftware/kryo/tree/master/benchmarks
[9
https://openjdk.org/projects/code-tools/jmh/
[10
https://developers.google.com/protocol-buffers/docs/downloads
[11
https://www.xolstice.org/protobuf-maven-plugin/usage.html
[12
https://developers.google.com/protocol-buffers/docs/javatutorial#parsing-and-serialization
[13
https://github.com/google/flatbuffers/releases
[14
https://github.com/ray-project/ray
作者 | 杨朝坤(慕白)
【C轮融资|Fury:一个基于JIT动态编译的高性能多语言原生序列化框架】本文为阿里云原创内容 , 未经允许不得转载 。