Redis ฐานข้อมูลแบบ In-Memory เพิ่มความเร็วและความเสถียรในการบริหารข้อมูล

This image has an empty alt attribute; its file name is image-3.png

ผู้อ่านหลายๆท่านโดยเฉพาะสาย Website developer คงรู้จักกับ Session กันเป็นอย่างดี Session คือที่เก็บข้อมูล Authentication ของเราเวลาเข้า Page ไหน Browser ของเราก็จะแนบ Session เข้าไปด้วยทุกครั้ง ทำให้ Website หรือ Service ที่เราเข้าใช้นั้นรู้ได้ทันทีว่าผู้ที่กำลังใช้บริการอยู่คือใคร กลไกนี้เราเรียกว่า Stateful API ภาพนี้อาจไม่เป็นปัญหานะครับถ้า Website เรามีเพียงเครื่องเดียว ทำไมนะหรือ ?  

ท้าวความก่อนว่า Session ในหลายๆภาษา โดยเฉพาะ PHP นั้นหลังจากที่ทำการ Login Server จะเก็บข้อมูลไว้บน Server ในรูปแบบของ File และส่ง Key ชุดนึงกลับมาให้กับ Browser เก็บลง Cookie ปัญหาจะเกิดขึ้นคือถ้าเราเอาระบบของเราไปวางไว้บน High Availability Environment (HA) หรือรันบน Container หลายๆตัว แล้วใช้ Load balancer ควบคุมเท่ากับว่า PHP เราถูกใช้งานอยู่หลายๆ เครื่องพร้อมกัน แล้วคนที่ Login เข้ามาจากเครื่อง A Session จะเป็น File อยู่ที่เครื่อง A แล้วถ้า A ล่ม มาใช้ B ก็ต้อง Login ใหม่อย่างนั้นหรือ ? 

กลไกที่เรียกว่า ‘Stateless’

ด้วยปัญหานี้เองจึงมีคนคิดค้นกลไรใหม่ที่เรียกว่า Stateless คือยกเลิกการใช้ Session ไปเลยแล้วเอาข้อมูล User ที่จำเป็นแต่ไม่สำคัญ ไปเก็บไว้บนเครื่อง Client แต่ไม่ได้เก็บข้อมูลเปล่าๆ ของใครมาแก้ก็ได้นะ มีกลไกครอบเข้ารหัสข้อมูล (JWT) กันการแก้ไขอีกชั้น ทำให้มั่นใจได้ว่า ข้อมูลของผู้ใช้ที่ส่งเข้ามาไม่โดนแก้ไขระหว่างทางแน่นอน ซึ่งพอมีการเรียกหน้าต่างๆ นั้นก็จะส่งข้อมูลที่เข้ารหัสนี้ไปพร้อมกับ Request ซึ่ง PHP ก็รับข้อมูลนี้ไปประมวลผลต่อได้ทันทีโดยไม่ต้องไปอ่านข้อมูลเพิ่มเติมใน Session อีก 

แต่ปัญหามันก็มีคือถ้าเราต้องการ Logout User ออก เราทำไม่ได้ทันทีจำเป็นต้องมีกลไกมารองรับเพิ่มเติมในการทำให้สามารถ Logout User ได้ 

มาทำความรู้จัก Remote Dictionary Server (Redis)

พระเอกของบทความนี้ Redis!!! ด้วยปัญหาดังกล่าวเป็นที่มาของเทคโนโลยีที่มาช่วย นั้นคือ Redis หรือย่อมาจาก Remote Dictionary Server ซึ่งเจ้า Redis เป็นฐานข้อมูลที่อยู่ในหน่วยความจำหรือ In-Memory Database โดยโครงสร้างเป็นแบบ Key Value Pair โดยข้อดีหลักๆ ของมันคือเร็วมาก เพราะข้อมูลของมันทำงานอยู่ใน RAM จึงมักนำมาใช้เก็บข้อมูลชั่วคราว อย่างเช่น  Session หรือข้อมูลจำนวนนับที่ต้องมีการใช้ร่วมกันหลายๆเครื่อง หรือจะเอามันวางบน Cloud และเอาไว้เก็บ Session ข้าม Container เลยก็ย่อมได้ 

พอเรามี Redis Server ที่เอาไว้เก็บ Session จากส่วนกลาง Container ต่างๆ ก็สามารถ Share Session ร่วมกันได้อย่างง่ายดาย และถ้าหากมีการบันทึกข้อมูลใหม่ๆลงไป Container อื่นๆ ก็จะได้ข้อมูลที่อัปเดตใหม่ทันที !!!! เราสามารถสั่ง Log out ได้ทันทีแล้ว !!!  

Key Features สำคัญของ Redis

จริงๆมันทำอย่างอื่นได้มากมายเลยนะ เรามาดูมุมอื่นๆของ Redis ว่าเค้าใช้มันทำอะไรและดึงคุณสมบัติอะไรของมันมาใช้บ้าง 

1. ความเร็วและประสิทธิภาพ: Redis เป็นที่รู้จักในวงกว้างเป็นถึงความเร็วและประสิทธิภาพสูง มันทำงานบนหน่วยความจำแบบ In-Memory Database ซึ่งหมายความว่าข้อมูลถูกเก็บไว้ในหน่วยความจำ RAM โดยตรง ทำให้มีความเร็วในการเข้าถึงข้อมูลมีประสิทธิภาพสูงมาก คุณสามารถนำ Redis มาใช้สำหรับการจัดเก็บข้อมูลชั่วคราวเช่น ข้อมูล session ของผู้ใช้หรือการแคชข้อมูลเพื่อลดการเรียกข้อมูลจากแหล่งข้อมูลหลักได้ทันที 

 เช่น ในแอปพลิเคชันเว็บที่ต้องการการเก็บข้อมูล Session ผู้ใช้จำนวนมากพร้อมกัน Redis ช่วยให้การเข้าถึงข้อมูลเกิดขึ้นอย่างรวดเร็ว ไม่เกิดคอขวด รวมถึง Redis สามารถใช้ในระบบแจ้งเตือน (Real-time notifications) โดยการเก็บข้อมูลและส่งต่อไปยังผู้ใช้หรือแอปพลิเคชันได้ทันทีเช่น การแจ้งเตือนการแชทหรือการอัปเดตสถานะต่างๆ

2. การใช้เป็นแคช: Redis ไม่เพียงแค่เป็นฐานข้อมูล แต่มันสามารถใช้เป็นแคชเพื่อเก็บข้อมูลที่ถูกเรียกใช้บ่อย ๆ ซึ่งช่วยลดระยะเวลาในการเรียกข้อมูลจากฐานข้อมูลหลัก สำหรับตัวอย่างการใช้งาน เราสามารถแคชผลลัพธ์จากคิวรี SQL หรือข้อมูล API ที่ถูกใช้งานบ่อย ๆ การใช้ Redis เพื่อแคชข้อมูลช่วยเพิ่มประสิทธิภาพให้กับระบบและลด Latency ในการดึงข้อมูลจากแหล่งข้อมูลหลัก 

เช่น ในระบบอีคอมเมิร์ซออนไลน์ Redis สามารถใช้เป็นแคชข้อมูลสินค้าที่ถูกเรียกใช้บ่อย ๆ ทำให้ระบบรองรับการสั่งซื้อพร้อมกันได้มากโดยไม่มีความล่าช้าในการดึงข้อมูลสินค้า 

3. การทำซ้ำข้อมูล (Replication): Redis ไม่เพียงแค่มีความเร็วและประสิทธิภาพ ยังมีความสามารถในการทำซ้ำข้อมูล (Replication) เพื่อเพิ่มความเชื่อถือในระบบและความสามารถในการกู้คืนข้อมูลในกรณีฉุกเฉิน (High Availability, HA) หลักการทำงาน Redis คือ จะคัดลอกข้อมูลจากเซิร์ฟเวอร์หลัก (Master) ไปยังเซิร์ฟเวอร์ที่ทำหน้าที่เป็น Slave ตลอดเวลา โดยที่ Master เป็นตัวควบคุมหลักของข้อมูลและ Slave เป็นตัวที่รอรับข้อมูลจาก Master 

เช่น ในแอปพลิเคชันเกี่ยวกับการเงิน การทำซ้ำข้อมูลของจะช่วยให้ข้อมูลไม่สูญหายแม้ในกรณีระบบล่ม และเรายังสามารถใช้งานในแบบคลัสเตอร์ (Cluster) ซึ่งประกอบด้วย Redis หลายๆ เครื่องช่วยสำรองข้อมูลซึ่งกันและกันเมื่อตัวใดตัวหนึ่งเกิดล่มตัวอื่นจะสามารถทำงานแทนได้ทันที 

4. Data Synchronization: Redis มีความสามารถในการ Sync ข้อมูลกับฐานข้อมูลหลักอื่น ๆ มี Adaptor หลายตัวที่สนับสนุนการเชื่อมต่อกับฐานข้อมูลต่าง ๆ เช่น MySQL, Postgres, Aurora, Oracle, SQL Server, และ DynamoDB ถือว่าเป็นอีกคุณสมบัติที่ช่วยให้ Redis ยืดหยุ่นในการใช้งานและรองรับระบบที่มีโครงสร้างข้อมูลแตกต่างกันได้อย่างดี 

   เช่น สามารถใช้เพื่อ Sync ข้อมูลระหว่างบริการต่าง ๆ ที่มี Database แตกต่างกัน และช่วยในการส่งข้อมูลระหว่างบริการอย่างมีประสิทธิภาพ 

ทิ้งท้าย

Redis ไม่เพียงเป็นเครื่องมือที่มีความสำคัญในโลก IT แต่ยังเป็นเครื่องมือที่น่าสนใจอย่างยิ่งในการพัฒนาและจัดการข้อมูลในระบบขององค์กร

ไม่ว่าคุณจะเป็นนักพัฒนาซอฟต์แวร์ที่กำลังค้นหาทางในการเพิ่มประสิทธิภาพของแอปพลิเคชันหรือระบบของคุณ หรือนักวิเคราะห์ข้อมูลที่ต้องการความรวดเร็วในการดึงข้อมูลและวิเคราะห์ หรือแม้กระทั่งนักบริหารที่ต้องการระบบข้อมูลที่ถูกต้องและสามารถใช้งานได้ตลอดเวลา Redis อาจเป็นตัวเลือกที่น่าสนใจ 

 หากคุณต้องการบริการ Redis ในรูปแบบ Cloud Solution คุณสามารถติดต่อ Cloud HM ซึ่งเป็นผู้ให้บริการบนคลาวด์ที่มีความเชี่ยวชาญในการให้บริการ Redis เราพร้อมให้คำแนะนำในการใช้งานกับคุณ 

— Cloud HM