Penulisan dilakukan ke DB primer dan pembacaan dari replika. Jika replika tertinggal, data yang baru ditulis belum terlihat.
Mengapa Penulisan menumpuk di DB primer sehingga replika tertinggal beberapa detik → Akibatnya Data yang baru disimpan belum ada saat dibaca dari replika → Di layar Item yang baru dibeli tidak terlihat, harga di market masih nilai lama, bug pemberian ganda
Saat banyak pemain berkumpul, Jam sibuk malam hari
Penanggung jawab
Penanggung jawab utama Infrastruktur DB (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Baca data yang baru ditulis dari DB primer, periksa status pemberian dan berikan item dalam satu transaksi di DB primer (cegah duplikasi dengan unique key atau UPDATE bersyarat).
Tugas Tim Infrastruktur
Pasang alert replication lag, beri replika spesifikasi minimal setara DB primer dan terapkan replikasi paralel, jalankan penghapusan massal dalam potongan kecil, kelola query agregasi yang berjalan lama di replika.
Di grafik
Naik mengikuti beban · Replication lag (detik)
Yang diperiksa
MySQL: periksa Seconds_Behind_Source di SHOW REPLICA STATUS pada replika (versi sebelum 8.0.22: SHOW SLAVE STATUS). PostgreSQL: periksa write_lag, flush_lag, dan replay_lag di pg_stat_replication pada server primer. RDS: periksa ReplicaLag
Cocok jika
Pada waktu laporan “tidak terlihat”, replication lag mencapai beberapa detik atau lebih, dan setelah lag itu hilang, data terlihat normal. Lag membesar saat lonjakan penulisan, penghapusan massal, atau query agregasi panjang di replika
Tidak cocok jika
Replication lag mendekati 0 tetapi data tetap tidak terlihat: lebih mungkin cache atau sinkronisasi di server game
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Replika bisa tertinggal walaupun penulisan tidak banyak. Satu penghapusan massal yang memakan 10 menit di DB primer dijalankan ulang di replika, sehingga replika tertinggal selama itu. Query agregasi yang berjalan lama di replika juga memperlambat replika mengejar ketertinggalan.
Sumber
SHOW REPLICA STATUS StatementMySQL Seconds_Behind_Source: selisih antara waktu event yang sedang diterapkan replika dan waktu event itu dicatat di DB primer (replication lag)
Replica Server Options and VariablesMySQL Dengan replica_parallel_workers, beberapa thread menerapkan transaksi secara paralel (default 4; jika 0, satu thread menerapkannya berurutan)
Log-Shipping Standby Servers (PostgreSQL Documentation)PostgreSQL Streaming replication secara default asinkron, sehingga ada jeda antara commit dan penerapannya di replika (biasanya kurang dari 1 detik jika replika mampu mengikuti)
The Cumulative Statistics System (PostgreSQL Documentation)PostgreSQL write_lag, flush_lag, dan replay_lag di pg_stat_replication: waktu sejak server primer menulis WAL sampai replika melaporkan bahwa WAL telah ditulis, disimpan ke disk (flush), dan diterapkan