การต้องการการตอบสนองที่ดีนั้นเป็นสิ่งที่ทุกคนฝันหา และ ต้องบอกว่า ในยุคปัจจุบันนั้น ยิ่งเร็วมากก็ยิ่งได้เปรียบมาก แต่ด้วยขนาดข้อมูลที่เยอะขึ้น การใช้เทคนิคเดิมๆ ในการดึงข้อมูลดูเหมือนจะทำให้สิ่งที่เราต้องการนั้นกลับสวนทางกัน เพราะว่า การตอบสนองนั้นจะยิ่งช้าลงเมื่อข้อมูลเยอะขึ้น ทั้งนี้เพราะระบบฐานข้อมูลแบบเก่าๆ นั้นไม่ได้เหมาะกับปริมาณข้อมูลมหาศาลอีกต่อไป
วันนี้เราจึงพาท่านไปพบกับ เทคโนโลยี In-Memory database ที่เมื่อนำมาใช้งาน ท่านจะสามารถลดเวลาการเข้าใช้แอปพลิเคชัน ลงอย่างมหาศาล
การทำให้แอปพลิเคชันมีความทันสมัย ด้วย In-Memory Database เช่น Redis หรือ Memcached
ในการพัฒนาแอปพลิเคชันหรือการปรับปรุงแอปพลิเชันเดิมให้เร็วทันยุคนั้น ความเร็วในการตอบสนองและประสิทธิภาพของระบบเป็นปัจจัยสำคัญที่ส่งผลต่อประสบการณ์ของผู้ใช้งาน (User Experience) และความสามารถในการรองรับผู้ใช้งานจำนวนมาก (Scalability) การใช้ฐานข้อมูลเชิงสัมพันธ์ (RDBMS) อย่างเดียว เช่น PostgreSQL, MySQL หรือ SQL Server แม้จะมีความเสถียรและแม่นยำในการจัดการข้อมูล แต่ก็มีข้อจำกัดด้านประสิทธิภาพเมื่อมีการเข้าถึงข้อมูลจำนวนมากหรือต้องการการตอบสนองแบบ real-time
แนวทางหนึ่งที่ได้รับความนิยมในการพัฒนาแอปพลิเคชันให้มีความทันสมัยและรวดเร็ว คือ การนำ In-Memory Database เช่น Redis หรือ Memcached มาใช้เป็น Cache Layer ก่อนที่จะดึงข้อมูลจากฐานข้อมูลหลัก (RDBMS) โดยมีประโยชน์ดังต่อไปนี้:
1. เพิ่มความเร็วในการเข้าถึงข้อมูล
ข้อมูลที่อยู่ในหน่วยความจำ (RAM) สามารถถูกเรียกใช้งานได้เร็วกว่าในดิสก์อย่างมาก การเก็บข้อมูลที่ถูกเรียกใช้งานบ่อยไว้ใน Redis หรือ Memcached จะช่วยลดภาระของ RDBMS และลด latency ในการตอบสนองต่อผู้ใช้ โดยมันจะทำหน้าที่อยู่ตรงกลาง เรียกว่า 3-tier architecture
2. ลดภาระของฐานข้อมูลหลัก
การ offload คำสั่ง read ที่เกิดขึ้นซ้ำๆ ไปยัง cache ช่วยให้ฐานข้อมูลหลักสามารถโฟกัสกับคำสั่ง write หรือคำสั่งที่ต้องการความถูกต้องแบบ transactional ได้ดีขึ้น ช่วยลดการเกิด bottleneck และ deadlock เพราะ RDBMS แทบจะไม่ต้องอาศัยการอ่านเลย
3. รองรับโหลดได้มากขึ้น (Scalability)
In-memory cache อย่าง Redis ถูกออกแบบให้ทำงานแบบ distributed ได้ดี รองรับการ scale out และสามารถใช้ในระบบ microservices เพื่อให้แต่ละบริการเข้าถึงข้อมูลได้รวดเร็วขึ้น ทำงานแบบคลัสเตอร์ได้ และ scale ในระดับ WAN ได้ หรือ Geo ได้ด้วย
4. รองรับการคำนวณหรือข้อมูลที่เปลี่ยนแปลงช้า (Read-heavy / Semi-static)
ข้อมูลที่เปลี่ยนไม่บ่อย เช่น รายชื่อหมวดหมู่, ข้อมูลโปรไฟล์ผู้ใช้, หรือผลลัพธ์ของการคำนวณที่ใช้ทรัพยากรสูง สามารถ cache ไว้เพื่อลดการประมวลผลซ้ำ
5. ยืดหยุ่นและใช้งานได้หลากหลาย
Redis ไม่ได้รองรับแค่ key-value เท่านั้น แต่ยังมีโครงสร้างข้อมูลขั้นสูง เช่น list, set, sorted set, hash หรือแม้กระทั่ง pub/sub และ stream จึงสามารถนำไปประยุกต์ใช้กับ use case ที่หลากหลาย เช่น queue, session store, leaderboard, notification เป็นต้น หรือแม้กระทั่ง ทำตัวเป็น dataset ที่เป็นนำเนาเลยก็ได้จาก RDBMS
ตัวอย่างการทำงาน
1. แอปพลิเคชันตรวจสอบว่าข้อมูลที่ต้องการมีอยู่ใน Redis หรือไม่
2. ถ้ามี ดึงจาก Redis ตอบกลับผู้ใช้งาน
3. ถ้าไม่มี ดึงจาก RDBMS เก็บไว้ใน Redis ตอบกลับผู้ใช้งาน
แล้วจะทำการแก้ไข application ที่มีอยู่ยังไง ?
การปรับปรุง แอปพลิเคชัน ที่ท่านมีอยู่นั้น ขึ้นอยู่กับภาษาที่ท่านใช้พัฒนา แต่ในขณะนี้ ภาษาการโปรแกรมปัจจุบันเช่น C++/C#, PHP, Golang, Python ก็มี driver ในการเข้าถึง Redis ทั้งสิ้น ท่านเพียงเพิ่ม logic ในการดึงข้อมูล จาก in-memory database เข้ามาเป็นอีกส่วนหนึ่งเท่านั้นเอง
สรุป
การนำ In-memory database อย่าง Redis หรือ Memcached มาใช้งานในแอปพลิเคชันช่วยยกระดับความทันสมัยของระบบในด้านประสิทธิภาพ ความเร็ว และความสามารถในการขยายตัว ลดภาระการทำงานของ RDBMS และเพิ่มความพึงพอใจให้กับผู้ใช้งานได้อย่างชัดเจน โดยเฉพาะในระบบที่มีการเข้าถึงข้อมูลจำนวนมากหรือแบบ real-time
หากท่านมีคำถาม เกี่ยวกับบริการ Modernizing Applications with In-Memory Databases ติดต่อพูดคุยกับเราได้โดยตรงที่ Line OA : @avesta.co.th หรืออีเมล์ [email protected]