Files
accounting_dev_v2/docs/TAHAP-16-SCALABILITY.md
2026-09-11 16:03:00 +07:00

3.5 KiB

Tahap 16 — Skalabilitas database dan performa

Implementasi

  • Migration 20260902000100 menambahkan indeks query transaksi, database session, dashboard summary, queue, dead-letter, dan metrik database.
  • Migration 20260902000200 menyediakan shared application cache.
  • Migration 20260902000300 menyediakan arsip activity log.
  • Session default menggunakan driver database (ci_sessions). Production dapat mengatur SESSION_DRIVER=database; Redis dapat dipilih setelah extension dan server Redis tersedia.
  • Dashboard summary di-cache 5 menit per company. Chart dapat dikembangkan dengan pola cache yang sama bila volume jurnal sudah besar.
  • Endpoint lookups/search/{customer|item|account|employee|supplier} memakai pencarian dan pagination maksimal 30 baris.
  • Form penerimaan pelanggan telah berhenti memuat seluruh customer dan menggunakan AJAX lookup.
  • Queue memiliki claim transaction/row lock, idempotency key, exponential retry, batas percobaan, dan dead-letter.
  • Handler tersedia untuk report PDF/Excel/CSV, email/reminder, penyusutan, dan payroll calculation.
  • Retention worker memindahkan activity log lama ke activity_logs_archive dalam batch, lalu membersihkan cache, session, dan completed job lama.
  • DB monitor menyimpan latency koneksi/query, threads, slow query counter, dan ukuran database.

Perintah operasional

Jalankan dari folder aplikasi melalui Task Scheduler/cron:

php index.php queueworker run reports 20
php index.php queueworker run default 20
php index.php maintenanceworker retention 365 5000
php index.php dbmonitor run
php index.php scalabilitycheck index 20
php index.php stage16check

Saran jadwal: queue setiap menit, DB monitor setiap 5 menit, retention setiap malam, scalability check pada CI/staging.

Baseline development 2 September 2026

  • Database: 6.19 MB.
  • Journal: 123 header / 388 detail.
  • Activity log: 654.
  • Latency koneksi: 16.926 ms.
  • Latency query health check: 10.053 ms.
  • Dashboard summary p95: 11.046 ms.
  • Open receivables p95: 22.089 ms.
  • General ledger berada jauh di bawah target 2 detik.
  • Queue integration: idempotent dan berhasil menghasilkan file background.

Volume development masih kecil. Angka ini baseline fungsi, bukan bukti kapasitas production.

Audit lanjutan untuk staging

  • 29 view memakai DataTables; 13 sudah serverSide:true. Tabel master/transaksi yang tumbuh tanpa batas harus dimigrasikan bertahap ke server-side. Tabel referensi kecil boleh tetap client-side dengan hard limit.
  • Jalankan load test menggunakan salinan data yang sudah dianonimkan: minimal 100 ribu jurnal, 50 ribu invoice, 25 ribu item/barcode, dan 1 juta stock/activity ledger.
  • Uji 25, 50, lalu 100 virtual user untuk dashboard, pencarian, daftar transaksi, posting invoice, pembayaran, dan transfer stok.
  • Gunakan akun serta session khusus staging; jangan melakukan load test transaksi pada production.
  • Acceptance: daftar p95 <2 detik, dashboard p95 <3 detik, error <1%, tidak ada duplikasi nomor/stok/job.

Catatan production

  • Backup dan jalankan migration sampai 20260902000300.
  • Perubahan file-session ke database-session akan meminta user login kembali saat deploy.
  • Jalankan worker hanya satu instance dahulu; tambah worker setelah memastikan locking MariaDB bekerja pada versi production.
  • Konfigurasikan SMTP sebelum mengaktifkan job email/reminder.
  • Pantau pertumbuhan app_dead_letters; setiap dead-letter harus mempunyai tindak lanjut dan mekanisme replay terkontrol.
  • Aktifkan slow query log pada database production dan review query di atas ambang 500 ms.