概述


Apache Fory™ 是一个由 JIT 编译、零拷贝 技术和 高级代码生成 驱动的超高性能多语言序列化框架,可实现高达 170 倍性能提升,同时保持简洁易用。
核心特性
🚀 高性能序列化
Apache Fory™ 通过先进的优化技术提供卓越性能:
- JIT 编译:Java 运行时代码生成消除虚方法调用并内联热路径
- 静态代码生成:Rust、C++ 和 Go 的编译时代码生成,无运行时开销即可达到峰值性能
- 零拷贝操作:无需中间缓冲区复制的直接内存访问;行格式支持随机访问和部分序列化
- 智能编码:整数和字符串的变长压缩;数组的 SIMD 加速(Java 16+)
- 元数据共享:类元数据打包减少跨 序列化的冗余类型信息
🔄 跨语言序列化
xlang 序列化格式 支持跨编程语言的无缝数据交换:
- 自动类型映射:语言特定类型之间的智能转换(类型映射)
- 引用保持:共享和循环引用在跨语言时正确工作
- 多态支持:对象以其实际运行时类型进行序列化/反序列化
- Schema 演进:可选的向前/向后兼容性支持 Schema 演进
- 自动序列化:无需 IDL 或 Schema 定义;直接序列化任何对象,无需代码生成
📊 行格式
针对分析工作负载优化的缓存友好型 行格式:
- 零拷贝随机访问:无需反序列化整个对象即可读取单个字段
- 部分操作:选择性字段序列化和反序列化以提高效率
- Apache Arrow 集成:无缝转换为列格式以用于分析流水线
- 多语言支持:可用于 Java、Python、Rust 和 C++
🔒 安全性与生产就绪
企业级安全性和兼容性:
- 类注册:基于白名单的反序列化控制(默认启用)
- 深度限制:防止递归对象图攻击
- 可配置策略:自定义类检查器和反序列化策略
- 平台支持:Java 8-24、GraalVM 原生镜像、多操作系统平台
协议
Apache Fory™ 实现了针对不同场景优化的多个二进制协议:
| 协议 | 使用场景 | 核心特性 |
|---|---|---|
| 跨语言序列化 | 跨语言对象交换 | 自动序列化、引用、多态 |
| Java 序列化 | 高性能 Java 专用 | JDK 序列化的直接替代,快 100 倍 |
| 行格式 | 分析和数据处理 | 零拷贝随机访问、Arrow 兼容 |
| Python 原生 | Python 专用序列化 | Pickle/cloudpickle 替代,性能更好 |
所有协议共享相同的优化代码库,一个协议的改进可以惠及其他协议。
文档
用户指南
| 指南 | 描述 | 源文件 | 网站 |
|---|---|---|---|
| Java 序列化 | Java 序列化综合指南 | java_serialization_guide.md | 📖 查看 |
| 跨语言序列化 | 多语言对象交换 | xlang_serialization_guide.md | 📖 查看 |
| 行格式 | 零拷贝随机访问格式 | row_format_guide.md | 📖 查看 |
| Python | Python 特定功能和用法 | python_guide.md | 📖 查看 |
| Rust | Rust 实现和模式 | rust_guide.md | 📖 查看 |
| Scala | Scala 集成和最佳实践 | scala_guide.md | 📖 查看 |
| GraalVM | 原生镜像支持和 AOT 编译 | graalvm_guide.md | 📖 查看 |
| 开发 | 构建和贡献 Fory | DEVELOPMENT.md | 📖 查看 |
协议规范
| 规范 | 描述 | 源文件 | 网站 |
|---|---|---|---|
| 跨语言序列化 | 跨语言二进制协议 | xlang_serialization_spec.md | 📖 查看 |
| Java 序列化 | Java 优化协议 | java_serialization_spec.md | 📖 查看 |
| 行格式 | 基于行的二进制格式 | row_format_spec.md | 📖 查看 |
| 类型映射 | 跨语言类型转换 | xlang_type_mapping.md | 📖 查看 |
兼容性
Schema 兼容性
Apache Fory™ 支持 Java、Python、Rust 和 Golang 的类 Schema 向前/向后兼容,支持生产系统中的无缝 Schema 演进,无需跨所有服务协调升级。Fory 提供两种 Schema 兼容性模式:
-
Schema 一致模式(默认):假设序列化和反序列化端之间的类 Schema 相同。此模式提供最小的序列化开销、最小的数据大小和最快的性能:适用于稳定的 Schema 或受控环境。
-
兼容模式:支持独立的 Schema 演进,具有向前和向后兼容性。此模式支持字段添加/删除、有限的类型演进和优雅处理 Schema 不匹配。在 Java 中使用
withCompatibleMode(CompatibleMode.COMPATIBLE)启用,在 Python 中使用compatible=True,在 Rust 中使用compatible_mode(true),在 Go 中使用NewFory(true)。
二进制兼容性
当前状态:由于协议持续演进,Fory 主要版本之间不保证二进制兼容性。但是,次要版本之间(例如 0.13.x)保证兼容性。
建议:
- 按 Fory 主要版本对序列化数据进行版本控制
- 升级主要版本时规划迁移策略
- 详见升级指南
未来