ปัญหาที่พบเจอ เกี่ยวกับเรื่องของ caching data
เมื่อระบบมีคนใช้งานจำนวนมาก ๆ
แล้วระหว่างนั้น เหตุการณ์ที่ไม่คาดฝันก็เกิดขึ้น
นั่นคือ caching data นั้น มีอายุ และดันหมดอายุพร้อม ๆ กัน
ทำให้แต่ละ request ไม่เจอข้อมูลใน caching เลย
ผลที่ตามมาคือ ทุก ๆ request ต้องไปดึงข้อมูลจาก database/data store หลัก
ทำให้ระบบช้า หรือ ล่มไปง่าย ๆ เลย

ดังนั้นมาดูแนวทางในการแก้ไขปัญหากันก่อน
ว่ามีอะไรบ้าง ?

  • caching data ไม่มีอายุ (มันดีใช่ไหม ? ตรงนี้น่าคิด)
  • ทำการ warm caching data ขึ้นมาใหม่ ว่าแต่ตอนนั้นระบบก็ถูกใช้งานเยอะนะ ถึงแม้จะแยก process ออกไป จะทำงานได้ดีจริง ๆ หรือ ?
  • ทำการต่อ expire time ให้แบบอัตโนมัติเลย เช่น ต่อเวลาทุกครั้งเมื่อมีการเข้าถึง หรือ ถ้าหมดอายุก็ต่ออายุให้ ปัญหาคือ ถ้ามีคนเข้าถึงข้อมูลที่จะ expire พร้อม ๆ กันละ ก็ไม่ช่วยลดหรือแก้ไขปัญหาไหมนะ ? แต่ว่าจะเกิดกรณีนี้เยอะไหม คิดเป็นกี่ % ? (ในกรณีหลัก ๆ ช่วยลดหรือแก้ไขปัญหาได้ และ ง่าย)
  • จากวิธีการก่อนหน้า ทำการ lock เข้ามาช่วยดีไหม สำหรับการเข้าถึงข้อมูลเดียวกันแบบพร้อม ๆ กัน ทำให้ไม่เกิดเหตุการณ์แบบก่อนหน้านี้ แต่ว่าจะลด performance ลง เนื่องจากจะต้องเข้าถึงแบบ sequencial นั่นเอง แต่ช่วยลดได้ (ดูซับซ้อนขึ้น แต่แก้ไขปัญหาได้) เช่น RedLock ของ Redis เป็นต้น