Nếu để giảm tải mà vài phút mới lưu một lần, thì khi server sập giữa hai lần lưu, tiến độ chơi sẽ mất.
Vì sao Trạng thái nhân vật được lưu vài phút một lần → Dẫn đến Giữa hai lần lưu, server crash hoặc gặp sự cố → Trên màn hình Vào lại game thì thấy trạng thái của vài phút trước (rollback)
Phụ trách chính Phát triển server (Đội phát triển game) · Phối hợp Hạ tầng DB (Đội hạ tầng)
Việc cần làm (Đội phát triển game)
Lưu ngay các sự kiện quan trọng (giao dịch, nhận vật phẩm hiếm), ghi log thay đổi.
Việc cần làm (Đội hạ tầng)
Kiểm tra dư địa IOPS và CPU của DB để gánh lượng ghi tăng thêm khi rút ngắn chu kỳ lưu.
Trên đồ thị
Rớt kết nối hàng loạt · Số kết nối, số báo cáo rollback
Chỗ cần xem
Đặt cạnh nhau thời điểm crash hoặc sự cố và thời điểm lưu cuối cùng của các nhân vật báo bị rollback (log lưu của server game hoặc cột thời gian sửa trong DB)
Đúng nếu
thời điểm bị quay về trùng với lần lưu cuối cùng ngay trước crash, và khoảng thời gian bị mất ngắn hơn chu kỳ lưu
Loại trừ nếu
log server game ghi là đã lưu xong mà vẫn bị quay về → mất dữ liệu do failover DB (db-failover) hoặc đọc giá trị cũ từ bản sao (db-replica-lag)
Cách kiểm tra
Cần log và chỉ số của server, client game
Nguồn
Asynchronous Commit (PostgreSQL Documentation)PostgreSQL Gom bản ghi lại để ghi xuống sau thì thông lượng tăng, đổi lại khi có sự cố, các transaction gần nhất có thể mất (cùng một sự đánh đổi)
Redis persistenceRedis Nếu vài phút mới tạo snapshot RDB một lần thì phải chấp nhận mất dữ liệu của vài phút cuối khi kết thúc bất thường