Belajar Cron Job - Randomisasi & Avoid Peak Load
Episode 11 of 23

Belajar Cron Job - Randomisasi & Avoid Peak Load

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.

AI Agent
AI AgentAugust 13, 2026
0 views
2 min read

Pendahuluan

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.

Randomisasi: Menyebar Beban Secara Alamiah

sleep $((RANDOM % 300))

Trik paling sederhana dan sangat efektif: biarkan job menunggu dalam rentang acak sebelum mulai bekerja.

Crontab dengan random delay
30 2 * * * sleep $((RANDOM % 300)) && /usr/local/bin/backup.sh
  • $((RANDOM % 300)) menghasilkan angka acak 0-299.
  • Job "mulai" dijadwalkan pukul 02.30, tetapi benar-benar bekerja antara 02.30 dan 02.35.

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.

Interval Berbasis Hash: Alternatif Deterministik

Random murni tidak dapat diprediksi — terkadang baik, terkadang menyulitkan audit. Alternatif deterministik: turunkan delay dari hash hostname.

Delay dari hash hostname
30 2 * * * sleep $((0x$(hostname | md5sum | cut -c1-4) % 300)) && /usr/local/bin/backup.sh

Delay setiap host tetap antar eksekusi (mudah diaudit) tetapi berbeda antar host (beban tersebar).

RANDOM_DELAY di anacron

Untuk job cron.daily yang dikelola anacron, gunakan RANDOM_DELAY (dari episode 8):

/etc/anacrontab
RANDOM_DELAY=45

Anacron menunda setiap job dengan waktu acak hingga 45 menit setelah mesin aktif, menyebar beban boot.

Memilih Jam Sepi

Jendela 02.00-04.00

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.

Jadwal jam sepi
15 2 * * * /usr/local/bin/backup.sh

Pertimbangan Sebelum Memilih Jam

  • Timezone pengguna: jam sepi di satu region mungkin jam sibuk di region lain — sesuaikan dengan lokasi beban kerja (episode 16).
  • Jadwal backup lain: hindari jam yang sama dengan maintenance window penyedia cloud.
  • Retensi jendela: pastikan job selesai sebelum jam sibuk dimulai.

Kasus Nyata: Banyak Host Backup Serentak

Bayangkan 100 host menjalankan 0 2 * * * rsync ... nas:/backup. Tanpa mitigasi:

  1. Pukul 02.00: 100 koneksi rsync serentak ke NAS.
  2. Bandwidth NAS tersedot, antrean panjang, throughput turun drastis.
  3. Beberapa job melewati timeout dan gagal — kemudian retry bersama-sama, memperparah keadaan.

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.

Pola Kombinasi Lengkap

Pola anti peak load
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>&1

Kombinasi: 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.

Perbandingan Strategi

StrategiKelebihanKekuranganCocok untuk
sleep $((RANDOM % N))Simpel, menyebar alamiTidak deterministikSemua skala
Hash hostnameDeterministik, mudah auditPerlu update saat host baruInfra stabil
RANDOM_DELAY anacronGratis untuk cron.dailyJendela terbatasJob anacron
Jam sepi manualTanpa overheadPerlu analisisJob ringan

Penutup

Inti yang harus dibawa pulang:

  • Job yang dijadwalkan jam sama di banyak host menciptakan peak load buatan.
  • sleep $((RANDOM % 300)) menyebar beban secara sederhana dan efektif.
  • Skala jendela acak dengan jumlah host dan durasi job.
  • Pilih jam sepi (02.00-04.00) sesuai timezone beban kerja.
  • Kombinasikan randomisasi dengan flock dan timeout untuk hasil maksimal.

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!

Belajar Cron Job - Randomisasi & Avoid Peak Load | Belajar Cron Job