โค้ดยิม/หลักสูตรจาวา/All lectures for TH purposes/Apache Cassandra: การจัดเก็บข้อมูลในคลัสเตอร์

Apache Cassandra: การจัดเก็บข้อมูลในคลัสเตอร์

มีอยู่

5.1 การกระจายข้อมูล

ลองพิจารณาวิธีการกระจายข้อมูลโดยขึ้นอยู่กับคีย์ระหว่างโหนดคลัสเตอร์ Cassandra ช่วยให้คุณสามารถกำหนดกลยุทธ์การกระจายข้อมูลได้ กลยุทธ์แรกดังกล่าวจะกระจายข้อมูลโดยขึ้นอยู่กับค่าคีย์ md5 ซึ่งเป็นตัวแบ่งพาร์ติชันแบบสุ่ม ประการที่สองคำนึงถึงการแสดงบิตของคีย์เอง - มาร์กอัปลำดับ (ตัวแบ่งพาร์ติชันที่เรียงลำดับไบต์)

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

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

อย่างที่ฉันพูด RandomPartitioner คำนวณ md5 128 บิตสำหรับแต่ละคีย์ ในการพิจารณาว่าข้อมูลจะถูกเก็บไว้ที่โหนดใด เพียงตรวจสอบป้ายกำกับทั้งหมดของโหนดจากน้อยไปหาใหญ่ และเมื่อค่าของป้ายกำกับมากกว่าค่าของคีย์ md5 โหนดนี้พร้อมกับ a จำนวนโหนดที่ตามมา (ตามลำดับป้ายกำกับ) ถูกเลือกสำหรับการจัดเก็บ จำนวนโหนดที่เลือกทั้งหมดต้องเท่ากับปัจจัยการจำลองแบบ ระดับการจำลองถูกตั้งค่าสำหรับแต่ละคีย์สเปซและอนุญาตให้คุณปรับความซ้ำซ้อนของข้อมูล (ความซ้ำซ้อนของข้อมูล)

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

นี่คือภาพประกอบการใช้ยูทิลิตี้ nodetool ในตัวเพื่อแสดงวงแหวนคลัสเตอร์ของ 6 โหนดที่มีป้ายกำกับที่มีระยะห่างเท่าๆ กัน

5.2 ความสอดคล้องของข้อมูลเมื่อเขียน

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

สำหรับแต่ละคำขอ ทั้งสำหรับการอ่านและการเขียน คุณสามารถกำหนดระดับความสอดคล้องของข้อมูลได้

สำหรับการเขียนระดับนี้จะส่งผลต่อจำนวนของโหนดจำลองที่จะรอการยืนยันการดำเนินการสำเร็จ (ข้อมูลที่เขียน) ก่อนที่จะคืนการควบคุมให้กับผู้ใช้ สำหรับบันทึก มีระดับความสอดคล้องเหล่านี้:

  • หนึ่ง - ผู้ประสานงานส่งคำขอไปยังโหนดจำลองทั้งหมด แต่หลังจากรอการยืนยันจากโหนดแรก จะคืนการควบคุมให้กับผู้ใช้
  • สอง - เหมือนกัน แต่ผู้ประสานงานรอการยืนยันจากสองโหนดแรกก่อนที่จะกลับการควบคุม
  • สาม - คล้ายกัน แต่ผู้ประสานงานรอการยืนยันจากสามโหนดแรกก่อนที่จะกลับการควบคุม
  • QUORUM - รวบรวมองค์ประชุม: ผู้ประสานงานกำลังรอการยืนยันบันทึกจากโหนดจำลองมากกว่าครึ่ง ได้แก่ รอบ (N / 2) + 1 โดยที่ N คือระดับการจำลอง
  • LOCAL_QUORUM - ผู้ประสานงานกำลังรอการยืนยันจากโหนดจำลองมากกว่าครึ่งในศูนย์ข้อมูลเดียวกันที่ผู้ประสานงานตั้งอยู่ (อาจแตกต่างกันสำหรับแต่ละคำขอ) ช่วยให้คุณกำจัดความล่าช้าที่เกี่ยวข้องกับการส่งข้อมูลไปยังศูนย์ข้อมูลอื่นๆ ปัญหาของการทำงานกับศูนย์ข้อมูลหลายแห่งได้รับการพิจารณาในบทความนี้โดยผ่าน
  • EACH_QUORUM - ผู้ประสานงานกำลังรอการยืนยันจากโหนดจำลองมากกว่าครึ่งในแต่ละศูนย์ข้อมูลโดยอิสระ
  • ทั้งหมด - ผู้ประสานงานรอการยืนยันจากโหนดจำลองทั้งหมด
  • ใดๆ - ทำให้สามารถเขียนข้อมูลได้ แม้ว่าโหนดจำลองทั้งหมดจะไม่ตอบสนองก็ตาม ผู้ประสานงานจะรอการตอบกลับครั้งแรกจากหนึ่งในโหนดเรพพลิกา หรือเพื่อให้ข้อมูลถูกจัดเก็บโดยใช้แฮนด์ออฟที่แจ้งไว้บนผู้ประสานงาน

5.3 ความสอดคล้องของข้อมูลเมื่ออ่าน

สำหรับการอ่านระดับความสอดคล้องจะส่งผลต่อจำนวนของโหนดเรพลิกาที่จะถูกอ่าน สำหรับการอ่าน มีระดับความสอดคล้องเหล่านี้:

  • ONE - ผู้ประสานงานส่งคำขอไปยังโหนดจำลองที่ใกล้ที่สุด ส่วนที่เหลือของแบบจำลองจะถูกอ่านสำหรับการซ่อมแซมการอ่านด้วยความน่าจะเป็นที่ระบุในการกำหนดค่าคาสแซนดรา
  • TWOเหมือนกัน แต่ผู้ประสานงานส่งคำขอไปยังโหนดที่ใกล้ที่สุดสองโหนด เลือกค่าที่มีการประทับเวลาที่ใหญ่ที่สุด
  • สาม - คล้ายกับตัวเลือกก่อนหน้า แต่มีสามโหนด
  • QUORUM - มีการรวบรวมองค์ประชุม นั่นคือ ผู้ประสานงานส่งคำขอไปยังโหนดจำลองมากกว่าครึ่ง นั่นคือ รอบ (N / 2) + 1 โดยที่ N คือระดับการจำลองแบบ
  • LOCAL_QUORUM - องค์ประชุมจะถูกรวบรวมในศูนย์ข้อมูลที่มีการประสานงานและส่งคืนข้อมูลที่มีการประทับเวลาล่าสุด
  • EACH_QUORUM - ผู้ประสานงานส่งคืนข้อมูลหลังจากการประชุมองค์ประชุมในแต่ละศูนย์ข้อมูล
  • ทั้งหมด - ผู้ประสานงานส่งคืนข้อมูลหลังจากอ่านจากโหนดจำลองทั้งหมด

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

หากจำนวนโหนดที่รับทราบการเขียนมาบวกกับจำนวนโหนดที่อ่านนั้นมากกว่าระดับการจำลอง เราจะรับประกันได้ว่าค่าใหม่จะถูกอ่านเสมอหลังการเขียน และสิ่งนี้ เรียกว่าความสม่ำเสมอที่แข็งแกร่ง (ความสม่ำเสมอที่แข็งแกร่ง) ในกรณีที่ไม่มีความสอดคล้องกัน มีความเป็นไปได้ที่การดำเนินการอ่านจะส่งคืนข้อมูลเก่า

ไม่ว่าในกรณีใด ค่าจะเผยแพร่ระหว่างเรพพลิกาในท้ายที่สุด แต่หลังจากสิ้นสุดการรอการประสานงานแล้วเท่านั้น การแพร่กระจายนี้เรียกว่าความสม่ำเสมอในที่สุด หากโหนดจำลองไม่พร้อมใช้งานทั้งหมดในขณะที่เขียน เครื่องมือการกู้คืนไม่ช้าก็เร็ว เช่น การอ่านการแก้ไขและการซ่อมแซมโหนดต่อต้านเอนโทรปีจะเข้ามามีบทบาท เพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลัง

ดังนั้น ด้วยระดับความสม่ำเสมอในการอ่านและเขียนของ QUORUM ความสม่ำเสมอที่แข็งแกร่งจะคงอยู่ตลอดไป และนี่จะเป็นความสมดุลระหว่างเวลาแฝงในการอ่านและเขียน การเขียนทั้งหมดและการอ่านเพียงครั้งเดียวจะมีความสอดคล้องกันอย่างมาก และการอ่านจะเร็วขึ้นและพร้อมใช้งานมากขึ้น กล่าวคือ จำนวนโหนดที่ล้มเหลวซึ่งการอ่านจะยังคงเสร็จสมบูรณ์อาจมากกว่า QUORUM

สำหรับการดำเนินการเขียน โหนดผู้ปฏิบัติงานจำลองทั้งหมดจะต้องใช้ เมื่อเขียน ONE อ่านทั้งหมด ก็จะมีความสม่ำเสมอที่เข้มงวดเช่นกัน และการดำเนินการเขียนจะเร็วขึ้นและความพร้อมใช้งานในการเขียนจะมีมาก เนื่องจากจะเพียงพอที่จะยืนยันเฉพาะว่าการดำเนินการเขียนนั้นเกิดขึ้นบนเซิร์ฟเวอร์อย่างน้อยหนึ่งเซิร์ฟเวอร์ ในขณะที่ การอ่านจะช้าลงและต้องใช้โหนดจำลองทั้งหมด หากแอปพลิเคชันไม่มีข้อกำหนดสำหรับความสอดคล้องที่เข้มงวด เป็นไปได้ที่จะเพิ่มความเร็วทั้งการอ่านและเขียน รวมทั้งปรับปรุงความพร้อมใช้งานโดยการตั้งค่าระดับความสอดคล้องที่ต่ำลง

ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ