มีการนำเสนอการเปิดตัว DBMS rqlite 6.0 แบบกระจายซึ่งใช้ SQLite เป็นเครื่องมือจัดเก็บข้อมูลและช่วยให้คุณสามารถจัดระเบียบการทำงานของคลัสเตอร์ของที่เก็บข้อมูลแบบซิงโครไนซ์ หนึ่งในคุณสมบัติของ rqlite คือความง่ายในการติดตั้ง การใช้งาน และการบำรุงรักษาพื้นที่จัดเก็บข้อมูลที่ทนต่อข้อผิดพลาดแบบกระจาย ซึ่งค่อนข้างคล้ายกับ etcd และ Consul แต่ใช้แบบจำลองข้อมูลเชิงสัมพันธ์แทนรูปแบบคีย์/ค่า รหัสโครงการเขียนด้วยภาษา Go และเผยแพร่ภายใต้ใบอนุญาต MIT
เพื่อให้โหนดทั้งหมดอยู่ในสถานะซิงโครไนซ์ จึงมีการใช้อัลกอริธึมฉันทามติ Raft Rqlite ใช้ไลบรารี SQLite ดั้งเดิมและไดรเวอร์ go-sqlite3 มาตรฐาน นอกเหนือจากนั้นยังมีเลเยอร์ที่เปิดตัวซึ่งประมวลผลคำขอของไคลเอ็นต์ ดำเนินการจำลองแบบไปยังโหนดอื่น และติดตามความสำเร็จของความเห็นพ้องต้องกันในการเลือกโหนดชั้นนำ
การเปลี่ยนแปลงฐานข้อมูลสามารถทำได้โดยโหนดที่เลือกเป็นผู้นำเท่านั้น แต่การเชื่อมต่อที่มีการดำเนินการเขียนสามารถส่งไปยังโหนดอื่นในคลัสเตอร์ได้ ซึ่งจะส่งคืนที่อยู่ของผู้นำเพื่อทำซ้ำคำขอ (ในเวอร์ชันถัดไป สัญญาว่าจะเพิ่มการส่งต่อคำขอไปยังผู้นำโดยอัตโนมัติ) จุดเน้นหลักอยู่ที่ความทนทานต่อข้อผิดพลาด ดังนั้น DBMS จะปรับขนาดเฉพาะกับการดำเนินการอ่านเท่านั้น และการดำเนินการเขียนถือเป็นจุดคอขวด เป็นไปได้ที่จะรันคลัสเตอร์ rqlite จากโหนดเดียว และโซลูชันนี้สามารถใช้เพื่อให้การเข้าถึง SQLite ผ่าน HTTP โดยไม่ต้องระบุความทนทานต่อข้อผิดพลาด
ข้อมูล SQLite บนแต่ละโหนดไม่ได้จัดเก็บไว้ในไฟล์ แต่อยู่ในหน่วยความจำ ที่ระดับเลเยอร์ที่มีการใช้งานโปรโตคอล Raft บันทึกของคำสั่ง SQLite ทั้งหมดที่นำไปสู่การเปลี่ยนแปลงในฐานข้อมูลจะถูกเก็บไว้ บันทึกนี้ใช้ในระหว่างการจำลองแบบ (การจำลองที่ระดับของการสร้างคำขอซ้ำบนโหนดอื่น) การเริ่มต้นโหนดใหม่ หรือการกู้คืนจากการสูญเสียการเชื่อมต่อ เพื่อลดขนาดของบันทึก จะใช้การบรรจุอัตโนมัติซึ่งเริ่มต้นหลังจากการเปลี่ยนแปลงตามจำนวนที่ระบุและนำไปสู่การแก้ไขสแน็ปช็อตบนดิสก์ ซึ่งเกี่ยวข้องกับการเริ่มเก็บบันทึกใหม่ (สถานะของฐานข้อมูลในหน่วยความจำ จะเหมือนกับสแน็ปช็อต + บันทึกการเปลี่ยนแปลงสะสม)
คุณสมบัติของ rqlite:
- ปรับใช้คลัสเตอร์ได้ง่าย โดยไม่จำเป็นต้องติดตั้ง SQLite แยกต่างหาก
- ความสามารถในการรับที่เก็บข้อมูล SQL ที่จำลองแบบอย่างรวดเร็ว
- พร้อมใช้งานในโครงการทำงาน (Production-grade)
- การมีอยู่ของ HTTP(S) API ที่ช่วยให้คุณอัปเดตข้อมูลในโหมดแบตช์และกำหนดโหนดนำของคลัสเตอร์ นอกจากนี้ยังมีอินเทอร์เฟซบรรทัดคำสั่งและความสามารถในการใช้ไลบรารีไคลเอนต์ต่างๆ ที่สร้างขึ้นสำหรับ SQLite
- ความพร้อมใช้งานของบริการสำหรับการระบุโหนดอื่นๆ ทำให้คุณสามารถสร้างคลัสเตอร์แบบไดนามิกได้
- รองรับการเข้ารหัสการแลกเปลี่ยนข้อมูลระหว่างโหนด
- ความสามารถในการกำหนดระดับการตรวจสอบความเกี่ยวข้องและความสอดคล้องของข้อมูลเมื่ออ่าน
- ความสามารถเสริมในการเชื่อมต่อโหนดในโหมดอ่านอย่างเดียว ซึ่งไม่ได้มีส่วนร่วมในการกำหนดฉันทามติ และใช้เพื่อเพิ่มความสามารถในการปรับขนาดของคลัสเตอร์สำหรับการดำเนินการอ่าน
- รองรับรูปแบบธุรกรรมของคุณเองตามคำสั่งรวมในคำขอเดียว (ไม่รองรับธุรกรรมตาม BEGIN, COMMIT, ROLLBACK, SAVEPOINT และ RELEASE)
- รองรับการสร้างการสำรองข้อมูลแบบ hot
เวอร์ชันใหม่นำเสนอการเปลี่ยนแปลงทางสถาปัตยกรรมที่สำคัญซึ่งมีจุดมุ่งหมายเพื่อเพิ่มความน่าเชื่อถือของคลัสเตอร์โดยการปรับปรุงกระบวนการกำหนดเส้นทางคำขออ่านและเขียนไปยังโหนดคลัสเตอร์ที่ถูกต้อง ขณะนี้โหนด rqlite สามารถมัลติเพล็กซ์การเชื่อมต่อแบบลอจิคัลหลายรายการระหว่างกันโดยใช้การเชื่อมต่อ TCP ที่สร้างขึ้นระหว่างโหนดโดยโปรโตคอล Raft หากคำขอต้องการสิทธิ์ของผู้นำ แต่ถูกส่งไปยังโหนดรอง โหนดรองสามารถกำหนดที่อยู่ของผู้นำและส่งต่อไปยังไคลเอนต์โดยไม่ต้องทำการคำนวณฉันทามติ Raft
การเปลี่ยนแปลงนี้ยังขจัดความจำเป็นในการซิงโครไนซ์ข้อมูลเมตาที่แยกต่างหาก และกำจัดการจัดการสถานะ Raft และข้อมูลเมตาที่แยกจากกัน ขณะนี้โหนดรองส่งคำขอไปยังโหนดผู้นำเมื่อจำเป็นเท่านั้น เมื่อพวกเขาต้องการค้นหาที่อยู่ของโหนดผู้นำ API ให้ความสามารถในการรับข้อมูลเกี่ยวกับสถานะของโหนดอื่นๆ ในคลัสเตอร์ มีการเพิ่มคำสั่ง ".sysdump" ลงในอินเทอร์เฟซบรรทัดคำสั่ง
ที่มา: opennet.ru