การสร้าง Distributed Cached ด้วย Redis
Caching คือเทคนิคที่เราจะนำ data ไปจัดเก็บไว้ใน Memory เพื่อให้เรียกใช้ได้เร็วกว่า แทนที่จะต้องไปอ่านจาก database ตรงๆ ซึ่งจะช้ากว่ามาก
ประเภทของ Caching
การทำ Caching มีอยู่ 2 ประเภทคือ
-
Local Cache คือ Cache ที่เก็บข้อมูลไว้ใน Machine เดียว หรือ Application เดียว ซึ่งจะเหมาะกับระบบที่มีปริมาณ data ไม่มาก หรือมีข้อจำกัดว่าต้องดึงข้อมูลจากเครื่อง หรือ IP Address นี้เท่านั้น
-
Distributed Cache คือ Cache ที่แชร์ให้กับ applications หรือ services ใช้ร่วมกัน ใช้ใน application ที่ host บน cloud services หรือ server farm
การทำ Distributed Cache จะเหมาะสำหรับการออกแบบระบบประมวลผลแบบกระจาย(Distributed System) โดยเฉพาะการออกแบบที่ได้รับความนิยมมากๆในปัจจุบันอย่าง Microservices จะมีความจำเป็นที่ต้องมี Distributed Cache มากๆ
Distributed Cached ใน Microservices
ใน microservices เราจะออกแบบให้ services ต่างๆใช้ cache ร่วมกัน เพื่อให้ได้ประโยชน์ต่างๆเหล่านี้
- ลดปริมาณ traffic เนื่องจากใน microservices จะมี communications เยอะมาก
- ช่วยเพิ่มประสิทธิภาพให้กับระบบ เพราะดึงข้อมูลจาก cache เร็วกว่า database แน่นอน
- ช่วยเพิ่ม resilience ให้กับระบบ เพราะถ้า services ต้นทางตายก็สามารถไปดึงข้อมูลจาก cache ออกมาใช้ก่อนได้
- ใช้เก็บ Session data เพราะ Microservices มีแนวคิดเป็น Stateless จึงจะไม่มีการเก็บ Session หรือ data ใดๆไว้ในตัว Service เลย ในระบบที่ต้องมี Session data เช่น ใน e-commerce จะต้องมี Shopping Cart เราจะเลือกใช้ Distributed Cache มาช่วยเก็บข้อมูลในส่วนนี้่
- ช่วยให้ระบบสามารถกระจายตัวได้ง่าย ด้วยการที่เราเก็บข้อมูลไว้ที่ Distributed Cache จะทำให้เราสามารถเพิ่ม Node ของ Server ได้ง่าย เพราะ Node ที่เข้ามาใหม่จะอ่านข้อมูลจาก Distributed Cache ไปใช้ได้เลย
ทางเลือกในการสร้าง Distributed Cache
เราสามารถใช้ In-Memory Database ต่างๆ เข้ามาเป็น Distributed Cache ได้โดยจะมีทางเลือกหลักๆ ดังนี้
-
Redis ถือได้ว่าเป็นทางเลือกอันดับ 1 ในกดารเป็น Distributed Cache เพราะความรวดเร็วในการอ่านเขียนข้อมูลและการสร้าง Cluster ที่ไม่ได้มีความซับซ้อน รวมไปถึงการ Backup ข้อมูลลง Disk ก็ทำได้ง่าย นั่นจึงเป็นสาเหตุว่าทำไมคนส่วนใหญ่เลือก Redis
-
Memcache เป็นอีกหนึ่งในทางเลือกของการเป็น Distributed Cache ซึ่ง Memcache จะเป็น Key-Value Store เหมือนกับ Redis แต่จะแตกต่างกันตรงที่ Features ของ Memcache จะไม่ได้มีเยอะมากเพราะ Memcached ถูกออกแบบมาสำหรับการเป็น Caching เพียงอย่างเดียว แต่ Redis จะสามารถเป็น Database Server ได้ด้วย
-
SQL Server ก็เป็นอีกทางเลือกนึงในการสร้าง Distributed Cache เพราะเราสามารถสร้าง In-Memory Database ขึ้นมาแล้วทำหน้าที่เป็น Distributed Cache ได้ ซึ่ง Solution นี้จะเหมาะกับทีมทืี่พัฒนาระบบโดยใช้ SQL Server เป็นฐานข้อมูลอยู่แล้ว
-
Hazelcast คือ in-memory data grid ที่สามารถทำ distributed caching, messaging และ computing มี features สำหรับการทำ data replication, data partitioning และ native memory storage ซึ่ง Hazelcast ถูกออกแบบมาสำหรับ cloud-native architectures และง่ายในการเชื่อมต่อกับ Cloud Service Provider ต่างๆ
-
Apache Ignite คือ in-memory computing platform ที่สามารถทำ distributed caching, data processing, และ จัดการกับ transactions เหมือนกับ relational database(ACID) ได้
ขั้นตอนการสร้าง Distributed Cache
- Install และ Config Redis Server
- สร้าง Redis Cluster
- จัดทำ Sharding หรือ Data Replication เพื่อเพิ่มประสิทธิภาพในการเข้าถึงข้อมูล
- นำ Cache ไป Implement ใน Application ดูตัวอย่างได้ที่นี่
- Monitor การใช้งาน Cache(เราต้องแน่ใจว่ามีการอ่านหรือเขียนข้อมูลใน Cache อย่างเหมาะสม)