Cassandra Archiเทคเจอร์และปัจจัยการจำลองแบบ

⚡ สรุปอย่างชาญฉลาด

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

  • 🕸️ การออกแบบแบบ Peer-to-Peer: ทุกโหนดมีความเท่าเทียมกันและแลกเปลี่ยนสถานะผ่านโปรโตคอลการกระจายข่าว ดังนั้นจึงไม่มีโหนดหลักที่จะล้มเหลวได้
  • 🧱 ส่วนประกอบการจัดเก็บข้อมูล: การเขียนข้อมูลจะถูกบันทึกไว้ใน commit log และ memtable จากนั้นจะถูกบันทึกไปยัง SSTable ที่ไม่สามารถเปลี่ยนแปลงได้บนดิสก์
  • 🔁 กลยุทธ์การจำลองแบบ: SimpleStrategy เหมาะสำหรับศูนย์ข้อมูลแห่งเดียว ในขณะที่ NetworkTopologyStrategy จะวางสำเนาข้อมูลไว้ในแต่ละศูนย์ข้อมูลและแต่ละแร็ค
  • 🔢 ปัจจัยการจำลองแบบ: การติดตั้งสำเนาสามชุดบนโหนดสามโหนดเป็นการตั้งค่ามาตรฐานเพื่อขจัดจุดล้มเหลวเพียงจุดเดียว
  • 🇧🇷 ระดับความสม่ำเสมอ: ระดับที่เลือกต่อการสอบถามแต่ละครั้งจะเป็นตัวกำหนดว่าต้องมีการยืนยันสำเนาข้อมูลกี่ชุดก่อนที่ไคลเอนต์จะได้รับคำตอบ
  • 🔍 เส้นทางการอ่าน: การดำเนินการโดยตรง การย่อย และการอ่านคำขอซ่อมแซมจะรวมกันเพื่อส่งคืนข้อมูลปัจจุบันและแก้ไขสำเนาข้อมูลที่ล้าสมัยอย่างเงียบ ๆ

Cassandra Archiการจำลองโครงสร้าง

Cassandra ได้รับการออกแบบมาให้รับมือ ข้อมูลขนาดใหญ่. Cassandraคุณสมบัติหลักของคือการจัดเก็บข้อมูลบนหลายโหนดโดยไม่มีจุดล้มเหลวเพียงจุดเดียว

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

Cassandra จัดเก็บข้อมูลบนโหนดที่แตกต่างกันด้วยสถาปัตยกรรมแบบกระจายแบบเพียร์ทูเพียร์

โหนดทั้งหมดแลกเปลี่ยนข้อมูลกันโดยใช้ โปรโตคอลการนินทา- การนินทาเป็นโปรโตคอลใน Cassandra โดยที่โหนดสามารถสื่อสารระหว่างกันได้

องค์ประกอบของ Cassandra Archiเทคเจอร์

มีส่วนประกอบดังต่อไปนี้ใน Cassandra Archiเทคเจอร์:

Cassandra Archiเทคเจอร์
Cassandra Archiแผนภาพเทคเจอร์

แผนภาพด้านบนแสดงโครงสร้างส่วนประกอบต่างๆ โดยโหนดต่างๆ จะอยู่ภายในศูนย์ข้อมูล ศูนย์ข้อมูลจะอยู่ภายในคลัสเตอร์ และไฟล์บันทึกการเปลี่ยนแปลง (commit log), ตารางความจำ (memtable) และไฟล์ SSTable จะอยู่ภายในแต่ละโหนด

โหนด

โหนดเป็นสถานที่เก็บข้อมูล เป็นส่วนประกอบพื้นฐานของ Cassandra.

ศูนย์ข้อมูล

ชุดของโหนดเรียกว่าศูนย์ข้อมูล โหนดจำนวนมากถูกจัดประเภทเป็นศูนย์ข้อมูล

Cluster

คลัสเตอร์เป็นแหล่งรวมของศูนย์ข้อมูลหลายแห่ง

บันทึกการกระทำ

การเขียนทุกครั้งจะถูกเขียนลงในบันทึก Commit บันทึก Commit จะถูกใช้เพื่อกู้คืนจากความผิดพลาด

Mem-ตาราง

หลังจากที่ข้อมูลถูกเขียนใน Commit log ข้อมูลจะถูกเขียนใน Mem-table ข้อมูลถูกเขียนลงใน Mem-table ชั่วคราว

SSTable

เมื่อ Mem-table มีพื้นที่ถึงเกณฑ์ที่กำหนด ข้อมูลจะถูกบันทึกไปยังไฟล์ SSTable บนดิสก์ ไฟล์ SSTable นั้นไม่สามารถเปลี่ยนแปลงได้ ดังนั้นการอัปเดตจะเขียนเวอร์ชันใหม่แทนที่จะแก้ไขเวอร์ชันเก่า และกระบวนการเบื้องหลังที่เรียกว่าการบีบอัด (compaction) จะรวมเวอร์ชันเหล่านั้นเข้าด้วยกันในภายหลังและลบแถวที่ถูกแทนที่ทิ้งไป

การจำลองข้อมูลใน Cassandra

เนื่องจากปัญหาฮาร์ดแวร์อาจเกิดขึ้นได้หรือลิงก์อาจล่มได้ตลอดเวลาระหว่างการประมวลผลข้อมูล จึงจำเป็นต้องมีวิธีแก้ไขในการสำรองข้อมูลเมื่อเกิดปัญหา ดังนั้นข้อมูลจึงถูกจำลองเพื่อให้แน่ใจว่าไม่มีจุดล้มเหลวแม้แต่จุดเดียว

Cassandra วางการจำลองข้อมูลบนโหนดที่แตกต่างกันโดยพิจารณาจากปัจจัยทั้งสองนี้

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

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

เพื่อให้แน่ใจว่าไม่มีจุดผิดพลาดเพียงจุดเดียว ปัจจัยการจำลองต้องเป็นสาม

มีกลยุทธ์การจำลองแบบสองประเภท Cassandra.

SimpleStrategy ใน Cassandra

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

นี่คือการแสดงภาพของ SimpleStrategy:

SimpleStrategy ใน Cassandra
SimpleStrategy ใน Cassandra

เครือข่ายโทโพโลยีกลยุทธ์ใน Cassandra

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

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

นี่คือการแสดงภาพของกลยุทธ์โทโพโลยีเครือข่าย:

เครือข่ายโทโพโลยีกลยุทธ์ใน Cassandra
เครือข่ายโทโพโลยีกลยุทธ์ใน Cassandra

ปัจจัยการจำลองแบบจะกำหนดจำนวนสำเนาที่มีอยู่ จำนวนสำเนาเหล่านั้นที่จะต้องตอบสนองต่อคำขอที่กำหนดนั้นเป็นการตั้งค่าแยกต่างหาก ซึ่งจะอธิบายต่อไป

ระดับความสม่ำเสมอใน Cassandra

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

ชั้น พฤติกรรม การใช้งานทั่วไป
ONE ต้องมีสำเนาอย่างน้อยหนึ่งชุดที่ตอบสนอง ระบบบันทึกข้อมูลที่มีประสิทธิภาพสูง ซึ่งยอมรับได้ว่าอาจมีข้อมูลที่เก่าบ้างเป็นครั้งคราว
โควรัม สำเนาส่วนใหญ่ทั้งหมดจะต้องตอบสนอง โดยคำนวณจาก (RF / 2) + 1 ตัวเลือกอเนกประสงค์ที่ให้ความสมดุลระหว่างความสม่ำเสมอและความพร้อมใช้งาน
โลคัล_ควอรัม สำเนาส่วนใหญ่ภายในศูนย์ข้อมูลท้องถิ่นจะต้องตอบสนอง คลัสเตอร์ที่มีศูนย์ข้อมูลหลายแห่ง เนื่องจากช่วยหลีกเลี่ยงความล่าช้าข้ามภูมิภาค
ทั้งหมด สำเนาทุกชุดต้องตอบสนอง หายากมาก หากโหนดใดโหนดหนึ่งล่ม การร้องขอจะล้มเหลวโดยสิ้นเชิง
ใด ๆ (เขียนอย่างเดียว) การบอกใบ้ถึงการส่งต่อถือเป็นความสำเร็จ แม้ว่าจะไม่มีของจำลองให้พบก็ตาม ความสามารถในการเขียนสูงสุด โดยที่ความทนทานอาจไม่จำเป็นต้องเข้มงวดมากนัก

ความสอดคล้องที่แข็งแกร่งจะเกิดขึ้นได้เมื่อระดับการอ่านบวกกับระดับการเขียนเกินกว่าปัจจัยการจำลองแบบ สำหรับปัจจัยการจำลองแบบสาม การเขียนที่ระดับ QUORUM และการอ่านที่ระดับ QUORUM จะเป็นไปตามกฎนั้น เพราะสองบวกสองเท่ากับสาม แต่การเขียนที่ระดับ ONE และการอ่านที่ระดับ ONE จะไม่เป็นไปตามกฎนั้น และการอ่านอาจส่งคืนค่าที่เก่ากว่าได้

เมื่อไม่สามารถเข้าถึงสำเนาได้ ตัวประสานงานจะจัดเก็บข้อมูล เปรย และเล่นซ้ำอีกครั้งเมื่อโหนดกลับมา ซึ่งเป็นวิธีการทำงานของด่าน ANY และอีกหลายด่าน Cassandraพฤติกรรมการเยียวยาตนเอง

เขียน Operaอยู่ใน Cassandra

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

ระดับความสม่ำเสมอ กำหนดจำนวนโหนดที่จะตอบกลับพร้อมกับการรับทราบความสำเร็จ

โหนดจะตอบกลับพร้อมกับการรับทราบความสำเร็จหากข้อมูลถูกเขียนไปยังบันทึกการคอมมิตสำเร็จและ memTable.

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

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

ต่อไปนี้จะอธิบายว่ากระบวนการเขียนเกิดขึ้นได้อย่างไร Cassandra,

  1. เมื่อคำขอเขียนมาถึงโหนด ก่อนอื่น โหนดจะบันทึกลงในบันทึกการคอมมิต
  2. แล้วก็ Cassandra เขียนข้อมูลลงในตาราง mem ข้อมูลที่เขียนในตาราง mem ในแต่ละคำขอเขียนยังเขียนในบันทึกการคอมมิตแยกกันด้วย Mem-table เป็นข้อมูลที่เก็บไว้ชั่วคราวในหน่วยความจำในขณะที่บันทึก Commit จะบันทึกบันทึกธุรกรรมเพื่อการสำรองข้อมูล
  3. เมื่อ mem-table เต็ม ข้อมูลจะถูกล้างไปยังไฟล์ข้อมูล SSTable
เขียน Operaอยู่ใน Cassandra
เขียน Operaอยู่ใน Cassandra

เนื่องจาก SSTable ไม่สามารถแก้ไขได้โดยตรง การลบจึงไม่ลบแถวนั้นทันที แต่จะมีเครื่องหมายที่เรียกว่า "ลบ" ปรากฏขึ้นก่อน หลุมฝังศพ ข้อมูลจะถูกเขียนลงไป และแถวนั้นจะหายไปก็ต่อเมื่อการบีบอัดข้อมูลทำงานหลังจากช่วงเวลาผ่อนผัน นี่คือเหตุผลที่ทำให้การลบข้อมูลจำนวนมากทำให้การอ่านช้าลงจนกว่าการบีบอัดข้อมูลจะทำงานเสร็จ

อ่าน Operaอยู่ใน Cassandra

คำขออ่านมีสามประเภทที่ผู้ประสานงานส่งไปยังเรพลิกา

  1. คำขอโดยตรง
  2. คำขอสรุป
  3. อ่านคำขอซ่อม

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

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

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

  1. การขอ เมมเทเบิล ระบบจะตรวจสอบก่อน เนื่องจากข้อมูลที่เขียนล่าสุดยังไม่ถูกบันทึกเข้าสู่ระบบ
  2. การขอ แคชแถวหากเปิดใช้งาน จะสามารถตอบคำขอทั้งหมดได้โดยไม่ต้องดำเนินการเพิ่มเติม
  3. A บานกรอง โปรแกรมนี้จะใช้ตรวจสอบไฟล์ SSTable แต่ละไฟล์ โดยจะตอบว่า "ไม่มีอยู่แน่นอน" หรือ "อาจมีอยู่" ซึ่งช่วยให้สามารถข้ามไฟล์ SSTable ส่วนใหญ่ไปได้โดยไม่ต้องอ่าน
  4. การขอ ดัชนีพาร์ติชัน และบทสรุปจะระบุตำแหน่งออฟเซ็ตไบต์ที่แน่นอนภายใน SSTable ใดๆ ที่ผ่านการตรวจสอบด้วย Bloom Filter
  5. ส่วนที่ตรงกันจากไฟล์ SSTable หลายไฟล์จะถูกรวมเข้าด้วยกัน โดยคอลัมน์ที่มีเวลาประทับล่าสุดจะเป็นคอลัมน์ที่ชนะในแต่ละคอลัมน์

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

คำถามที่พบบ่อย

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

การบีบอัดจะรวมไฟล์ SSTable หลายไฟล์เข้าเป็นไฟล์เดียวping ใช้เวอร์ชันล่าสุดของแต่ละคอลัมน์และลบแถวที่ถูกลบไปแล้ว หากไม่มีฟังก์ชันนี้ การอ่านข้อมูลจะต้องเข้าถึงไฟล์มากขึ้นเรื่อยๆ

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

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

AI สามารถอ่านเอาต์พุตและเมตริกของ nodetool ได้ดี จึงมีประสิทธิภาพในการตรวจจับพาร์ติชันที่มีการใช้งานสูง การสะสมของ tombstone และงานค้างในการบีบอัดข้อมูล การเปลี่ยนแปลงการกำหนดค่าใดๆ ที่ AI เสนอ ควรได้รับการทดสอบบนคลัสเตอร์ทดสอบก่อนเสมอ

สรุปโพสต์นี้ด้วย: