Sam Newman menekankan Timeouts, Retries, dan Idempotency sebagai tiga konsep inti yang wajib dipahami dalam sistem terdistribusi.
Ia mengatakan bahwa menangani konsep-konsep dasar ini dengan tepat lebih penting terlebih dahulu daripada algoritma terdistribusi yang rumit seperti Paxos atau Raft.
Tiga asumsi dasar sistem terdistribusi
- Informasi tidak dikirimkan secara instan.
- Sistem lawan bisa saja tidak merespons.
- Resource itu terbatas.
Ketiga hal ini adalah penyebab mendasar yang menciptakan seluruh kompleksitas dalam sistem terdistribusi.
Timeouts
Jika sebuah request tidak selesai dalam waktu tertentu, request itu harus dihentikan.
Jika resource dikuasai terlalu lama, hal ini dapat menyebabkan overload sistem dan ketidaknyamanan bagi pengguna.
Newman menjelaskan bahwa “timeout berarti memprioritaskan kesehatan keseluruhan sistem daripada keberhasilan satu request.”
Poin penting
- Pahami waktu eksekusi rata-rata dan ekspektasi pengguna
- Nilai konfigurasi harus bisa diubah secara fleksibel tanpa perlu memodifikasi kode
Retries
Retry yang berlebihan bisa menjadi serangan DoS yang melukai diri sendiri terhadap sistem.
Retry memang diperlukan, tetapi pembatasan di sisi klien dan server serta network jitter harus dipertimbangkan bersama.
Newman memperingatkan bahwa menambahkan jitter itu baik, tetapi exponential backoff justru bisa membebani sistem.
Idempotency
Mengirim request beberapa kali harus tetap menghasilkan hasil yang sama.
Ini terutama merupakan tanggung jawab sisi server, dan merupakan prasyarat agar retry aman.
Skenario nyata
- Jika request tidak sampai ke server: tidak terjadi apa-apa
- Jika server sudah memproses tetapi respons terputus: perubahan sudah terjadi tetapi klien tidak mengetahuinya → idempotency diperlukan
Cara implementasi
- Menggunakan request ID: memberi identifier agar klien dapat menunjukkan bahwa itu adalah request berulang
- Metode fingerprint: menentukan duplikasi berdasarkan hash dari body request dan sejenisnya (informasi waktu sebaiknya dihindari)
Kesimpulan
Tulisan ini dimulai dengan mengutip ungkapan, “mengulangi tindakan yang sama sambil mengharapkan hasil yang berbeda adalah kegilaan,”
tetapi Newman mengatakan bahwa dalam sistem terdistribusi, retry justru bisa menjadi hal yang rasional.
Namun, ia menekankan bahwa retry harus selalu dilakukan dengan aman, dan untuk itu timeout serta idempotency harus dirancang bersama.
1 komentar
Circuit breaker~