ความแตกต่างของ Cluster mode ใน ElastiCache for Redis

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「ElastiCache for Redisのクラスターモードについて調べてみる」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.09.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับ สึคุโบชิ ครับ
ช่วงนี้ผมได้โอกาสจับ ElastiCache for Redis บ่อย และพึ่งจะได้ศึกษาเกี่ยวกับ Cluster mode
เลยจะมาแชร์ความรู้ที่ผมได้ไปศึกษามาให้ทุกคนได้ฟังกันครับ

คำศัพท์ที่เราจะได้เจอใน Cluster mode

ในการจะทำความเข้าใจ Cluster mode จำเป็นต้องทำความเข้าใจคำศัพท์เหล่านี้ก่อนครับ

คำศัพท์ คำอธิบาย
Redis Cluster กรุ๊ปที่รวม Shard หนึ่ง หรือ หลาย จำนวน
Shard Node group ที่รวม Primary node 1 ตัว + Replica node 0-5 ตัว
ใน Redis Cluster จะมีอย่างน้อย 1 Shard
Primary node Node ที่สามารถอ่านและเขียนได้
ใน 1 Shard จะถูกสร้างแน่นอน 1 ตัว
Replica node Node ที่สามารถอ่านได้
ใน 1 Shard จะสามารถสร้างได้ 0-5 ตัว
กรณีที่เปิดการใช้งาน Multi AZ จำเป็นต้องสร้างอย่างน้อย 1 ตัว

พอเรานำมาเขียนเป็นแผนภาพจะได้ดังนี้ครับ

ในกรณีที่ Off Cluster mode

ในกรณีที่ Off Cluster mode จำนวน Shard จะถูกล็อกให้อยู่ที่ 1 เท่านั้น
นอกจากนี้จะการให้บริการ Enpoint 2 ประเภทคือ Reader Endpoint และ Writer Endpoint สำหรับใช้ Access ไปยัง Redis Cluster

สถานการณ์ที่ควร Off Cluster mode ได้แก่กรณีต่อไปนี้ครับ

1.ต้องการแบ่ง Endpoint ให้เป็น Reader Endpoint และ Writer Endpoint

ในกรณีที่ Off Cluster mode เราจะสามารถแบ่ง Endpoint ให้เป็นส่วนของ Reader และ Writer ได้ครับ

เช่น เรามีแอปพลิเคชันที่จำนวนการอ่านกับ Redis เป็นจำนวนมาก แล้วกังวลว่าจะส่งผลกระทบต่อการประมวลผลการเขียนด้วย เราจึงแบ่ง Endpoint ให้เป็น Reader Endpoint และ Writer Endpoint เพื่อแบ่งการโหลดโดยที่ไม่ต้องเพิ่ม Node ใน Redis Cluster

2.อยากใช้ Redis เวอร์ชั่นที่เก่ากว่า 3.2

Redis เวอร์ชั่นที่เก่ากว่า 3.2 จะไม่รองรับการใช้งาน Cluster mode ครับ

ทำให้หากเราอยากจะใช้ Redis ที่เวอร์ชั่นเก่ากว่า 3.2 จำเป็นต้อง Off Cluster mode ไว้ครับ

2.อยากใช้ฟังก์ชัน AOF(Append-Only File) ของ Redis

Redis จะมีฟังก์ชันที่เรียกว่า "Append-Only File" ที่จะใช้รับประกันความทนทานของข้อมูล
การจะใช้ฟังก์ชันนี้ได้จำเป็นต้อง Off Cluster mode และ ปิดการใช้งาน Multi AZ
นอกจากนี้ AOF ยังไม่รองรับการใช้งานใน Redis ที่เวอร์ชั่นใหม่ว่า 2.8.22 เพราะเวอร์ชั่นใหม่กว่าจะแนะนำให้ใช้ Multi AZ แทน

รายละเอียดเพิ่มเติมเกี่ยวกับ AOF ได้เขียนไว้ใน AWS Official Document แล้ว ใครสนใจก็เข้าไปอ่านกันได้ครับ

ในกรณีที่ On Cluster mode

ในกรณีที่ On Cluster mode เราสามารเพิ่มหรือลดจำนวน Shard node ได้ที่ 1-15 ตัว
และจะมีการให้บิรการแค่ Endpoint เดียวสำหรับการเชื่อมต่อไปยัง Redis Cluster
และหากต้องการ On Cluster mode จำเป็นต้องเปิด Multi AZ ครับ

สถานการณ์ที่ควร On Cluster mode ได้แก่กรณีต่อไปนี้ครับ

1.ต้องการ Scale out node ที่อยู่ใน Redis Cluster

ในกรณีที่คิดว่า การโหลดของ Writer/Reader ที่จะเกิดขึ้นใน Redis มีโอกาสที่จะเพิ่มมากขึ้น แล้วเราต้องการที่จะ Scale out node เราจะ On Cluster mode เพิ่มให้สามารถเพิ่มหรือลดจำนวนของ Shard ได้

โดยเฉพาะ Primary node ที่ไว้สำหรับ Writer จะสามารถสร้างได้ 1 ตัวต่อ 1 Shard เราจึงสามารถ Scale out ได้แค่การเพิ่มจำนวน Shard เท่านั้น

และ Replica node ที่ไว้สำหรับ Reader ก็สามารถสร้างได้มากสุดแค่ 5 ตัวต่อ 1 Shard หากเราต้องการเพิ่มให้มากกว่า 5 ตัว สามารถทำได้แค่การเพิ่มจำนวน Shard เท่านั้น

2.ต้องการลด Downtime ของ Primary node ให้เหลือน้อยที่สุด

Redis Cluster ที่ทำการเปิดการใช้งาน Multi AZ นั้น เมื่อเกิดปัญหาใน AZ ที่ทำให้ Primary node ที่อยู่ใน Shard เกิดการ Down ละก็ ElastiCache จะทำการตรวจจับปัญหานั้นแล้วเลื่อนขั้นให้ Replica node กลายเป็น Primary node เพื่อฟื้นฟู Service ให้กลับมาทำงานได้อย่างปกติ

แต่ว่า หากมี Shard แค่ 1 แล้วเกิดปัญหาใน AZ ล่ะก็ Primary node จะคงสภาพมีอยู่ 0 ตัวจนกว่า จะเลื่อนขั้น Node เสร็จ ทำให้ระหว่างนั้นจะไม่สามารถประมวลผลการเขียนข้อมูลได้

หากเราไม่ต้องการให้เกิดปัญหาเหล่านี้ขึ้น ผมแนะนำให้เรา On Cluster mode และสร้างจำนวน Shard หลายๆตัวไว้ และติดตั้ง Primary node ไว้ในหลายๆ AZ
พอทำเช่นนี้แล้ว จะทำให้สามารถลด Downtime ของ Primary node ให้เหลือน้อยที่สุด เพราะหากเกิดปัญหาใน AZ ทำให้ Primary node ที่อยู่ใน Shard เกิดการ Down เราก็จะยังสามารถใช้ Primary node ตัวอื่นได้อยู่นั่นเอง

ทิ้งท้าย

หวังว่าท่านผู้อื่นจะได้ความรู้เกี่ยวกับการเปิด/ปิด Cluster mode ไปได้ไม่มากก็น้อยกันนะครับ

ซึ่งฟังก์ชันนี้เป็นฟังก์ชันเฉพาะของ Redis ที่ไม่มีใน Service ทำให้หลายคนอาจจะไม่เข้าใจกันได้ยากบ้าง(ผมเองตอนแรกก็งงเหมือนกันครับ)
จึงเขียนบทความนี้ขึ้นมาเพื่อสรุปให้ทุกคนเข้าใจกันได้ง่ายๆนั่นเองครับ

แล้วเจอกันในบทความต่อไป ต้า ครับ สวัสดีครับ

บทความต้นฉบับ

ElastiCache for Redisのクラスターモードについて調べてみる | DevelopersIO

บทความอ้างอิง