Seratus server yang menjalankan backup pada jam yang sama adalah resep overload. Episode ini mengajarkan randomisasi dengan sleep $((RANDOM % 300)), pemilihan jam sepi 02.00-04.00, dan strategi menyebarkan beban agar jadwal massal tidak melumpuhkan infrastruktur.

Di episode 10 kita sudah menjadwalkan backup. Sekarang pertimbangkan skenario yang lebih besar: kalian mengelola seratus server, dan semuanya menjalankan backup 0 2 * * *. Pada pukul 02.00, seratus proses backup serentak menghantam server tujuan — bandwidth tersedot, storage overload, dan jadwal yang "benar" justru menciptakan masalah baru.
Ini masalah peak load yang harus dipikirkan sejak awal. Penyebabnya bukan jadwalnya salah — melainkan sinkronisasi alami ketika semua orang memilih jam yang "wajar". Episode ini membahas cara menyebarkan beban.
Trik paling sederhana dan sangat efektif: biarkan job menunggu dalam rentang acak sebelum mulai bekerja.
30 2 * * * sleep $((RANDOM % 300)) && /usr/local/bin/backup.sh$((RANDOM % 300)) menghasilkan angka acak 0-299.Dengan seratus server, jendela 5 menit itu menyebar seratus backup ke rentang waktu yang lebih lebar — puncak beban jauh lebih landai.
Tip
Besar jendela acak (% 300) harus sebanding dengan jumlah host dan durasi job. Semakin banyak host dan semakin lama job, semakin lebar jendelanya. Untuk 500 host, % 1800 (30 menit) lebih masuk akal daripada 5 menit.
Random murni tidak dapat diprediksi — terkadang baik, terkadang menyulitkan audit. Alternatif deterministik: turunkan delay dari hash hostname.
30 2 * * * sleep $((0x$(hostname | md5sum | cut -c1-4) % 300)) && /usr/local/bin/backup.shDelay setiap host tetap antar eksekusi (mudah diaudit) tetapi berbeda antar host (beban tersebar).
Untuk job cron.daily yang dikelola anacron, gunakan RANDOM_DELAY (dari episode 8):
RANDOM_DELAY=45Anacron menunda setiap job dengan waktu acak hingga 45 menit setelah mesin aktif, menyebar beban boot.
Kebutuhan backup yang berat idealnya dijalankan di jam sepi — umumnya 02.00-04.00 waktu lokal, saat trafik pengguna minimum dan kompetisi sumber daya rendah.
15 2 * * * /usr/local/bin/backup.shBayangkan 100 host menjalankan 0 2 * * * rsync ... nas:/backup. Tanpa mitigasi:
Dengan random delay, kurva beban berubah dari lonjakan tajam menjadi lereng landai — semua job selesai di rentang yang lebih panjang, tidak ada yang gagal karena kompetisi sumber daya.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
30 2 * * * sleep $((RANDOM % 300)) && flock -n /var/lock/backup.lock timeout 50m /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Kombinasi: random delay (sebar beban) + flock (anti tumpang tindih) + timeout (anti hang) + log (jejak).
Warning
Randomisasi dan lock harus bekerja bersama. Tanpa flock, dua job yang kebetulan dapat delay hampir sama akan tetap berjalan bersamaan. Tanpa randomisasi, flock justru membuat banyak host saling menunggu dalam satu menit yang sama — antrean yang tak kalah buruknya.
| Strategi | Kelebihan | Kekurangan | Cocok untuk |
|---|---|---|---|
sleep $((RANDOM % N)) | Simpel, menyebar alami | Tidak deterministik | Semua skala |
| Hash hostname | Deterministik, mudah audit | Perlu update saat host baru | Infra stabil |
RANDOM_DELAY anacron | Gratis untuk cron.daily | Jendela terbatas | Job anacron |
| Jam sepi manual | Tanpa overhead | Perlu analisis | Job ringan |
Inti yang harus dibawa pulang:
sleep $((RANDOM % 300)) menyebar beban secara sederhana dan efektif.Di episode 12 selanjutnya kita akan membahas notifikasi dan alerting — MAILTO, kirim pesan ke Slack/Telegram via curl, integrasi monitoring Zabbix/Prometheus, dan pola on-failure alert yang hanya mengganggu saat benar-benar ada yang salah!