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

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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

文章图片

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


Fury是一个基于JIT动态编译的多语言原生序列化框架 , 支持Java/Python/Golang/C++等语言 , 提供全自动的对象多语言/跨语言序列化能力 , 以及相比于别的框架最高20~200倍的性能 。
引言 过去十多年大数据和分布式系统蓬勃发展 , 序列化是其频繁使用的技术 。 当对象需要跨进程、跨语言、跨节点传输、持久化、状态读写时 , 都需要进行序列化 , 其性能和易用性影响着系统的运行效率和开发效率 。
对于Java序列化 , 尽管Kryo[1
等框架提供了相比JDK序列化数倍的性能 , 对于高吞吐、低延迟、大规模数据传输场景 , 序列化仍然是整个系统的性能瓶颈 。 为了优化序列化的性能 , 分布式系统如Spark[2
、Flink[3
使用了专有行列存二进制格式如tungsten[4
和arrow[5
。 这些格式减少了序列化开销 , 但增加了系统的复杂性 , 牺牲了编程的灵活性 , 同时也只覆盖了SQL等关系代数计算专有场景 。 对于通用分布式编程和跨进程通信 , 序列化性能始终是一个绕不过去的关键问题 。
同时随着计算和应用场景的日益复杂化 , 系统已经从单一语言的编程范式发展到多语言融合编程 , 对象在语言之间传输的易用性影响着系统开发效率 , 进而影响业务的迭代效率 。 而已有的跨语言序列化框架protobuf/flatbuffer/msgpack等由于无法支持引用、不支持Zero-Copy、大量手写代码以及生成的类不符合面向对象设计[6
无法给类添加行为 , 导致在易用性、灵活性、动态性和性能上的不足 , 并不能满足通用跨语言编程需求 。
基于此 , 我们开发了Fury , 通过一套支持引用、类型嵌入的语言无关协议 , 以及JIT动态编译加速、缓存优化和Zero-Copy等技术 , 实现了任意对象像动态语言自动序列化一样跨语言自动序列化 , 消除了语言之间的编程边界 , 并提供相比于业界别的框架最高20~200倍的性能 。

Fury是什么 Fury是一个基于JIT的高性能多语言原生序列化框架 , 专注于提供极致的序列化性能和易用性:
支持主流编程语言如Java/Python/C++/Golang , 其它语言可轻易扩展; 多语言/跨语言自动序列化任意对象 , 无需创建IDL文件、手动编译schema生成代码以及将对象转换为中间格式; 多语言/跨语言自动序列化共享引用和循环引用 , 用户只需要关心对象 , 不需要关心数据重复或者递归错误; 基于JIT动态编译技术在运行时自动生成序列化代码优化性能 , 增加方法内联、代码缓存和死代码消除 , 减少虚方法调用/条件分支/Hash查找/元数据写入等 , 提供相比其它序列化框架20~200倍以上的性能; Zero-Copy序列化支持 , 支持Out of band序列化协议 , 支持堆外内存读写; 提供缓存友好的二进制随机访问行存格式 , 支持跳过序列化和部分序列化 , 并能和列存自动互转; 除了跨语言能力 , Fury还具备以下能力: