9 poin oleh GN⁺ 2025-11-01 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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

    • Tambahkan ke Cargo.toml:
      [dependencies]  
      fory = "0.13"  
      
  • 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.

Belum ada komentar.