Back to IF3110 Pengembangan Aplikasi Berbasis Web

Topic: Studi Kasus: Analisis Kapasitas & Beban "Lumpy"

Questions/Cues

  • Skenario Awal (E-commerce)

  • Analisis Naif (Rata-rata)

  • Analisis Konservatif (50% Rule)

  • Konsep “Lumpy Workload”

  • Masalah Locking DB

  • Solusi Dua Kondisi (State)

  • Perhitungan Budget per Task

Reference Points

  • Slides: IF3110-12-Performance_Engineering (Pages 19-31)

1. Skenario Kasus (The Requirements)

Kita diminta merancang kapasitas sistem monitoring transaksi e-commerce dengan spesifikasi:

  • Beban Utama: 60.000 transaksi/jam (Peak Hour).

  • Alur Proses per Transaksi:

    1. Validasi Transaksi.

    2. Update Statistik (di memori).

    3. Cari Pengecualian/Exceptions.

  • Beban Tambahan (The “Lumps”):

    • Display Update: 5 layar monitoring harus update setiap 10 detik.

    • DB Backup: Data di memori disimpan ke SQL Server setiap 10 menit.

2. Analisis Naif (Jebakan Rata-rata)

Cara hitung yang salah tapi umum dilakukan pemula:

  • Matematika:

    60.000 \text{ trans/jam} = 1.000 \text{ trans/menit} = 16,7 \text{ trans/detik}.$$$$1 \text{ detik} / 16,7 \approx 60 \text{ ms per transaksi (waktu tersedia)}.

  • Asumsi Salah: “Kita punya 3 fungsi (Validasi, Stats, Exception), jadi bagi rata saja.”

  • Mengapa Salah? Ini mengabaikan Display Update dan DB Backup. Jika CPU sibuk 100% untuk transaksi, siapa yang mengerjakan update layar dan database? Sistem pasti crash saat tugas tambahan itu berjalan.

3. Analisis Realistis (Alokasi Budget)

Kita harus “menyisihkan” jatah CPU untuk tugas tambahan.

  • Strategi: Anggap ada 5 tugas besar (3 fungsi transaksi + 1 Display + 1 DB).

  • Perhitungan Baru:

    Sisa waktu dialokasikan untuk Display dan DB (masing-masing dapat porsi setara 20% kapasitas CPU).

4. Analisis Konservatif (Safety Margin)

Slide menyarankan untuk lebih aman lagi dengan hanya menggunakan 50% kapasitas CPU (agar sistem tidak overheat saat beban naik sedikit).

  • Efek: Semua budget dipotong setengah.

  • Penyesuaian Kompleksitas:

    Diketahui kode “Validasi” ternyata lebih ringan (setengah kompleksitas) dibanding “Update Stats” dan “Exception”.

    • Total Budget Transaksi = .

    • Rumus: .

    • .

    • Hasil Akhir: Validasi (), Stats (), Exception ().

5. Menangani “Lumpy” Workload (Database Lock)

Masalah terbesar muncul di tugas “Simpan ke DB setiap 10 menit”.

  • Masalah: Proses ini butuh waktu 5 detik dan bersifat Synchronized (mengunci tabel). Artinya, selama 5 detik ini, fungsi “Update Stats” tidak bisa jalan (karena tabel/memori dikunci).

  • Solusi: Jangan hitung rata-rata! Pecah analisis menjadi dua kondisi/state:

Kondisi A: Saat DB Backup Berjalan (Durasi 5 detik)

  • Budget CPU untuk DB: Full (Prioritas Utama).
  • Budget untuk Transaksi: 0 ms (Sistem “berhenti” sebentar).
  • Konsekuensi: Transaksi yang masuk selama 5 detik ini harus ditampung di Buffer (Antrean), tidak boleh ditolak.

Kondisi B: Saat Normal (Durasi 9 menit 55 detik)

  • Budget Transaksi: Kembali ke / .
  • Budget DB: Sisa alokasi waktu digunakan untuk tugas DB non-locking lainnya.

6. Kesimpulan Perancangan

Dengan analisis ini, kita menemukan dua kebutuhan arsitektur yang tidak terlihat di awal:

  1. Kita butuh algoritma kode yang sangat efisien (hanya untuk validasi).

  2. Kita butuh mekanisme Buffering/Queueing yang kuat untuk menampung transaksi yang tertahan selama 5 detik setiap 10 menit. Tanpa buffer, data akan hilang.

Summary

Studi kasus ini mendemonstrasikan bahwa menghitung kapasitas rata-rata adalah resep kegagalan. Analisis performa yang benar harus memperhitungkan (1) Overhead tugas background, (2) Safety margin (misal 50% idle), (3) Variasi kompleksitas kode, dan (4) Perilaku “Lumpy” di mana sistem mungkin berhenti merespons sesaat (blocking). Solusinya seringkali melibatkan komputasi budget CPU yang ketat dan penambahan mekanisme antrean (buffer).