iok2u.com แหล่งรวมข้อมูลข่าวสารเรื่องราวน่าสนใจเพื่อการศึกษาแลกเปลี่ยนและเรียนรู้

ยืนหยัด เข้มแข็ง และกล้าหาญ (Stay Strong & Be Brave)
ขอเป็นกำลังใจให้คนดีทุกคนในการต่อสู้ความอยุติธรรม ในยุคสังคมที่คดโกงยึดถึงประโยชน์ส่วนตนและพวกฟ้องมากกว่าผลประโยชน์ส่วนรวม จนหลายคนคิดว่าพวกด้านได้อายอดมักได้ดี แต่หากยึดคำในหลวงสอนไว้ในเรื่องการทำความดีเราจะมีความสุขครับ
Pay It Forward เป้าหมายเล็ก ๆ ในการส่งมอบความดีต่อ ๆ ไป
เว็ปไซต์นี้เกิดจากแรงบันดาลใจในภาพยนต์เรื่อง Pay It Forward ที่เล่าถึงการมีเป้าหมายเล็ก ๆ กำหนดไว้ให้ส่งมอบความดีต่อไปอีก 3 คน หากใครคิดว่ามันมีประโยชน์ก็สามารถนำไปเผยแพร่ต่อได้เลยโดยไม่ต้องตอบแทนกลับมา อยากให้ส่งต่อเพื่อถ่ายทอดต่อไป
มิสเตอร์เรน (Mr. Rain) และมิสเตอร์เชน (Mr. Chain)
Mr. Rain และ Mr. Chain สองพี่น้องในโลกออฟไลน์และออนไลน์ที่จะมาร่วมมือกันสร้างสื่อสารสนเทศ เพื่อเผยแพร่ให้ความรู้ในเรื่องราวต่างๆ มากมายสร้างสังคมในการเรียนรู้ หากใครคิดว่ามันมีประโยชน์ก็สามารถนำไปเผยแพร่ต่อได้เลยโดยไม่ต้องตอบแทนกลับมา

การออกแบบระบบ (System Design) 3 กลยุทธ์ Caching เพื่อความเร็วสูงสุด

System Design Deep Dive กลยุทธ์ Caching เพื่อความเร็วสูงสุด

เราได้เรียนรู้แล้วว่า Database คือ หัวใจของระบบ แต่การเข้าไปค้นหาข้อมูลใน Database ทุกครั้งที่ผู้ใช้ร้องขอ ก็เปรียบเหมือนการต้องวิ่งไปค้นเอกสารในห้องสมุดขนาดใหญ่ทุกครั้ง ซึ่งทั้งช้าและเสียเวลา Caching จึงเข้ามามีบทบาทเป็น "โต๊ะทำงาน" ที่เราวางหนังสือที่ใช้บ่อยๆ ไว้ใกล้มือ ทำให้หยิบใช้ได้ทันที แต่คำถามสำคัญ คือ "เราจะจัดการหนังสือบนโต๊ะทำงาน (Cache) กับในห้องสมุด (Database) ให้ตรงกันเสมอได้อย่างไร?" บทความนี้จะเจาะลึกกลยุทธ์การทำ Caching ในรูปแบบต่างๆ เพื่อตอบคำถามนี้ และช่วยให้คุณเลือกใช้เทคนิคที่เหมาะสมที่สุดกับงาน

ทบทวน: Cache-Aside (Lazy Loading)

นี่คือกลยุทธ์พื้นฐานที่สุดที่นักพัฒนานิยมใช้ และเป็นแบบที่เราได้เคยพูดถึงไปแล้ว

  1. Read: แอปพลิเคชันจะมองหาข้อมูลใน Cache ก่อน

  2. Cache Miss: ถ้าไม่เจอ จะไปดึงข้อมูลจาก Database

  3. Update Cache: จากนั้นนำข้อมูลที่ได้จาก Database มาเก็บไว้ใน Cache เพื่อใช้ในครั้งต่อไป

  4. Write: แอปพลิเคชันจะเขียนข้อมูลใหม่ลงใน Database โดยตรง และมักจะลบข้อมูลเก่าที่เกี่ยวข้องออกจาก Cache ไปด้วย (เพื่อบังคับให้ครั้งต่อไปต้องอ่านจาก Database ใหม่)

ข้อดี: ง่ายต่อการนำไปใช้, Cache จะเก็บเฉพาะข้อมูลที่มีการร้องขอจริงๆ ข้อเสีย: การอ่านครั้งแรก (Cache Miss) จะช้าเสมอ, ข้อมูลใน Cache กับ Database อาจไม่ตรงกันในบางจังหวะ

กลยุทธ์สำหรับ "การเขียน" ข้อมูล (Write Policies)

ปัญหาของ Cache-Aside คือการจัดการข้อมูลตอนเขียนที่อาจทำให้ข้อมูลไม่ตรงกัน (Inconsistent) กลยุทธ์ต่อไปนี้จึงถูกออกแบบมาเพื่อแก้ปัญหานี้

1. Write-Through (เขียนทะลุ)

ในกลยุทธ์นี้ แอปพลิเคชันจะเขียนข้อมูลไปที่ Cache ก่อน จากนั้น Cache จะรับหน้าที่เขียนข้อมูลนั้นต่อไปยัง Database ให้เองโดยทันที แอปพลิเคชันจะได้รับคำตอบว่า "เขียนสำเร็จ" ก็ต่อเมื่อข้อมูลถูกเขียนลงทั้งใน Cache และ Database เรียบร้อยแล้ว

  • การทำงาน: App -> Write to Cache -> Cache writes to DB -> Success

  • ข้อดี: ข้อมูลตรงกันเสมอ! รับประกันได้ว่าข้อมูลใน Cache กับ Database จะเหมือนกันตลอดเวลา เพราะเขียนพร้อมกัน

  • ข้อเสีย: การเขียนจะช้าลง เพราะต้องรอให้เขียนลง Database ซึ่งช้ากว่าให้เสร็จสิ้นก่อน

  • เหมาะกับ: ระบบที่ต้องการความถูกต้องของข้อมูลสูงสุด และยอมรับการเขียนที่ช้าลงได้ เช่น ระบบธนาคาร, ระบบจัดการสต็อกสินค้าที่ความผิดพลาดรับไม่ได้

2. Write-Back / Write-Behind (เขียนทีหลัง)

นี่คือกลยุทธ์ที่เน้นความเร็วในการเขียนสูงสุด แอปพลิเคชันจะเขียนข้อมูลลงที่ Cache เท่านั้น แล้วตอบกลับผู้ใช้ทันทีว่า "สำเร็จ" โดยไม่ต้องรอเขียนลง Database

จากนั้น Cache จะรวบรวมข้อมูลที่ถูกเขียนไว้หลายๆ รายการ แล้วค่อยนำไปเขียนลง Database ในภายหลังเป็นชุดๆ (เช่น ทุก 1 นาที หรือเมื่อมีข้อมูลครบ 100 รายการ)

  • การทำงาน: App -> Write to Cache -> Success (Cache จะหาจังหวะเขียนลง DB เองทีหลัง)

  • ข้อดี: เขียนเร็วมาก! เพราะทำงานกับ Cache ที่อยู่ใน Memory ซึ่งเร็วกว่า Disk ของ Database หลายเท่า

  • ข้อเสีย: เสี่ยงข้อมูลหาย! หาก Cache ล่มก่อนที่จะได้เขียนข้อมูลลง Database ข้อมูลที่ค้างอยู่ทั้งหมดจะหายไปทันที

  • เหมาะกับ: ระบบที่ต้องการประสิทธิภาพในการเขียนสูงมากๆ และยอมรับความเสี่ยงข้อมูลหายเล็กน้อยได้ เช่น ระบบนับยอดวิว, การเก็บ Log, หรือระบบที่ข้อมูลเปลี่ยนแปลงบ่อยมากๆ

เปรียบเทียบกลยุทธ์ Caching

กลยุทธ์

ความเร็วในการอ่าน

ความเร็วในการเขียน

ความถูกต้องของข้อมูล

ความเสี่ยงข้อมูลหาย

Cache-Aside

ช้าในครั้งแรก

เร็ว (เขียนลง DB ตรง)

อาจไม่ตรงกันชั่วคราว

ต่ำ

Write-Through

เร็ว

ช้า (ต้องรอ DB)

สูงสุด (ตรงกันเสมอ)

ต่ำมาก

Write-Back

เร็ว

เร็วที่สุด

ต่ำ (ไม่ตรงกันจนกว่าจะเขียน)

สูง

แล้วถ้า Cache เต็มล่ะ? (Eviction Policies)

เมื่อ Cache เต็ม เราต้องเลือกว่าจะลบข้อมูลเก่าชิ้นไหนทิ้งไปเพื่อเอาที่ว่างมาให้ข้อมูลใหม่ ซึ่งมีนโยบาย (Policy) ที่นิยมใช้กันคือ:

  • LRU (Least Recently Used): ลบข้อมูลที่ "ถูกใช้งานนานที่สุดแล้ว" ทิ้งไป

  • LFU (Least Frequently Used): ลบข้อมูลที่ "ถูกใช้งานน้อยครั้งที่สุด" ทิ้งไป

  • FIFO (First-In, First-Out): ข้อมูลที่เข้ามาใน Cache ก่อน ก็จะถูกลบออกไปก่อน (เหมือนท่อ)

การทำ Caching ไม่ใช่แค่การเอาข้อมูลมาพักไว้ แต่คือศาสตร์และศิลป์ในการเลือกลยุทธ์ที่สมดุลระหว่าง ความเร็ว (Performance) และ ความถูกต้องของข้อมูล (Consistency) การเข้าใจกลยุทธ์อย่าง Write-Through และ Write-Back จะทำให้คุณสามารถออกแบบระบบที่ตอบโจทย์ทางธุรกิจได้อย่างแท้จริง ไม่ว่าจะเป็นระบบที่ต้องการความถูกต้อง 100% หรือระบบที่ต้องการความเร็วเป็นที่หนึ่ง

.

-------------------------

ที่มาข้อมูล

ที่มาภาพและรวบรวม

www.iok2u.com 

-------------------------

สนใจเรื่องราวเพิ่มเติมคลิกที่นี่

การรวมระบบ (System Integration)

-------------------------

 

 
 
 
 
 

ขอต้อนรับเข้าสู่เว็บไซต์
www.iok2u.com
แหล่งข้อมูลสารสนเทศเพื่อคุณ

เว็บไซต์ www.iok2u.com นี้เกิดมาจาก แรงบันดาลใจในภาพยนต์เรื่อง Pay It Forward โดยมีเป้าหมายเล็ก ๆ ที่กำหนดไว้ว่า ทุกครั้งที่เข้าเรียนสัมมนาหรืออบรมในแต่ละครั้ง จะนำความรู้มาจัดทำเป็นบทความอย่างน้อย 3 เรื่อง เพื่อมาลงในเว็บนี้
ความตั้งใจที่จะถ่ายทอดความรู้ที่ได้รับมาทำการถ่ายทอดต่อไป และหวังว่าจะมีคนมาอ่านแล้วเห็นว่ามีประโยชน์นำเอาไปใช้ได้ หากใครคิดว่ามันมีประโยชน์ก็สามารถนำไปเผยแพร่ต่อได้เลย โดยอาจไม่ต้องอ้างอิงที่มาหรือมาตอบแทนผู้จัด แต่ขอให้ส่งต่อหากคิดว่ามันดีหรือมีประโยชน์ เพื่อถ่ายทอดความรู้และสิ่งดี ๆ ต่อไปข้างหน้าต่อไป Pay It Forward