Khi ghi vào DB chính và đọc từ bản sao, nếu bản sao bị tụt lại phía sau thì nội dung vừa ghi sẽ chưa hiện ra.
Vì sao Thao tác ghi dồn vào DB chính khiến bản sao tụt lại vài giây → Dẫn đến Đọc nội dung vừa lưu từ bản sao thì chưa có → Trên màn hình Vật phẩm vừa mua không thấy đâu, giá trên sàn giao dịch là giá cũ, lỗi phát thưởng trùng
Phụ trách chính Hạ tầng DB (Đội hạ tầng) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Dữ liệu vừa ghi thì đọc từ DB chính; kiểm tra đã phát thưởng chưa và phát thưởng trong cùng một transaction trên DB chính (chặn trùng bằng unique key hoặc UPDATE có điều kiện).
Việc cần làm (Đội hạ tầng)
Cảnh báo replication lag, đặt cấu hình bản sao ngang hoặc cao hơn DB chính và áp dụng replication song song, chia nhỏ các lệnh xóa hàng loạt, quản lý các query tổng hợp chạy lâu trên bản sao.
Trên đồ thị
Tăng theo số người và tải · Replication lag (giây)
Chỗ cần xem
MySQL: trên bản sao, xem Seconds_Behind_Source trong SHOW REPLICA STATUS (phiên bản trước 8.0.22 dùng SHOW SLAVE STATUS). PostgreSQL: xem write_lag, flush_lag, replay_lag trong pg_stat_replication trên server chính; RDS: xem ReplicaLag
Đúng nếu
vào lúc có báo cáo “không thấy”, độ trễ từ vài giây trở lên, và xem lại sau khi hết trễ thì bình thường. Độ trễ tăng vào lúc ghi dồn dập, xóa hàng loạt hoặc có query tổng hợp dài chạy trên bản sao
Loại trừ nếu
độ trễ gần 0 mà vẫn không thấy → cache hoặc cơ chế đồng bộ của server game
Cách kiểm tra
Kiểm tra bằng công cụ hạ tầng (không cần code game)
Tìm hiểu thêm
Dù ghi không nhiều, bản sao vẫn có thể tụt lại. Một lệnh xóa hàng loạt mất 10 phút trên DB chính cũng khiến bản sao tụt lại chừng ấy thời gian trong lúc chạy lại lệnh đó, và query tổng hợp chạy lâu trên bản sao cũng làm việc bắt kịp chậm đi.
Nguồn
SHOW REPLICA STATUS StatementMySQL Seconds_Behind_Source: chênh lệch so với thời điểm sự kiện mà bản sao đang áp dụng được ghi trên DB chính (replication lag)
Replica Server Options and VariablesMySQL replica_parallel_workers cho nhiều thread áp dụng transaction song song (mặc định 4, bằng 0 thì một thread áp dụng lần lượt)