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动态编译的高性能多语言原生序列化框架】本文为阿里云原创内容 , 未经允许不得转载 。
- 百度|“萝卜快跑”无人车出车祸 后轮被撞掉!官方回应:后车追尾
- 作为国内高新技术企业、两轮绿色能源网络布局的先行者|易马达重磅推出新国标智能换电车
- 百度|百度“萝卜快跑”无人车出车祸 后轮被撞掉
- 天使轮|36氪独家 | 天使轮红杉、云九、StarVC、高瓴同投,「光线云」再获前海基金Pre-A轮投资,全球首款云原生实时渲染引擎
- 3D打印|成立1年完成3轮融资,这家中国食品3D打印公司,为什么这么吃香?
- 阿斯麦尔|风水轮流转!ASML就我国发声,外媒:可以用EUV光刻机换
- 童文红|李楠这下放心了?怒喵科技获千万融资:投资方为联想创投
- 折叠屏|新一轮名单出炉,华为Harmony OS 3.0尝鲜版,新增17款设备可搭载
- 百度|派学车融资、YY学车倒闭,互联网驾培旱涝两重天
- 本文转自:人民网-湖南频道滑移装载机后轮悬空。|湖南长沙:聚焦工程机械 擦亮“智造之城”名片