LAPAKTOTO

Mesin transaksi

Satu catatan saldo, tiga region, nol rekonsiliasi manual.

Ledger Engine menulis tiap mutasi ke write-ahead log, lalu menunggu dua dari tiga region mengakui entri itu sebelum mengembalikan konfirmasi. Kehilangan satu region tidak menunda transaksi dan tidak meninggalkan selisih untuk dicocokkan besok pagi.

Siklus hidup satu transaksi

Enam tahap, dan apa yang terjadi bila tiap tahap gagal.

01 · 4 ms

Terima — permintaan masuk lewat edge terdekat.

Terminal operator membuka koneksi mTLS di atas TLS 1.3. Edge memvalidasi sertifikat tenant, memberi identitas trace, dan menyalin kunci idempotensi klien sebelum meneruskan ke pemimpin partisi akun.

Bila gagal: permintaan ditolak di edge dan belum ada satu bit pun yang tertulis ke ledger. Operator boleh mengirim ulang dengan kunci idempotensi yang sama tanpa risiko duplikat.

02 · 6 ms

Validasi batas — saldo, plafon, dan daftar blokir.

Mesin memeriksa saldo tersedia, plafon per pemain, plafon harian per tenant, serta daftar blokir kepatuhan. Seluruh pemeriksaan berjalan pada salinan in-memory di region yang sama, tanpa perjalanan lintas region.

Bila gagal: transaksi ditolak dengan kode alasan spesifik, saldo tidak bergerak, dan penolakan tetap masuk audit trail append-only. Penolakan adalah peristiwa yang dicatat, bukan yang dibuang.

03–04 · 11 ms

Tulis WAL — entri durabel sebelum apa pun berubah.

Satu entri memuat delta, saldo sebelum dan sesudah, kunci idempotensi, serta nomor urut monoton per akun. Entri di-fsync ke write-ahead log lokal lebih dulu; saldo in-memory baru bergerak sesudahnya.

Bila gagal: proses yang mati sebelum fsync tidak meninggalkan entri sama sekali. Klien menerima batas waktu dan mengirim ulang; kunci idempotensi menahan duplikat pada percobaan kedua.

04 · lanjutan tahap 03

Kuorum region — dua dari tiga harus mengakui.

Entri direplikasi ke SG1, JK2, dan HK1. Konfirmasi terbit begitu dua region menuliskannya ke log durabel masing-masing. Region ketiga menyusul asinkron dan tidak menahan jalur panas.

Bila gagal: hilangnya satu region tidak mengubah apa pun, kuorum tetap terpenuhi dan perpindahan kepemimpinan selesai dalam 0,8 detik. Hilangnya dua region membuat mesin berhenti menulis dan masuk mode baca-saja, bukan menerima tulisan yang bisa lenyap.

05 · 9 ms

Konfirmasi — provider menutup hasil putaran.

Panggilan balik provider game membawa hasil putaran beserta seed dan nomor urutnya. Mesin memverifikasi seed terhadap katalog yang diaudit lab independen tiap 90 hari, lalu menandai entri sebagai final.

Bila gagal: panggilan balik yang melewati batas waktu memicu transaksi kompensasi dengan nomor urut sendiri. Entri asal tidak dihapus dan tidak diubah, sehingga jejak koreksi tetap dapat dibaca ulang.

06 · 3 ms

Siaran saldo — ke terminal dan ke aliran peristiwa.

Respons sinkron kembali ke terminal, sementara entri yang sama dipublikasikan ke aliran peristiwa yang dikonsumsi konsol operator, mesin risiko, dan gudang analitik. Urutan per akun dipertahankan.

Bila gagal: kegagalan siaran tidak membatalkan transaksi, karena entri sudah durabel di dua region. Terminal membaca ulang lewat endpoint saldo dan konsumen aliran mengejar dari offset terakhir yang diakui.

Jaminan teknis

Tiap jaminan punya mekanisme yang menegakkannya.

Jaminan Ledger Engine · realisasi 1 Sep 2025 – 31 Agu 2026
JaminanNilaiMekanisme yang menegakkannya
Durabilitas tulisKuorum 2/3 Entri di-fsync ke write-ahead log di minimal dua region sebelum konfirmasi dikirim ke klien.
RPO0 Tidak ada replikasi asinkron di jalur konfirmasi. Entri yang belum berkuorum belum pernah diakui ke klien.
RTO failover region0,8 s Pemilihan pemimpin partisi otomatis, target SLA ≤ 5 s. Tidak ada data yang dipindahkan, hanya kepemimpinan yang berganti.
Isolasi transaksiSerializable per akun Satu akun dipetakan ke satu pemimpin partisi; mutasinya diberi nomor urut monoton tanpa celah.
IdempotensiJendela 24 j Kunci klien dipasangkan dengan sidik jari isi permintaan; pengiriman ulang identik mengembalikan hasil asli.
Urutan pesan keluarFIFO per akun Aliran peristiwa dipartisi menurut kunci akun; konsumen memakai offset, bukan stempel waktu.
Latensi transaksi P9933 ms Target SLA ≤ 50 ms, diukur terminal operator sampai konfirmasi saldo pada beban 10 juta transaksi per hari.

Kemampuan operasional

Empat perilaku yang menentukan tenang tidaknya malam Anda.

IdempotensiKunci ganda · 24 j

Dua kunci, karena satu kunci menyembunyikan bug.

Mesin menyimpan kunci idempotensi klien bersama sidik jari isi permintaan: akun, delta, dan referensi putaran. Pengiriman ulang identik mengembalikan hasil asli tanpa mutasi baru.

Kunci sama dengan isi berbeda ditolak 409, bukan diam-diam ditimpa. Pola ini menangkap penggunaan ulang kunci di sisi klien sebelum berubah menjadi selisih saldo.

  • 409 pada konflik
  • Jendela 24 j
  • Terpisah per tenant
PemulihanReplay WAL · RPO 0

Node yang kembali menyusul dari offset, bukan dari nol.

Node yang jatuh membaca ulang write-ahead log dari offset terakhir yang diakui kuorum. Tanpa penyalinan status penuh, waktu susul tumbuh mengikuti lama pemadaman, bukan ukuran ledger.

Uji pemadaman terjadwal tiap kuartal mengukur waktu susul ini bersama failover 0,8 detik; hasilnya dikirim ke kontak teknis tenant bersama laporan SLA kuartalan, bukan diterbitkan publik. Yang publik adalah riwayat insiden nyata beserta durasi pemulihannya di halaman status.

  • Failover 0,8 s
  • Tanpa snapshot penuh
  • Uji tiap kuartal
Halaman status
Penutupan bukuTiap jam · selisih 0

Buku ditutup tiap jam, bukan tiap tengah malam.

Rekonsiliasi otomatis mencocokkan entri ledger dengan catatan provider setiap jam. Selisih memicu peringatan ke NOC sebelum muncul di laporan harian operator.

Penutupan harian menghasilkan berkas posisi per tenant yang dirantai hash, sehingga laporan audit periode mana pun selesai di bawah 60 detik dari agregat yang sudah tersusun.

  • Selisih 0
  • Laporan < 60 s
  • Retensi log 7 tahun
Risk & Compliance
PemeliharaanMode baca-saja

Saat kuorum tidak aman, mesin berhenti menulis.

Migrasi skema dan hilangnya dua region memicu mode yang sama: kueri saldo dan riwayat tetap dilayani, permintaan mutasi dijawab 503 dengan header Retry-After berisi jendela yang nyata.

Pemeliharaan terjadwal diumumkan tujuh hari sebelumnya dan tetap dihitung dalam ketersediaan 99,98%. Kami tidak mengecualikan jendela yang kami rencanakan sendiri.

  • 503 + Retry-After
  • Baca tetap jalan
  • Pemberitahuan 7 hari

Antarmuka integrasi

Empat jalur masuk, satu model konsistensi.

gRPC
Jalur transaksi utama. Protobuf berversi dengan kompatibilitas mundur dua versi mayor, streaming dua arah untuk perubahan saldo, dan batas waktu 250 ms per panggilan yang memaksa klien menangani kegagalan alih-alih menggantung.
REST / JSON
HTTP/2, satu sumber daya per mutasi, header Idempotency-Key wajib. Untuk integrasi yang belum siap gRPC: semantik konsistensinya identik, hanya biaya serialisasi dan jumlah perjalanan bolak-balik yang lebih tinggi.
Webhook
Peristiwa keluar ditandatangani HMAC-SHA256 dengan kunci per tenant yang berotasi tiap 24 jam. Percobaan ulang eksponensial sampai 24 jam; endpoint operator harus membalas 2xx dalam 5 detik dan urutan per akun dipertahankan lintas percobaan ulang.
Ekspor batch
Jurnal entri dan berkas posisi harian dalam Parquet dan CSV, terenkripsi AES-256-GCM, diambil lewat penyimpanan objek berkompatibilitas S3. Berkas tersedia 15 menit setelah penutupan buku dan disimpan 7 tahun.

SDK resmi

Klien yang kami rawat sendiri, bukan contoh kode.

Pertanyaan arsitek

Empat pertanyaan yang selalu muncul di tinjauan arsitektur.

Apa yang terjadi kalau dua dari tiga region hilang bersamaan?

Mesin masuk mode baca-saja. Kueri saldo dan riwayat tetap dilayani, permintaan mutasi dijawab 503 dengan header Retry-After. Kami menolak tulisan yang tidak dapat dijamin durabel daripada menerimanya dan berisiko kehilangan entri, karena itulah RPO 0 tetap berlaku.

Bagaimana pengiriman ulang dari klien ditangani?

Setiap mutasi membawa kunci idempotensi klien dan sidik jari isi permintaan. Kunci sama dengan isi sama mengembalikan hasil asli tanpa mutasi baru. Kunci sama dengan isi berbeda ditolak dengan 409. Catatan dedup disimpan 24 jam per tenant.

Apakah saldo bisa dikoreksi setelah entri tertulis?

Tidak dengan mengubah entri. Koreksi ditulis sebagai transaksi kompensasi dengan nomor urut sendiri dan referensi ke entri asal. Audit trail bersifat append-only dan disimpan 7 tahun, sehingga jejak koreksi ikut terekam.

Berapa lama laporan audit satu periode selesai?

Di bawah 60 detik untuk periode sampai 12 bulan, karena agregat per jam sudah tersusun saat penutupan buku. Data mentah per entri diambil lewat ekspor batch, bukan lewat kueri langsung ke jalur transaksi.

Minta spesifikasi integrasinya.

Tim teknik yang menandatangani NDA menerima definisi protobuf berversi, contoh payload untuk enam tahap di atas, dan hasil uji pemadaman kuartal terakhir.

Lihat ringkasan produk