Apache Fory 1.7.7 介绍与选型指南
基于官方渠道实查(2026-10-18)的 Apache Fory 1.7.7 认知篇:定位、xlang/IDL/row format 核心概念、功能特性与 Kryo/Protobuf 等选型对比。
Apache Fory 1.7.7 介绍与选型指南
目标:基于官方文档与官方发布渠道(查询日期 2026-10-18),介绍 Apache Fory 1.7.7 的定位、核心概念、功能特性与同类选型建议。本文为认知篇,全部论断溯源至官方来源,不做本地安装实测。
一、信息基准
- 查询日期:2026-10-18(Asia/Shanghai)。
- 本次介绍的版本:Apache Fory 1.7.7。
1.1 版本依据
| 项目 | 结论 | 依据来源 | 查询日期 |
|---|---|---|---|
| 最新稳定版 | 1.7.7(tag v1.7.7) | GitHub Releases releases/latest 返回 v1.7.7,发布时间 2026-10-12(https://github.com/apache/fory/releases/latest) | 2026-10-18 |
| 官网版本佐证 | 官网首页 Quick Start 的 Maven 依赖示例即写明 1.7.7 | https://fory.apache.org/ | 2026-10-18 |
| 项目身份 | Apache 顶级项目(TLP),官方品牌标识为「Apache Fory™」 | https://fory.apache.org/、ASF 公告(2025-09-17,https://news.apache.org/foundation/entry/the-apache-software-foundation-announces-new-top-level-project-2) | 2026-10-18 |
1.2 官方来源清单
- 官网:https://fory.apache.org/
- 官方仓库:https://github.com/apache/fory
- Releases 页:https://github.com/apache/fory/releases
- 官方文档:https://fory.apache.org/docs/introduction/ 、入门指南 https://fory.apache.org/docs/start/
- 性能基准页:https://fory.apache.org/docs/benchmarks/
- 更名公告(Fury → Fory):https://fory.apache.org/blog/fury_renamed_to_fory/(2025-06-06)
- 毕业为顶级项目公告:ASF Blog(2025-09-17)
💡 说明:Fory 项目孵化期名称为 Apache Fury(2023-12-15 进入 Apache 孵化器),2025-06-06 官方宣布更名为 Fory,2025-09-17 由 ASF 宣布毕业成为顶级项目。网络资料中 Fury/Fory 两个名字并存,检索时需注意。
二、软件概述
Apache Fory 1.7.7 是一个高性能、多语言的序列化框架,官方定位为「面向惯用领域对象、Schema IDL 与跨语言数据交换的极速序列化框架」(官网首页原话:A blazingly-fast multi-language serialization framework for idiomatic domain objects, Schema IDL, and cross-language data exchange)。它以 Java 库/多语言库形态集成进应用进程,没有独立服务进程,采用 Apache License 2.0 开源(GitHub 仓库 license 字段实查为 Apache-2.0)。
Fory 的核心价值在于把「同进程内对象图的高性能序列化」与「跨语言传输的二进制协议」统一到一个框架里:既支持把既有 Java 类、Python dataclass、Go/Rust/C++ 结构体等直接序列化(对象模式),也提供 xlang 跨语言线格式与参考跟踪(引用/循环引用)能力,还提供 Fory IDL 用于生成多语言类型代码。官方仓库数据(2026-10-18 实查):约 4.6k stars、463 forks,仓库最近推送时间 2026-10-16,社区处于高频活跃状态。
版本节奏方面,1.7.x 系列以小步快跑的补丁版本演进(1.7.7 于 2026-10-12 发布),从 0.5.0 至毕业时的 0.11.2 共完成 14 次 ASF 合规发布(毕业公告数据),整体发布密度较高,适合跟随升级。
三、核心概念
3.1 xlang:跨语言统一线格式
xlang 是 Fory 的跨语言二进制编码规范:在一种语言中序列化的类型化载荷,可以在另一种支持 xlang 的运行时中反序列化。它定义了统一的基础类型系统与编码规则,是「服务 A(Java)与服务 B(Python)直接交换同一个类型化对象」这类需求的基础。官方文档:https://fory.apache.org/docs/object-serialization/xlang/
3.2 native 模式:单语言内对象图保真
对象不跨语言时,可使用各语言的 native 模式(如 Java 原生模式),保留更完整的运行时对象模型语义(对象图、引用共享等),换取更高吞吐与更小的开销。官方在「数据边界」章节给出的选型原则是:语言边界用 xlang,运行时边界用 native 模式。来源:https://fory.apache.org/docs/start/
3.3 Fory IDL:参考感知的 Schema 定义
Fory IDL 用于把共享数据契约沉淀为显式的 schema 文件,再生成各语言原生代码。除常规 message 字段外,它支持字段 ID、可选字段、union 类型,以及 ref 引用字段——即在 IDL 层面表达对象共享与循环引用(官方示例 Node 中 ref Node parent、list<ref Node> children),这是普通 IDL(如 Protobuf)通常不具备的能力。官方文档:https://fory.apache.org/docs/compiler/
3.4 引用跟踪与 schema 演进
- 引用跟踪(ref tracking):同一对象被多处引用时只序列化一次,并支持循环引用,保真还原对象图。
- schema 演进:字段增删后兼容读写,配合 IDL 的 optional 字段与字段 ID 实现契约演进。
3.5 JIT 序列化器与静态代码生成
Fory 在 Java/JavaScript 侧使用 JIT 编译生成序列化器,在 Rust/C++/Swift 侧通过宏、C# 通过 Source Generator、Kotlin 通过 KSP、Dart 通过 build_runner 在编译期生成静态序列化代码,避免运行期反射开销。来源:https://fory.apache.org/docs/object-serialization/java/ 与官网首页「Optimized runtimes」。
3.6 row format:行格式随机访问
对分析类读取场景,Fory 提供 row format:无需反序列化整个对象即可读取字段、数组与嵌套值,并可与 Arrow 集成,适合「只读部分字段」的批处理/分析路径。来源:https://fory.apache.org/docs/row-format/
四、功能特性
- 多语言支持广:Java、Python、C++、Go、Rust、JavaScript/TypeScript、C#、Swift、Dart、Scala、Kotlin、Android 均有官方支持路径(官网首页「Broad platform support」,2026-10-18 实查)。
- 三种载荷面:对象序列化(xlang/native)、IDL 代码生成、row format 随机读取,按数据边界选择。
- 高性能设计:JIT/静态生成序列化器 + 紧凑二进制编码 + 零拷贝能力(仓库 topics 含
zero-copy),官方提供基准图表页(https://fory.apache.org/docs/benchmarks/)。 - 类型注册机制:
fory.register(Person.class, "Person")注册类型后参与序列化,这一显式注册机制同时服务于跨语言类型映射与安全性(避免反序列化任意类)。 - 既有对象模型零侵入:可直接序列化既有领域对象(record/POJO/dataclass/struct 等),无需改造为 IDL 生成类。
五、快速上手
以下示例引自官方首页 Quick Start(https://fory.apache.org/ ,2026-10-18 实查),未做本地实测。
引入 Maven 依赖:
<dependency>
<groupId>org.apache.fory</groupId>
<artifactId>fory-core</artifactId>
<version>1.7.7</version>
</dependency>
序列化/反序列化一个 Java record:
import org.apache.fory.Fory;
public record Person(String name, int age) {}
Fory fory = Fory.builder()
.withXlang(true)
.build();
fory.register(Person.class, "Person");
byte[] bytes = fory.serialize(new Person("Alice", 30));
Person out = (Person) fory.deserialize(bytes);
官方同页还给出 Python、Rust、Go、C++、JavaScript、C#、Swift、Dart、Scala、Kotlin 的等价示例(页内语言页签切换),以及 Fory IDL 的 message/union/ref 定义示例(model.fdl),可直接在官网复用。
六、适用场景与限制
6.1 适用场景
- RPC/内部服务间高吞吐对象传输:同语言走 native 模式保对象图语义,跨语言走 xlang。
- 缓存与对象快照:把领域对象高效落缓存或做进程内快照复制(Kryo 的传统场景,Fory 为其现代替代)。
- 大数据/计算引擎内部数据交换:row format 支持部分读取,适合 shuffle、批处理算子间传输与分析负载(官网「Read boundary」场景)。
- 需要统一序列化层的多语言技术栈:一套框架覆盖 12 种语言运行时。
6.2 限制与注意
- 类型注册与契约管理:跨语言场景需注册类型或维护 IDL,类型/字段的演进需遵循兼容规则;比 JSON 等文本格式少了「裸用」的随意性。
- 二进制不可读:排查问题需借助工具或切 JSON 调试通道。
- 生态位差异:Fory 不解决「谁调用谁」的问题,它只做数据面编码;网关对外 API、浏览器交互仍应使用 JSON/Protobuf 等通用格式(官网「Adoption path」建议按边界选择载荷面)。
- 语言能力不均衡:各语言运行时的成熟度与特性覆盖存在差异(如 JIT 序列化器仅部分语言提供),选型前应按目标语言跑通并跑基准(官网建议「Benchmark the rollout path」)。
七、同类选型对比
对比口径说明:社区活跃度为 GitHub 仓库 stars(2026-10-18 经 GitHub API 实查),最近发版为各官方发布渠道实查结果。
| 维度 | Apache Fory 1.7.7 | Kryo 5.7.1 | Protobuf v32.0 | JDK 内置序列化 |
|---|---|---|---|---|
| 许可 | Apache-2.0 | BSD-3-Clause | BSD-3-Clause(GitHub 仓库 license 实查) | 随 Java 发行版 |
| 定位 | 多语言序列化框架(对象+xlang+IDL+row format) | Java 二进制序列化/克隆库 | 跨语言 IDL-first 二进制协议 | Java 平台内置 |
| 语言覆盖 | Java/Python/Go/Rust/C++/JS/C#/Swift/Dart/Kotlin 等 12 类运行时 | 仅 Java | 官方生成器覆盖主流语言 | 仅 Java |
| 社区活跃度 | 4,568 stars,pushed 2026-10-16(GitHub API 实查 2026-10-18) | 6,546 stars,pushed 2026-10-15(GitHub API 实查 2026-10-18) | 72,114 stars,pushed 2026-10-18(GitHub API 实查 2026-10-18),超高活跃 | 不适用 |
| 最近发版 | v1.7.7(2026-10-12,GitHub Releases) | 5.7.1(Maven Central 实查) | v32.0(2025-08-14,GitHub Releases) | 随 JDK 版本 |
| 版本节奏 | 补丁版高频滚动(1.7.x) | 缓慢小步演进 | 版本号周期性推进(年度大版本) | 随 JDK 半年节奏 |
| 引用/循环引用 | 支持(引用跟踪) | 支持(引用机制) | 不支持(消息语义,需自行建模) | 支持(但不安全) |
| 跨语言线格式 | xlang + IDL | 无 | IDL 强契约 | 无 |
| 兼容矩阵 | Java 8+ 及多语言运行时(官网各语言指南) | Java | 多语言多平台 | 受限,跨 JDK 版本存在互操作风险 |
选型建议:纯 Java、追求极致吞吐且沿用既有对象图语义,Kryo 仍是稳妥选择;新多语言项目或需要 IDL 契约、引用共享与 schema 演进的,优先 Fory;对外部系统/跨组织的强契约接口选 Protobuf;新代码一律停用 JDK 内置序列化(历史安全与性能问题)。
八、参考链接
- 官网:https://fory.apache.org/
- 官方文档-介绍:https://fory.apache.org/docs/introduction/
- 官方文档-入门:https://fory.apache.org/docs/start/
- xlang 规范:https://fory.apache.org/docs/object-serialization/xlang/
- Java 序列化指南:https://fory.apache.org/docs/object-serialization/java/
- Fory IDL/编译器指南:https://fory.apache.org/docs/compiler/
- row format:https://fory.apache.org/docs/row-format/
- 官方基准:https://fory.apache.org/docs/benchmarks/
- GitHub 仓库:https://github.com/apache/fory
- Releases:https://github.com/apache/fory/releases
- 更名公告:https://fory.apache.org/blog/fury_renamed_to_fory/
- ASF 毕业公告:https://news.apache.org/foundation/entry/the-apache-software-foundation-announces-new-top-level-project-2