Fury快速多语言序列化框架

联合创作 · 2023-09-20 00:53

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 对象图协议:基于语言的类型系统进行高度优化。
  • 行格式协议:一种缓存友好的二进制随机访问格式,支持跳过序列化和部分序列化,并且可以自动转换为列格式。

可以基于现有的缓冲区、编码、元、代码生成和其他功能轻松添加新协议。所有这些都共享相同的代码库,并且一种协议的优化可以由另一种协议重用。

浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报