Ruang Lingkup Masalah & Kebutuhan
Platform quick-commerce menuntut jaminan pengiriman belanja harian dalam 10 menit dari Micro Fulfillment Centers (MFC) terdekat.
Kebutuhan Fungsional
- Katalog real-time dan ketersediaan stok per geofence wilayah (radius 2.5 km).
- Reservasi stok atomik selama jendela checkout 7 menit tanpa terjadi double-selling item langka.
- Penugasan kurir terdekat menggunakan batching dinamis dan estimasi waktu tiba (ETA).
Target Non-Fungsional
- Availability: 99.99% untuk alur pencarian dan pembayaran.
- Latensi: Sub-80ms p95 untuk pencarian katalog; sub-150ms untuk reservasi keranjang.
- Puncak Throughput: 45.000 pesanan per menit saat promo kilat bahan segar.
Arsitektur Sistem Skala Tinggi
architecture/dispatch-topology.txt
[Aplikasi Klien / Web]
โ
โผ
[Global Edge CDN / Cloudflare]
โ
โผ
[API Gateway & Rate Limiter]
โโโโโโโดโโโโโโโโโโโโโโโโโโโ
โผ โผ
[Layanan Katalog] [Layanan Reservasi & Pesanan]
โ (Read-heavy) โ (Write-heavy / ACID)
โผ โผ
[Redis Geo + Elastic] [Redis Redlock + CockroachDB / PG]
โ
โผ
[Kafka Event Stream]
โ
โโโโโโโโดโโโโโโโ
โผ โผ
[Alokasi Kurir] [WMS MFC Picker]Strategi Penguncian Inventaris (Inventory Locking)
Untuk menghindari bottleneck locking tabel database saat menghadapi puluhan ribu request bersamaan, kami menerapkan reservasi token terdistribusi dua tahap di Redis:
- Pre-decrement di Redis: Jalankan Lua script yang memeriksa stok aktif dan mengurangi secara atomik jika
stok >= jumlah_diminta. - TTL Expire Key: Simpan token reservasi dengan batas waktu 420 detik (
SET res:{order_id}:{item_id} qty EX 420). - Commit Saat Pembayaran Sukses: Worker asinkron menangkap webhook pembayaran dan memperbarui stok permanen di PostgreSQL secara bertahap.
- Rollback Otomatis Saat Timeout: Kunci yang kedaluwarsa memicu event keyspace untuk mengembalikan stok ke pool aktif.
Catatan rekayasa pribadi dari pengoperasian sistem produksi. Pola dan tolok ukur diperbarui seiring perkembangan runtime.