Cassandra Archiเทคเจอร์และปัจจัยการจำลองแบบ
⚡ สรุปอย่างชาญฉลาด
Cassandra สถาปัตยกรรมนี้กระจายข้อมูลไปยังโหนดต่างๆ โดยไม่มีจุดล้มเหลวเพียงจุดเดียว ใช้การสื่อสารแบบกอสซิปเพื่อการประสานงานและการจำลองข้อมูลเพื่อความทนทาน หน้านี้ครอบคลุมทุกส่วนประกอบ ทั้งกลยุทธ์การจำลองข้อมูล ระดับความสอดคล้อง และเส้นทางการเขียนและการอ่านภายใน
Cassandra ได้รับการออกแบบมาให้รับมือ ข้อมูลขนาดใหญ่. Cassandraคุณสมบัติหลักของคือการจัดเก็บข้อมูลบนหลายโหนดโดยไม่มีจุดล้มเหลวเพียงจุดเดียว
สาเหตุที่เป็นแบบนี้ Cassandraสถาปัตยกรรมของมันคือความล้มเหลวของฮาร์ดแวร์สามารถเกิดขึ้นได้ทุกเมื่อ โหนดใดๆ ก็สามารถหยุดทำงานได้ ในกรณีที่เกิดความล้มเหลว ข้อมูลที่เก็บไว้ในโหนดอื่นจะสามารถใช้งานได้ ดังนั้น Cassandra ได้รับการออกแบบด้วยสถาปัตยกรรมแบบกระจาย
Cassandra จัดเก็บข้อมูลบนโหนดที่แตกต่างกันด้วยสถาปัตยกรรมแบบกระจายแบบเพียร์ทูเพียร์
โหนดทั้งหมดแลกเปลี่ยนข้อมูลกันโดยใช้ โปรโตคอลการนินทา- การนินทาเป็นโปรโตคอลใน Cassandra โดยที่โหนดสามารถสื่อสารระหว่างกันได้
องค์ประกอบของ 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:

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

ปัจจัยการจำลองแบบจะกำหนดจำนวนสำเนาที่มีอยู่ จำนวนสำเนาเหล่านั้นที่จะต้องตอบสนองต่อคำขอที่กำหนดนั้นเป็นการตั้งค่าแยกต่างหาก ซึ่งจะอธิบายต่อไป
ระดับความสม่ำเสมอใน Cassandra
ระดับความสม่ำเสมอจะถูกกำหนดต่อการสืบค้นข้อมูลแต่ละครั้ง ไม่ใช่ต่อคลัสเตอร์ ซึ่งเป็นสิ่งที่ทำให้... Cassandra สามารถปรับแต่งได้ โดยระบุจำนวนสำเนาที่ต้องยืนยันการเขียน หรือตอบสนองต่อการอ่าน ก่อนที่ตัวประสานงานจะตอบกลับไปยังไคลเอ็นต์ ระดับต่ำจะตอบกลับได้เร็วกว่า ระดับสูงจะส่งข้อมูลที่ทันสมัยกว่าอย่างแน่นอน
| ชั้น | พฤติกรรม | การใช้งานทั่วไป |
|---|---|---|
| ONE | ต้องมีสำเนาอย่างน้อยหนึ่งชุดที่ตอบสนอง | ระบบบันทึกข้อมูลที่มีประสิทธิภาพสูง ซึ่งยอมรับได้ว่าอาจมีข้อมูลที่เก่าบ้างเป็นครั้งคราว |
| โควรัม | สำเนาส่วนใหญ่ทั้งหมดจะต้องตอบสนอง โดยคำนวณจาก (RF / 2) + 1 | ตัวเลือกอเนกประสงค์ที่ให้ความสมดุลระหว่างความสม่ำเสมอและความพร้อมใช้งาน |
| โลคัล_ควอรัม | สำเนาส่วนใหญ่ภายในศูนย์ข้อมูลท้องถิ่นจะต้องตอบสนอง | คลัสเตอร์ที่มีศูนย์ข้อมูลหลายแห่ง เนื่องจากช่วยหลีกเลี่ยงความล่าช้าข้ามภูมิภาค |
| ทั้งหมด | สำเนาทุกชุดต้องตอบสนอง | หายากมาก หากโหนดใดโหนดหนึ่งล่ม การร้องขอจะล้มเหลวโดยสิ้นเชิง |
| ใด ๆ (เขียนอย่างเดียว) | การบอกใบ้ถึงการส่งต่อถือเป็นความสำเร็จ แม้ว่าจะไม่มีของจำลองให้พบก็ตาม | ความสามารถในการเขียนสูงสุด โดยที่ความทนทานอาจไม่จำเป็นต้องเข้มงวดมากนัก |
ความสอดคล้องที่แข็งแกร่งจะเกิดขึ้นได้เมื่อระดับการอ่านบวกกับระดับการเขียนเกินกว่าปัจจัยการจำลองแบบ สำหรับปัจจัยการจำลองแบบสาม การเขียนที่ระดับ QUORUM และการอ่านที่ระดับ QUORUM จะเป็นไปตามกฎนั้น เพราะสองบวกสองเท่ากับสาม แต่การเขียนที่ระดับ ONE และการอ่านที่ระดับ ONE จะไม่เป็นไปตามกฎนั้น และการอ่านอาจส่งคืนค่าที่เก่ากว่าได้
เมื่อไม่สามารถเข้าถึงสำเนาได้ ตัวประสานงานจะจัดเก็บข้อมูล เปรย และเล่นซ้ำอีกครั้งเมื่อโหนดกลับมา ซึ่งเป็นวิธีการทำงานของด่าน ANY และอีกหลายด่าน Cassandraพฤติกรรมการเยียวยาตนเอง
เขียน Operaอยู่ใน Cassandra
ผู้ประสานงานส่งคำขอเขียนไปยังเรพลิกา หากแบบจำลองทั้งหมดหมดลง พวกเขาจะได้รับคำขอเขียนโดยไม่คำนึงถึงระดับความสอดคล้องกัน
ระดับความสม่ำเสมอ กำหนดจำนวนโหนดที่จะตอบกลับพร้อมกับการรับทราบความสำเร็จ
โหนดจะตอบกลับพร้อมกับการรับทราบความสำเร็จหากข้อมูลถูกเขียนไปยังบันทึกการคอมมิตสำเร็จและ memTable.
ตัวอย่างเช่น ในศูนย์ข้อมูลเดียวที่มีปัจจัยการจำลองเท่ากับสาม แบบจำลองสามรายการจะได้รับคำขอเขียน หากระดับความสอดคล้องเป็นหนึ่ง มีเพียงแบบจำลองเดียวเท่านั้นที่จะตอบกลับพร้อมกับการรับทราบความสำเร็จ และอีกสองแบบจำลองที่เหลือจะยังคงเฉยๆ
สมมติว่าหากเรพลิกาสองเรพลิกาที่เหลือสูญเสียข้อมูลเนื่องจากการดาวน์โหนดหรือปัญหาอื่น ๆ Cassandra จะทำให้แถวมีความสม่ำเสมอโดยกลไกการซ่อมแซมในตัวค่ะ Cassandra.
ต่อไปนี้จะอธิบายว่ากระบวนการเขียนเกิดขึ้นได้อย่างไร Cassandra,
- เมื่อคำขอเขียนมาถึงโหนด ก่อนอื่น โหนดจะบันทึกลงในบันทึกการคอมมิต
- แล้วก็ Cassandra เขียนข้อมูลลงในตาราง mem ข้อมูลที่เขียนในตาราง mem ในแต่ละคำขอเขียนยังเขียนในบันทึกการคอมมิตแยกกันด้วย Mem-table เป็นข้อมูลที่เก็บไว้ชั่วคราวในหน่วยความจำในขณะที่บันทึก Commit จะบันทึกบันทึกธุรกรรมเพื่อการสำรองข้อมูล
- เมื่อ mem-table เต็ม ข้อมูลจะถูกล้างไปยังไฟล์ข้อมูล SSTable

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

