เรดดิสชาร์ดดิง

Reddi S Chard Ding



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

ความสามารถในการปรับขนาด

มีสองวิธีทั่วไปในการปรับขนาดเซิร์ฟเวอร์: การปรับขนาดแนวตั้งและการปรับขนาดแนวนอน การปรับขนาดแนวตั้งหรือการปรับขนาดขึ้นคือที่ที่คุณเพิ่มพลังงานและทรัพยากรให้กับเซิร์ฟเวอร์ของคุณ เช่น 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 จึงมีความพร้อมใช้งานสูง ปริมาณงานสูง และประสิทธิภาพสูง