Apache Fory 1.7.7 介绍与选型指南

基于官方渠道实查(2026-10-18)的 Apache Fory 1.7.7 认知篇:定位、xlang/IDL/row format 核心概念、功能特性与 Kryo/Protobuf 等选型对比。

Apache ForyApache Fory2026/10/18

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.7https://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 官方来源清单

💡 说明: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.7Kryo 5.7.1Protobuf v32.0JDK 内置序列化
许可Apache-2.0BSD-3-ClauseBSD-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 内置序列化(历史安全与性能问题)。

八、参考链接