- Apache Fory Rust adalah framework serialisasi lintas bahasa yang menghadirkan performa serialisasi ultra-cepat dan manajemen referensi otomatis
- Berbasis teknologi zero-copy dan type safety Rust, dengan penanganan otomatis untuk referensi siklik, objek trait, dan evolusi skema
- Mendukung pertukaran data antar berbagai bahasa seperti Rust, Python, Java, dan Go tanpa file IDL atau code generation
- Hasil benchmark menunjukkan kecepatan pemrosesan lebih dari 10–20x dibanding JSON dan Protobuf
- Sangat bernilai untuk lingkungan berperforma tinggi seperti microservices, pipeline data, dan sistem real-time
Dilema serialisasi dan kemunculan Apache Fory Rust
- Metode serialisasi lama memiliki keterbatasan karena harus mengorbankan salah satu dari kecepatan, fleksibilitas, atau kompatibilitas bahasa
- Format biner buatan tangan cepat, tetapi rapuh terhadap perubahan skema
- JSON/Protobuf fleksibel, tetapi memiliki overhead performa lebih dari 10x
- Solusi lama juga kurang mendukung fitur khas tiap bahasa
- Apache Fory Rust menghadirkan performa dan fleksibilitas sekaligus, tanpa perlu IDL atau pengelolaan skema manual
Fitur utama
-
1. Dukungan lintas bahasa yang sesungguhnya
- Protokol biner yang sama digunakan bersama di Java, Python, C++, Go, dan lainnya
- Data yang diserialisasi di Rust bisa langsung dideserialisasi di Python
- Tanpa file skema, code generation, atau masalah ketidakcocokan versi, sehingga pertukaran data antar microservice multibahasa menjadi lebih sederhana
-
2. Penanganan otomatis referensi siklik dan referensi bersama
- Struktur referensi siklik yang biasanya gagal ditangani banyak framework dapat dilacak dan dipertahankan secara otomatis
- Walaupun objek yang sama direferensikan berkali-kali, ia hanya diserialisasi sekali, sehingga identitas referensinya tetap terjaga
- Cocok untuk database graf, ORM, dan model domain yang kompleks
-
3. Serialisasi objek trait
- Mendukung serialisasi objek trait Rust seperti
Box
- Tipe polimorfik dapat didaftarkan dengan makro
register_trait_type!
- Mendukung berbagai bentuk seperti
Box, Rc, Arc, dyn Any
- Memungkinkan implementasi sistem plugin, koleksi heterogen, dan arsitektur yang dapat diperluas
-
4. Evolusi skema (mode kompatibel)
- Mode Compatible memungkinkan perubahan skema antar versi layanan
- Penambahan, penghapusan, perubahan urutan field, serta konversi tipe opsional dimungkinkan
- Perubahan tipe tidak diperbolehkan
- Berguna untuk deployment tanpa downtime dan evolusi microservice yang independen
Fondasi teknis
-
Desain protokol
- Struktur:
| fory header | reference meta | type meta | value data |
- Menerapkan bilangan bulat panjang variabel, metadata terkompresi, pelacakan referensi, dan layout little-endian
- Performa ditingkatkan melalui deduplikasi objek bersama dan kompresi metadata tipe
-
Code generation saat compile time
- Code generation berbasis makro alih-alih refleksi menghilangkan overhead runtime
- Makro
#[derive(ForyObject)] secara otomatis menghasilkan fungsi serialisasi dan deserialisasi
- Memberikan type safety, ukuran biner minimum, dan dukungan autocomplete IDE
-
Komposisi arsitektur
fory/: API tingkat tinggi
fory-core/: mesin serialisasi (buffer I/O, registrasi tipe, kompresi metadata, dll.)
fory-derive/: definisi procedural macro
- Struktur yang termodularisasi meningkatkan kemudahan perawatan dan ekstensibilitas
Hasil benchmark
- Kecepatan pemrosesan lebih dari 10–20x dibanding JSON dan Protobuf
- Contoh:
simple_struct(small) → Fory 35,729,598 TPS / JSON 10,167,045 / Protobuf 8,633,342
person(medium) → Fory 3,839,656 TPS / JSON 337,610 / Protobuf 369,031
- Di semua test case, Fory mencatat performa terbaik
Skenario penggunaan
-
Kasus penggunaan yang cocok
- Microservice multibahasa: pertukaran data tanpa file skema
- Pipeline data berperforma tinggi: memproses jutaan record per detik
- Model domain kompleks: mendukung referensi siklik dan struktur polimorfik
- Sistem real-time: latensi di bawah 1 ms, deserialisasi zero-copy
-
Pertimbangan alternatif
- Jika memerlukan format yang mudah dibaca manusia → JSON/YAML
- Jika memerlukan format penyimpanan jangka panjang → Parquet
- Untuk struktur data sederhana → serde + bincode
Memulai
-
Instalasi
-
Contoh serialisasi dasar
- Daftarkan struct dengan
#[derive(ForyObject)], lalu gunakan serialize() / deserialize()
- Menjaga konsistensi data melalui registrasi type ID
-
Serialisasi lintas bahasa
- Aktifkan mode kompatibilitas multibahasa dengan pengaturan
compatible(true).xlang(true)
- Mendukung registrasi berbasis ID atau nama (
register_by_namespace, register_by_name)
Tipe yang didukung
- Tipe dasar: bool, integer, floating point, String
- Koleksi: Vec, HashMap, BTreeMap, HashSet, Option
- Smart pointer: Box, Rc, Arc, RcWeak, ArcWeak, RefCell, Mutex
- Tanggal/waktu: tipe
chrono
- Objek buatan pengguna: ForyObject, ForyRow
- Objek trait: Box/Rc/Arc, Rc/Arc
Roadmap
-
Tersedia di v0.13
- Code generation statis, format Row zero-copy, pelacakan referensi siklik, serialisasi objek trait, mode kompatibilitas skema
-
Fitur yang direncanakan
- Serialisasi referensi lintas bahasa, pembaruan Row parsial
Pertimbangan produksi
- Thread safety: setelah registrasi selesai, dapat dibagikan dengan
Arc (Send + Sync)
- Penanganan error: berbasis
Result, dengan pemisahan jelas untuk kesalahan seperti ketidakcocokan tipe dan buffer yang kurang
Dokumentasi dan komunitas
Kesimpulan
- Apache Fory Rust adalah framework serialisasi generasi berikutnya yang menghapus kompromi antara performa, fleksibilitas, dan kompatibilitas bahasa
- Otomatisasi berbasis makro, dukungan objek trait, dan penanganan referensi siklik memaksimalkan efisiensi pengembangan
- Dapat langsung dimanfaatkan pada microservices, pipeline data, dan sistem real-time
Belum ada komentar.