Database Reliability

Strategies for data integrity, backups, and preventing data loss.

Database Reliability

Database Reliability คือการสร้างความมั่นใจว่าข้อมูลจะถูกจัดเก็บอย่างปลอดภัย ไม่สูญหาย และระบบสามารถฟื้นตัวจากเหตุการณ์ไม่คาดฝันได้เสมอ (Handling failures)

Cheat Sheet: Core Reliability Concepts

ConceptDescription
Data Durabilityการรับประกันว่าเมื่อข้อมูลถูกบันทึกสำเร็จ (Commit) ข้อมูลนั้นจะคงอยู่ถาวร แม้ระบบจะล่มหรือไฟฟ้าดับ
Backupsการทำสำเนาข้อมูลตามช่วงเวลา (Snapshot) เพื่อใช้สำหรับการกู้คืน (Recovery) เมื่อเกิดข้อผิดพลาดร้ายแรง
Replicationการทำสำเนาข้อมูลไปยัง Database server อื่นแบบเรียลไทม์ (หรือเกือบเรียลไทม์) เพื่อเพิ่ม Availability
Handling Failuresกระบวนการรับมือและฟื้นฟูระบบจากเหตุขัดข้อง เช่น Server crash, Network partition

Practical Examples

1. Data Durability via Write-Ahead Logging (WAL)

Scenario: ระบบประมวลผลการสั่งซื้อสินค้า How it works: ก่อนที่ Database จะเขียนข้อมูลลง Data file โดยตรง ระบบจะบันทึกรายละเอียดของการเปลี่ยนแปลงลงใน Write-Ahead Log (WAL) ก่อน หากเกิดไฟดับระหว่างที่กำลังบันทึกข้อมูล เมื่อระบบกลับมาทำงาน Database จะอ่าน WAL เพื่อทำซ้ำ (Redo) การกระทำที่ยังไม่เสร็จสมบูรณ์ ทำให้มั่นใจได้ว่า Data durability จะไม่ถูกทำลาย

2. Backups Strategy (3-2-1 Rule)

Scenario: การปกป้องข้อมูลระดับองค์กรจากการโจมตีหรืออุบัติเหตุ Practice:

  • มีข้อมูล 3 Copies (1 ข้อมูลหลัก + 2 Backups)
  • จัดเก็บใน 2 Storage types ที่แตกต่างกัน (เช่น Local disk และ Cloud storage)
  • จัดเก็บ 1 Copy ไว้ใน Offsite location Example: การตั้งค่า Automated nightly backups ไปยัง Amazon S3 และมี Point-in-Time Recovery (PITR) เพื่อให้สามารถย้อนกลับไปช่วงเวลาใดก็ได้ใน 7 วันที่ผ่านมา

3. Replication for High Availability

Scenario: แอปพลิเคชันมีผู้ใช้งานทั่วประเทศ ไม่สามารถยอมรับการเกิด Downtime ได้ Practice: ตั้งค่า Primary-Replica architecture

  • Primary Node: รับหน้าที่จัดการ Write transactions ทั้งหมด
  • Replica Nodes: คัดลอกข้อมูลจาก Primary อย่างต่อเนื่อง และรับหน้าที่ Read queries Failure Handling: หาก Primary node หยุดทำงาน ระบบจะทำการ Promoting หนึ่งใน Replica node ขึ้นมาเป็น Primary ทันที (Automatic Failover) เพื่อให้ระบบทำงานต่อไปได้โดยไม่มีผลกระทบต่อผู้ใช้งาน

4. Handling Failures in Application Logic

Scenario: การโอนเงินข้ามบัญชี Practice: ใช้ Database Transactions (ACID) เพื่อให้มั่นใจใน Data integrity

BEGIN;
UPDATE accounts SET balance = balance - 1000 WHERE user_id = 1;
-- If the application crashes here, the entire transaction is safely rolled back.
UPDATE accounts SET balance = balance + 1000 WHERE user_id = 2;
COMMIT;

การจัดการ Failure ในระดับ Code ควรมีการทำ Retry Mechanism อย่างเหมาะสม และมีการ Log ข้อผิดพลาดเพื่อให้ Engineer สามารถตรวจสอบได้ทันที

AI Knowledge Assistant

สวัสดีครับ! ผมคือ AI Assistant ประจำเว็บไซต์

คุณสามารถสอบถามข้อมูลด้าน Computer Science, Business, หรือ Finance ได้เลยครับ