Fury快速多语言序列化框架
Fury 是一个由 jit(即时编译)和零拷贝驱动的快速多语言序列化框架,可提供高达 170 倍的性能和极致的易用性。
特性:
- 多种语言:Java/Python/C++/Golang/Javascript。
- 零拷贝:受 pickle5 和 off-heap read/write 启发的跨语言带外序列化。
- 高性能:高度可扩展的 JIT 框架,可在运行时以异步多线程方式生成序列化器代码以加速序列化,通过以下方式提供 20-170 倍的加速:
- 通过生成代码中的内联变量减少内存访问。
- 通过生成代码中的内联调用减少虚拟方法调用。
- 减少条件分支。
- 减少哈希查找。
- 多种二进制协议:对象图、行格式等。
除了跨语言序列化之外,Fury 还具有以下功能:
- 直接替换 JDK/Kryo/Hessian 等 Java 序列化框架,无需修改任何代码,但速度提高 100 倍。它可以极大地提高高性能RPC调用、数据传输和对象持久化的效率。
- JDK 序列化 100% 兼容,原生支持 Java 自定义序列化
writeObject/readObject/writeReplace/readResolve/readObjectNoData
。 - 支持 golang 的共享和循环引用对象序列化。
- 支持 golang 自动对象序列化。
协议
不同的场景有不同的序列化要求。Fury 为这些要求设计并实现了多个二进制协议:
- 跨语言对象图协议:
- 跨语言自动序列化任何对象,无需 IDL 定义、模式编译以及对象与协议之间的转换。
- 支持共享引用和循环引用,无重复数据或递归错误。
- 支持对象多态性。
- 原生 java/python 对象图协议:基于语言的类型系统进行高度优化。
- 行格式协议:一种缓存友好的二进制随机访问格式,支持跳过序列化和部分序列化,并且可以自动转换为列格式。
可以基于现有的缓冲区、编码、元、代码生成和其他功能轻松添加新协议。所有这些都共享相同的代码库,并且一种协议的优化可以由另一种协议重用。
评论