Kenapa gua nulis reliakit
Tiap kali bikin service, masalahnya selalu sama: rate limiting, timeout, retry, circuit breaker, validasi input, nyimpen secret biar gak kebocor di log. Hal-hal "boring" yang justru paling sering bikin production meledak.
Gua capek nyalin-tempel utility yang sama dari project ke project, atau narik framework gede cuma buat satu fungsi kecil. Jadi gua bikin reliakit.
Filosofinya
reliakit itu building block reliability โ kecil, bisa dikombinasiin, dan
sebisa mungkin no_std + zero-dependency. Bukan framework yang maksa lo ngikutin
caranya; lo ambil yang lo butuh aja.
Tiap kemampuan dipecah jadi crate sendiri:
ratelimitโ token-bucket rate limiter.circuitโ circuit breaker: pas dependency lo down, fail-fast, bukan numpuk request.backoffโ retry dengan backoff (exponential/linear/constant) + jitter.timeoutโ deadline yang clock-agnostic.primitivesโ tipe tervalidasi:Email,HttpUrl,NonEmptyStr,Port, dll.secretโ bungkus nilai sensitif biar gak ke-print di log/error.
...dan beberapa lagi (validate, collections, json, codec, core,
decide). Total 16 crate, semua bisa dipakai sendiri-sendiri.
Gua pake di situs ini
Bukan cuma teori โ blog yang lo baca ini dijaga reliakit:
- Form newsletter & kontak di-rate-limit pake
ratelimitbiar gak dispam bot. - Pengiriman email dijaga
circuitbreaker โ kalau provider-nya down, gak nge-hang. - API key disimpen di
secret, jadi gak mungkin kebocor di log. - Email divalidasi pake
primitives::Email.
Lo bahkan bisa nyoba rate limiter-nya langsung di browser (jalan via WASM) di playground halaman Proyek.
Contoh
use RateLimiter;
// 5 token, isi ulang 1 tiap 2 detik
let mut limiter = new;
if limiter.try_acquire_one else
Sekecil itu. Gak ada background thread, gak baca clock sendiri โ lo yang kasih waktunya, jadi gampang dites & deterministik.
Penutup
reliakit masih awal (v0.1), tapi udah gua pake beneran. Kalau lo Rust dev yang capek nyalin utility reliability yang sama terus, cobain aja. Feedback & issue gua tunggu di GitHub.