ความสามารถในการปรับขนาด
มีสองวิธีทั่วไปในการปรับขนาดเซิร์ฟเวอร์: การปรับขนาดแนวตั้งและการปรับขนาดแนวนอน การปรับขนาดแนวตั้งหรือการปรับขนาดขึ้นคือที่ที่คุณเพิ่มพลังงานและทรัพยากรให้กับเซิร์ฟเวอร์ของคุณ เช่น CPU หน่วยความจำ และพื้นที่เก็บข้อมูลมากขึ้น ซึ่งมีค่าใช้จ่ายสูง ในทางกลับกัน การปรับขนาดแนวนอนเป็นการเพิ่มโหนดหลายโหนดลงในกลุ่มทรัพยากรที่คุณมีอยู่ สิ่งนี้เรียกว่าการขยายขนาดออก ดังนั้น ขึ้นอยู่กับข้อจำกัดและข้อกำหนดของคุณ คุณจะมีอินสแตนซ์เซิร์ฟเวอร์เดียวที่ใหญ่กว่าหรือปรับใช้โหนดเซิร์ฟเวอร์หลายโหนดก็ขึ้นอยู่กับคุณ
สมมติว่าคุณมี RAM 100 GB และต้องเก็บข้อมูล 200 GB ในกรณีนี้ คุณมีสองทางเลือก:
- ขยายขนาดโดยเพิ่ม RAM ให้กับระบบ
- ปรับขนาดโดยเพิ่มอินสแตนซ์เซิร์ฟเวอร์อื่นที่มี RAM ขนาด 100 GB
หากคุณมี RAM ถึงขีดจำกัดสูงสุดภายในโครงสร้างพื้นฐานของคุณแล้ว การปรับขนาดออกคือแนวทางที่เหมาะสมที่สุด นอกจากนี้ การปรับขนาดออกจะเพิ่มปริมาณงานของฐานข้อมูลด้วยอัตรากำไรขั้นต้นที่มาก
เรดดิสชาร์ดดิง
เป็นที่ทราบกันดีอยู่แล้วว่า Redis ทำงานบนเธรดเดียว ดังนั้น Redis จึงไม่สามารถใช้ CPU หลายคอร์ของเซิร์ฟเวอร์ของคุณในการประมวลผลคำสั่งได้ ดังนั้น การเพิ่มแกน CPU มากขึ้นไม่ได้ให้ปริมาณงานหรือประสิทธิภาพมากนักกับ Redis ไม่ใช่กรณีที่มีการแบ่งข้อมูลของคุณระหว่างอินสแตนซ์เซิร์ฟเวอร์หลายรายการ การเพิ่มเซิร์ฟเวอร์หลายตัวและการกระจายชุดข้อมูลระหว่างชุดเหล่านั้นทำให้สามารถประมวลผลคำขอของไคลเอ็นต์แบบขนานได้ ซึ่งจะเพิ่มปริมาณงาน นอกจากนี้ ประสิทธิภาพโดยรวมอาจเพิ่มขึ้นใกล้เคียงกับเชิงเส้น
วิธีการแยกหรือกระจายข้อมูลระหว่างเซิร์ฟเวอร์หลายเครื่องโดยคำนึงถึงการปรับขนาดนี้เรียกว่า การแบ่งส่วน . เรียกเซิร์ฟเวอร์ทั้งหมดที่เก็บข้อมูลบางส่วน เศษ .
การแยกย่อยทำได้อย่างไร — การแบ่งส่วนอัลกอริทึม
ข้อกังวลหลักประการหนึ่งของการชาร์ดดิ้งคือวิธีค้นหาคีย์ที่กำหนดในโหนด Redis หลายโหนด เนื่องจากคีย์ที่กำหนดสามารถจัดเก็บไว้ในชาร์ดที่มีอยู่ การสอบถามชาร์ดทั้งหมดเพื่อค้นหาคีย์เฉพาะจึงไม่ใช่ตัวเลือกที่ดีที่สุด ดังนั้น ควรมีวิธีแมปแต่ละคีย์กับชาร์ดเฉพาะ และ Redis ใช้กลยุทธ์การแบ่งชาร์ดแบบอัลกอริทึม
วิธีการทั่วไปคือการคำนวณค่าแฮชโดยใช้ชื่อคีย์ Redis และโมดูโล จากนั้นหารด้วยเศษ Redis ที่มีอยู่ในระบบ
HASH_SLOT = CRC16(คีย์) ม็อด 16384เป็นทางออกที่ดีตราบใดที่จำนวนเศษทั้งหมดคงที่ เมื่อใดก็ตามที่คุณเพิ่มอินสแตนซ์เซิร์ฟเวอร์ Reids ใหม่ ค่าผลลัพธ์สำหรับคีย์ที่กำหนดอาจเปลี่ยนแปลงเนื่องจากจำนวนชาร์ดทั้งหมดเพิ่มขึ้น มันจะจบลงด้วยการสอบถาม Redis shard ที่ไม่ถูกต้อง ดังนั้น คุณควรทำตามขั้นตอนการแบ่งส่วนย่อยใหม่โดยการคำนวณส่วนย่อยใหม่สำหรับแต่ละคีย์และถ่ายโอนข้อมูลไปยังเซิร์ฟเวอร์ที่ถูกต้อง ซึ่งยุ่งยากและไม่ใช่งานเล็กน้อยหากจำนวนส่วนย่อยทั้งหมดของคุณเพิ่มขึ้นเป็นครั้งคราว
Redis ใช้เอนทิตีเชิงตรรกะใหม่ที่เรียกว่า ช่องแฮช เพื่อป้องกันปัญหานี้ มีช่องแฮชหลายช่องสำหรับชาร์ดที่กำหนด และช่องแฮชช่องเดียวสามารถเก็บคีย์ Redis ได้หลายคีย์ มีช่องแฮช 16384 ช่องในคลัสเตอร์ฐานข้อมูล Redis ซึ่งไม่เปลี่ยนแปลง การแบ่งโมดูโลทำได้โดยใช้จำนวนช่องแฮชแทนการนับเศษ โดยจะระบุตำแหน่งที่ถูกต้องของช่องแฮชสำหรับคีย์ที่ระบุ แม้ว่าจำนวนของชาร์ดจะเพิ่มขึ้นก็ตาม ซึ่งช่วยลดความซับซ้อนของกระบวนการ Resharding โดยการย้ายช่องแฮชจากชาร์ดหนึ่งไปยังชาร์ดใหม่ที่แบ่งข้อมูลในอินสแตนซ์ Redis ต่างๆ ตามความต้องการ
ประโยชน์ของ Redis Sharding
Redis sharding ช่วยให้ระบบฐานข้อมูลของคุณได้รับประโยชน์หลายประการโดยมีการเปลี่ยนแปลงเพียงเล็กน้อย
ปริมาณงานสูง
เนื่องจาก Redis เป็นเธรดเดี่ยว การประมวลผลคำขอไคลเอ็นต์หลายรายการจึงไม่สามารถประมวลผลแบบขนานโดยใช้แกน CPU หลายแกนได้ ดังนั้น การเพิ่มชาร์ดใหม่หรืออินสแตนซ์ของเซิร์ฟเวอร์รับประกันได้ว่าคุณสามารถดำเนินการ Redis พร้อมกันได้ มันเพิ่มการดำเนินการต่อวินาทีในฐานข้อมูล Redis ของคุณ ซึ่งในที่สุดจะให้ปริมาณงานสูง
ความพร้อมใช้งานสูง
ด้วยวิธีการแบ่งส่วน คลัสเตอร์ Redis สามารถสร้างสถาปัตยกรรมจำลองต้นแบบที่รับประกันความพร้อมใช้งานและความทนทานสูง
อ่านแบบจำลอง
Sharding ช่วยให้คุณสามารถเก็บสำเนาข้อมูลของคุณได้อย่างถูกต้องและจัดเตรียมการอ่านผ่านอินสแตนซ์ Redis ที่แยกจากกัน ซึ่งจะเพิ่มประสิทธิภาพของการดำเนินการค้นหาแบบอ่านของคุณ
นอกเหนือจากประโยชน์เหล่านี้แล้ว การชาร์ดอาจทำให้เกิดสถานการณ์สมองแตกเมื่อคุณมีจำนวนชาร์ดเป็นเลขคู่ในคลัสเตอร์ Redis ดังนั้น ขอแนะนำให้เก็บชาร์ดไว้ในคลัสเตอร์ Redis เป็นจำนวนคี่
บทสรุป
กล่าวโดยสรุป Redis Sharding กำลังแยกข้อมูลระหว่างเซิร์ฟเวอร์หลายเครื่อง ซึ่งช่วยให้ปรับขนาดและปริมาณงานสูงสำหรับฐานข้อมูลของคุณ ตามที่กล่าวไว้ Redis ใช้กลยุทธ์การชาร์ดด้วยอัลกอริทึมเพื่อชี้คำขอของลูกค้าไปยังชาร์ดที่ถูกต้อง สิ่งนี้มีข้อเสียอยู่บ้างเมื่อจำนวนเศษทั้งหมดเพิ่มขึ้น ดังนั้น แทนที่จะใช้จำนวนชาร์ดทั้งหมด Redis จะใช้จำนวนช่องแฮชเพื่อคำนวณชาร์ดที่เหมาะสม ด้วยการแนะนำการแบ่งกลุ่ม ฐานข้อมูล Redis จึงมีความพร้อมใช้งานสูง ปริมาณงานสูง และประสิทธิภาพสูง