Fury: A High‑Performance Multi‑Language Serialization Framework and Its Path to the Apache Incubator
Fury is a JIT‑compiled, zero‑copy, multi‑language serialization framework that delivers up to 170× speed improvements over traditional serializers, supports Java, Python, C++, Go, JavaScript, Scala and Rust, and has recently been donated to the Apache Software Foundation after a successful open‑source journey.
Fury, originally created by Ant Group in 2019, is a JIT‑driven, zero‑copy serialization library supporting Java, Python, C++, Go, JavaScript, Scala, and Rust. It provides up to 170× performance gains compared to conventional frameworks and offers full JDK serialization compatibility, record‑type optimizations, and GraalVM native‑image support.
The project progressed from an internal tool to an open‑source effort in July 2022, gaining rapid community adoption, over 2.3K GitHub stars, ten releases, and contributions from 29 developers. In December 2023 it was accepted into the Apache Incubator, ensuring long‑term community governance.
Fury’s ecosystem includes integrations with major big‑data and streaming systems such as Apache Ray, Ant Mars, Flink, LakeSoul, and Alibaba Lindorm, delivering significant throughput and latency improvements (e.g., 2× faster Flink POJOSerializer, 30 ms P99 latency reduction for recommendation workloads).
Key technical features include:
Dynamic code generation for JIT‑compiled serializers
Zero‑copy buffer handling and out‑of‑band serialization to eliminate intermediate copies
Support for JDK 17 records, GraalVM native images, and cross‑language protocols
High‑performance implementations for Go (reference tracking, cyclic graphs) and Scala (full language support)
Example Java usage:
import org.apache.fury.Fury;
import org.apache.fury.util.Preconditions;
import java.util.List;
import java.util.Map;
public class Example {
public record Record(int f1, String f2, List
f3, Map
f4) {}
static Fury fury;
static {
fury = Fury.builder().build();
fury.register(Record.class, true);
}
public static void main(String[] args) {
Record record = new Record(10, "abc", List.of("str1", "str2"), Map.of("k1", 10L, "k2", 20L));
byte[] bytes = fury.serialize(record);
Object o = fury.deserialize(bytes);
Preconditions.checkArgument(record.equals(o));
}
}Fury also provides a row‑based, zero‑copy protocol that allows direct reads of selected fields without full deserialization, further reducing GC pressure and improving latency for large object graphs.
The project acknowledges its community contributors and mentors, highlighting the collaborative effort that enabled Fury’s rapid evolution and its successful graduation to the Apache ecosystem.
AntTech
Technology is the core driver of Ant's future creation.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.