Hamizulfaiz

Tech Entrepreneur / System Builder

Order Masuk Serentak Tanpa Data Rosak: Cara Aku Handle Concurrency di eServe

Published:

Updated:

Laravel bisnes eServe

Handling High-Concurrency Orders in Laravel Without Data Corruption

(Apa yang aku buat dalam eServe)

Masalah concurrency biasanya muncul bila sistem dah mula digunakan betul-betul.

Order masuk serentak.
Merchant on off product.
Payment status update realtime.

Kalau backend tak kemas →
order boleh masuk untuk product yang sepatutnya tak boleh dibeli.

Aku jumpa semua ni masa bina eServe — sistem pure online product ordering yang sengaja tak guna stock, cuma guna konsep availability untuk simplify flow.


Kenapa eServe Tak Guna Stock

Aku tak implement stock atas sebab design, bukan sebab malas.

Dalam eServe:

  • product sama ada available atau not available

  • merchant boleh toggle bila-bila masa

  • tak ada kira-kira kuantiti

 

Result:

  • logic lebih ringkas

  • kurang edge case

  • kurang concurrency bug

Tapi… concurrency masih wujud.


Masalah Sebenar: Availability & Race Condition

Scenario real:

  • Merchant toggle product ke not available

  • Pada masa sama, beberapa customer tengah checkout

  • Multiple request cuba create order serentak

Kalau logic biasa:

if ($product->is_available)
{
    // create order 
}

Ini tetap race condition.


Rule Utama Aku di eServe: Availability Disahkan Dalam Transaction

Semua order creation aku bungkus dalam transaction:

DB::transaction(function () {
    // lock product row
    // recheck availability
    // create order
    // create order items 
});

Maknanya:

  • status availability dibaca dalam lock

  • keputusan konsisten untuk semua request


1. Lock Product Row (Walaupun Tak Ada Stock)

$product = Product::where('id', $id)
    ->lockForUpdate()
    ->first();

Kenapa penting?

Sebab availability boleh berubah masa order tengah diproses.

Dengan lock:

  • request lain tunggu

  • tak ada order “terlepas masuk” lepas product ditutup


2. Availability Check Bukan UI Check

Aku tak percaya frontend untuk benda ni.

Button boleh disable, tapi request tetap boleh sampai.

Check sebenar:

if (! $product->is_available) 
{
    throw new Exception('Product not available');
}

Check ni berlaku dalam transaction, bukan sebelum.


3. Order Creation Kekal Atomic

Walaupun simple:

  • order

  • order items

  • initial payment status

Semua berlaku dalam satu transaction.

Kalau apa-apa fail → rollback.

No zombie order.


4. Payment Validation Kena Idempotent

Payment gateway dan manual action boleh trigger lebih dari sekali.

Dalam eServe:

  • merchant boleh klik PAID (yang payment cash)

  • callback payment boleh datang semula

Logic ringkas:

if ($order->is_paid)
{
    return; 
}

Simple, tapi selamat.


5. Realtime Guna Websocket, Logic Tetap Sync

eServe guna Websocket untuk:

  • merchant klik PAID → customer nampak popup realtime

  • merchant dapat sound alert bila ada order baru

  • order list update live

Important rule aku:

Realtime event tak pernah ubah data.

Semua update:

  1. validate

  2. save dalam DB

  3. commit

  4. baru broadcast


Apa Aku Belajar Dari eServe

  1. Takde stock ≠ buang concurrency

  2. Availability pun boleh jadi race condition

  3. Transaction + row lock masih wajib

  4. Realtime UI tak bermakna kalau backend bocor


Penutup

Kalau sistem kau:

  • ada online ordering

  • ada toggle availability

  • ada payment

  • ada realtime update

Concurrency tetap masalah utama, walaupun logic nampak simple.

eServe stabil bukan sebab features sikit.
Ia stabil sebab aku design untuk keadaan paling buruk.

 

Nak buat sistem?

Jom bincang untuk develop sistem yang custom untuk anda.

nak buat sistem bisnes? hubungi saya

Post Berkaitan

07 Apr 2026 Perbandingan eServe vs onPay
Perbandingan eServe vs onPay

Banding eServe vs OnPay dari sudut keuntungan, operasi dan growth. Ketahui platform mana paling sesuai untuk seller sebenar.

22 Jun 2018 Proses Membina Sistem: Bukan Sekadar Coding, Tapi Membina Cara Kerja
Proses Membina Sistem: Bukan Sekadar Coding, Tapi Membina Cara Kerja

Membina sistem bukan sekadar coding. Fahami proses mapping kerja, design database, hingga sistem stabil dan scalable untuk bisnes.

09 Mar 2026 Komunikasi Level Dewa: Macam mana nak terangkan pasal “Technical Debt” dekat bos yang bukan budak IT?
Komunikasi Level Dewa: Macam mana nak terangkan pasal “Technical Debt” dekat bos yang bukan budak IT?

Teknik komunikasi level dewa: Guna bahasa risiko dan duit untuk explain kenapa code perlu diperbaiki tanpa cerita pasal teknikal.

08 Mar 2026 eServe: Sistem Order Online Simple Untuk Mula Jual Hari Ini
eServe: Sistem Order Online Simple Untuk Mula Jual Hari Ini

eServe ialah sistem order online simple tanpa login pelanggan dan tanpa % fee transaksi. Setup cepat, GPS delivery, statistik jualan, hanya RM50 sebulan.

23 Feb 2026 Sistem Order Tanpa Login: Cara Naikkan Conversion Tanpa Serabutkan Customer
Sistem Order Tanpa Login: Cara Naikkan Conversion Tanpa Serabutkan Customer

Cara naikkan jualan tanpa paksa customer daftar akaun. Strategi eServe untuk struktur order yang mudah dan mesra pengguna.

06 Feb 2026 Elak Code Berselerak: Gunakan Laravel Pint Sebelum Commit
Elak Code Berselerak: Gunakan Laravel Pint Sebelum Commit

Pastikan codebase konsisten! Gunakan Laravel Pint dengan pre-commit hook untuk standardisasi code sebelum deploy.

05 Feb 2026 Automasi Workflow Bisnes Dengan Laravel Events & Queues
Automasi Workflow Bisnes Dengan Laravel Events & Queues

Automate bisnes anda dengan Laravel Events & Queues. Hantar email, proses komisen, dan urus workflow tanpa stress.

07 Sep 2026 Sistem Bisnes Tak Pernah Betul-Betul Siap
Sistem Bisnes Tak Pernah Betul-Betul Siap

Kenapa sistem yang dah siap masih perlukan perubahan? Tentang realiti software, perubahan bisnes dan kenapa V1 bukan versi terakhir.

31 Aug 2026 Jangan Terus Bina Sistem. Faham Dulu Flow Yang Nak Diselesaikan
Jangan Terus Bina Sistem. Faham Dulu Flow Yang Nak Diselesaikan

Ramai terus bina sistem bila bisnes bermasalah. Tapi sebelum automate, faham dulu flow, bottleneck dan punca sebenar masalah.

HAMIZULFAIZ