한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › L12 ฐานข้อมูล

ความคืบหน้าหายเพราะรอบเซฟยาว Periodic save window

ID สาเหตุ db-save-interval · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ อินฟรา DB (ทีมอินฟรา)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

ถ้าเซฟแค่ทุกไม่กี่นาทีเพื่อลดโหลด เมื่อเซิร์ฟเวอร์ล่มในระหว่างนั้น ความคืบหน้าจะหายไป

ทำไม เซฟสถานะตัวละครทุกไม่กี่นาที → ผลคือ เซิร์ฟเวอร์แครชหรือขัดข้องในระหว่างนั้น → บนหน้าจอ เข้าเกมใหม่แล้วกลับไปเป็นสถานะเมื่อไม่กี่นาทีก่อน (โรลแบ็ค)

อาการ
กดไม่ติด/โรลแบ็ค
ปัจจัย
แพ็กเก็ตหาย
ใครเจอ
ทั้งเซิร์ฟเวอร์, บางจุด/บางแชนแนล
เกิดเมื่อไร
สุ่มเป็นครั้งคราว
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ อินฟรา DB (ทีมอินฟรา)
งานฝั่งทีมพัฒนาเกม
เซฟทันทีเมื่อเกิดเหตุการณ์สำคัญ (เทรด, ได้ของหายาก), บันทึก log การเปลี่ยนแปลง
งานฝั่งทีมอินฟรา
ตรวจว่า DB มี IOPS และ CPU เหลือพอรองรับการเขียนที่เพิ่มขึ้นเมื่อลดรอบเซฟ
บนกราฟ
การเชื่อมต่อหลุดพร้อมกัน · จำนวนการเชื่อมต่อ, จำนวนการแจ้งโรลแบ็ค
จุดที่ต้องดู
วางเวลาที่แครชหรือขัดข้องคู่กับเวลาเซฟล่าสุดของตัวละครที่แจ้งโรลแบ็ค (log การเซฟของเซิร์ฟเวอร์เกมหรือคอลัมน์เวลาแก้ไขใน DB)
สัญญาณว่าใช่
จุดที่ย้อนกลับตรงกับเวลาเซฟล่าสุดก่อนแครช และเวลาที่หายไปสั้นกว่ารอบเซฟ
สัญญาณว่าไม่ใช่
log ของเซิร์ฟเวอร์เกมบอกว่าเซฟเสร็จแล้วแต่ยังย้อนกลับ: น่าจะเป็นข้อมูลหายจาก failover ของ DB (db-failover) หรือค่าเก่าที่อ่านจาก replica (db-replica-lag)
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม

แหล่งอ้างอิง

  1. Asynchronous Commit (PostgreSQL Documentation) PostgreSQL
    การรวมการเขียนแล้วค่อย flush ทีหลังทำให้ throughput สูงขึ้น แต่ตอนขัดข้องทรานแซกชันล่าสุดอาจหายได้ (เป็นการแลกแบบเดียวกัน)
  2. Redis persistence Redis
    ถ้าสร้าง RDB snapshot ทุกไม่กี่นาที ต้องยอมรับว่าข้อมูลช่วงไม่กี่นาทีสุดท้ายอาจหายเมื่อปิดตัวผิดปกติ

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L12 ฐานข้อมูล

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กดไม่ติด/โรลแบ็ค)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง