Iggy.rs - Membangun message streaming dengan Rust
(blog.iggy.rs)Asal mula
- Pada April 2023, diputuskan untuk mempelajari Rust.
- Berdasarkan pengalaman dalam sistem terdistribusi dan messaging, diputuskan untuk mengembangkan platform message streaming.
- Tujuannya adalah memahami cara kerja internal sistem messaging dan trade-off yang dihadapi para developer.
- Lahirnya Iggy.rs, dengan penetapan tujuan sebagai platform message streaming yang menekankan kecepatan dan bobot ringan.
Proyek
- Iggy versi awal menggunakan protokol QUIC untuk menyediakan fungsi dasar pertukaran pesan.
- Melalui prototyping dan perbaikan berkelanjutan, dibangun server yang mendukung penulisan/pembacaan paralel serta stream yang independen.
- Dukungan untuk protokol TCP dan HTTP ditambahkan, dan performa ditingkatkan melalui optimasi mekanisme sinkronisasi data.
- Melalui benchmarking, terkonfirmasi throughput tinggi dan latensi rendah, lalu proyek ini diubah menjadi proyek jangka panjang.
Tim
- Iggy dikerjakan oleh tim beranggotakan sekitar 10 orang yang berkontribusi di berbagai bagian.
- Mereka terlibat dalam beragam proyek seperti core server, SDK, web UI, dan CLI.
- Developer dengan latar pengalaman yang beragam berpartisipasi secara sukarela karena berbagi semangat terhadap pemrograman.
- Partisipasi para kontributor eksternal dari seluruh dunia meningkatkan keyakinan terhadap proyek ini.
Fitur
- Server message streaming berbasis log yang berperforma tinggi dan berkelanjutan.
- Throughput tinggi, latensi rendah, serta penggunaan resource yang dapat diprediksi berkat bahasa terkompilasi Rust.
- Dukungan untuk banyak stream, topic, partisi, dan berbagai protokol transport.
- RESTful API, client SDK untuk berbagai bahasa, serta kemampuan bekerja langsung dengan data biner.
- Fitur server dapat dikonfigurasi, offset konsumen disimpan di server, dan mendukung berbagai metode polling pesan.
- Consumer group untuk urutan pesan dan skalabilitas horizontal, serta fitur kedaluwarsa pesan dan deduplikasi.
- Dukungan TLS untuk semua protokol transport, enkripsi data opsional, dan dukungan message header.
- CLI bawaan dan aplikasi benchmarking untuk mengelola server streaming, dengan deployment sebagai binary tunggal.
Roadmap
- Setelah muncul di halaman trending GitHub, mulai ada diskusi dengan pengguna mengenai penambahan fitur.
- Menargetkan peningkatan performa dan keandalan melalui clustering, low-level I/O, dan arsitektur thread per core.
- Bereksperimen dengan mekanisme konsensus Raft, meningkatkan pekerjaan I/O melalui io_uring, dan berencana menggunakan runtime monoio.
Masa depan
- Menargetkan platform message streaming serbaguna serta menantang batasan OS dan hardware.
- Berencana mendukung berbagai bahasa pemrograman, CLI, dan web UI melalui platform terintegrasi yang mudah digunakan.
- Menargetkan perkembangan melalui feedback dan ide dari komunitas.
GN⁺ berpendapat
- Iggy.rs adalah platform message streaming berbasis Rust yang menargetkan performa tinggi dan latensi rendah.
- Sebagai proyek open source, proyek ini terus berkembang melalui partisipasi dan kontribusi sukarela dari developer di seluruh dunia.
- Target ambisiusnya untuk melampaui batas performa sistem terdistribusi melalui teknologi inovatif seperti clustering, optimasi low-level I/O, dan arsitektur thread per core sangat menarik, serta menjadikannya proyek yang sangat bermanfaat bagi orang-orang yang tertarik pada bidang ini.
1 komentar
Komentar Hacker News
Meski masing-masing punya alasan berbeda, rasanya ideal melihat orang-orang bekerja bersama menuju tujuan yang sama, dan kompensasi finansial bukan satu-satunya tujuan
Semoga proyek ini sukses, dan kalau ada perbandingan dengan alternatif lain, sepertinya akan lebih mudah memahami posisi proyek ini
Penulisnya terasa rendah hati, jujur, dan seperti pemimpin proyek yang konstruktif
Semua memutuskan ikut dalam upaya ini dengan niat untuk juga menikmatinya
QUIC menyediakan multi-streaming berguna yang mirip SCTP sehingga bagus sebagai titik awal, sudah ada banyak library bagus yang bisa dimanfaatkan, dan kemungkinan akan makin baik serta makin optimal ke depannya: https://github.com/xileteam/awesome-quic?tab=readme-ov-file#...
Ini adalah area alami di mana memakai protokol transport yang sedikit lebih baik dari yang sudah ada saja bisa memberi keuntungan besar, jadi saya menantikan QUIC dalam 10 tahun ke depan
Namun protokol TCP yang saat ini diimplementasikan sedikit lebih cepat daripada QUIC, mungkin karena tuning tambahannya masih kurang
Selain itu, QUIC di MacOS lebih lambat dibandingkan Linux
https://docs.nats.io/nats-concepts/jetstream
Apakah ini lebih dekat ke message queue seperti RabbitMQ?
https://www.fluvio.io/
Fluvio adalah produk nyata dan ada perusahaan di belakangnya, jadi lebih matang, tetapi kami punya ide sendiri untuk menjadikan Iggy solusi streaming pesan yang kompetitif
https://github.com/thibauts/styx
Saya penasaran kenapa pengerjaannya tidak dilanjutkan lagi
Selain itu, saya suka estetika situsnya
Ini adalah tim kecil yang selama beberapa dekade punya hubungan panjang dengan aplikasi data-sentris di berbagai domain, dan mereka bertaruh pada streaming data berbasis Rust dan WebAssembly alih-alih Java dan JVM
Pada Juni 2021, CTO menulis visi Fluvio di sini: https://news.ycombinator.com/item?id=38880743
Karena pertanyaan perbandingan terus muncul, saya juga bisa membagikan materi yang ada di pihak Fluvio. Dokumentasinya panjang, tetapi saya bisa membagikan yang kami punya saat ini. Iggy juga benar-benar hasil kerja yang bagus
Namun sebelum mencobanya, sepertinya saya perlu memahami dua hal: bagaimana menjalankan lebih dari satu instance server, dan saat menjalankan lebih dari satu, bagaimana interaksi filesystem antar-servernya
Kalau cluster sudah didukung, sepertinya bisa bersaing dengan Kafka
Setahu saya itu membutuhkan compiler nightly, dan menurut saya bukan pilihan bagus untuk memelihara proyek
Sisanya juga sebagian besar bukan fitur yang terlalu ekstrem. Saya belum melihat kodenya secara mendalam, tetapi semuanya masuk akal. Misalnya, salah satunya adalah API standard library untuk membuat container yang belum diinisialisasi sehingga bisa menghilangkan penyalinan
Saya belum membandingkan glommio, yang berjalan di stable, dengan monoio, tetapi sepertinya menarik
Jadi kami memilih pendekatan bleeding edge. Bagaimanapun, implementasi io_uring dan optimasi lain masih akan memakan waktu beberapa bulan lagi, dan kemungkinan kami akan menulis ulang sebagian bagian inti sambil berpindah ke struktur thread per core