ระบบแคชและจัดเก็บข้อมูลในหน่วยความจำ Dragonfly เปิดตัวแล้ว ซึ่งจัดการข้อมูลในรูปแบบคีย์/ค่า และสามารถใช้เป็นโซลูชันน้ำหนักเบาสำหรับการเร่งการทำงานของไซต์ที่มีการโหลดสูง การแคชการสืบค้นที่ช้าไปยัง DBMS และข้อมูลระดับกลางใน RAM Dragonfly รองรับโปรโตคอล Memcached และ Redis ซึ่งช่วยให้คุณใช้ไลบรารีไคลเอนต์ที่มีอยู่และถ่ายโอนโปรเจ็กต์โดยใช้ Memcached และ Redis ไปยัง Dragonfly โดยไม่ต้องแก้ไขโค้ด
เมื่อเปรียบเทียบกับ Redis แล้ว Dragonfly มีประสิทธิภาพเพิ่มขึ้น 2 เท่า (6 ล้านคำขอต่อวินาที) สำหรับปริมาณงานทั่วไปในสภาพแวดล้อม Amazon EC16 c25gn.3.8xlarge เมื่อเปรียบเทียบกับ Memcached ในสภาพแวดล้อม AWS c6gn.16xlarge แล้ว Dragonfly สามารถดำเนินการคำขอเขียนได้มากขึ้น 4.7 เท่าต่อวินาที (3.8 ล้านต่อ 806) และคำขออ่านเพิ่มขึ้น 1.77 เท่าต่อวินาที (3.7 ล้านต่อ 2.1 ล้าน)
ในการทดสอบการจัดเก็บข้อมูลขนาด 5 GB Dragonfly ต้องการหน่วยความจำน้อยกว่า Redis ถึง 30% เมื่อสร้างสแนปชอตด้วยคำสั่ง "bgsave" การใช้หน่วยความจำจะเพิ่มขึ้น แต่ในช่วงเวลาสูงสุดจะยังคงน้อยกว่าใน Redis เกือบสามเท่าและการดำเนินการบันทึกสแน็ปช็อตนั้นเร็วกว่ามาก (ในการทดสอบสแน็ปช็อตใน Dragonfly เขียนใน 30 วินาทีในขณะที่ Redis - ใน 42 วินาที)
ประสิทธิภาพสูงเกิดขึ้นได้ด้วยสถาปัตยกรรมแบบมัลติเธรดที่ไม่มีการแชร์ทรัพยากร (ไม่แชร์อะไรเลย) ซึ่งหมายความว่าแต่ละเธรดจะได้รับการจัดสรรโปรเซสเซอร์แยกกันโดยมีส่วนของข้อมูลเป็นของตัวเอง โดยทำงานโดยไม่มี mutexes และ spin lock เพื่อให้แน่ใจว่าเป็นอะตอมมิกเมื่อทำงานกับหลายคีย์ จึงมีการใช้การล็อค VLL แบบน้ำหนักเบา เพื่อจัดเก็บข้อมูลในหน่วยความจำอย่างมีประสิทธิภาพ จึงมีการใช้โครงสร้าง dashtable ซึ่งใช้ประเภทของตารางแฮชที่แบ่งพาร์ติชัน
คุณสมบัติบางอย่างของแมลงปอ:
- โหมดแคชซึ่งจะแทนที่ข้อมูลเก่าด้วยข้อมูลใหม่โดยอัตโนมัติหลังจากหน่วยความจำว่างหมด
- รองรับการเชื่อมโยงข้อมูลตลอดอายุการใช้งานซึ่งถือว่าข้อมูลมีความเกี่ยวข้อง
- รองรับการล้างสถานะการจัดเก็บข้อมูลไปยังดิสก์ในพื้นหลังเพื่อการกู้คืนในภายหลังหลังจากรีสตาร์ท
- การมีอยู่ของคอนโซล HTTP (เชื่อมโยงกับพอร์ต TCP 6379) สำหรับการจัดการระบบและ API สำหรับการส่งคืนตัววัด ซึ่งเข้ากันได้กับ Prometheus
- รองรับคำสั่ง 185 Redis ซึ่งเทียบเท่ากับฟังก์ชันการทำงานของ Redis 5 โดยประมาณ
- รองรับคำสั่ง Memcached ทั้งหมด ยกเว้น CAS (ตรวจสอบและตั้งค่า)
- รองรับการดำเนินการแบบอะซิงโครนัสสำหรับการสร้างสแน็ปช็อต
- การใช้หน่วยความจำที่คาดการณ์ได้
- ล่าม Lua 5.4 ในตัว
- รองรับประเภทข้อมูลที่ซับซ้อน เช่น แฮช ชุด รายการ (ZSET, HSET, LIST, SETS และ STRING) และข้อมูล JSON
- รองรับการจำลองแบบพื้นที่จัดเก็บข้อมูลสำหรับความทนทานต่อข้อผิดพลาดและการปรับสมดุลโหลด
รหัส Dragonfly เขียนด้วยภาษา C/C++ และเผยแพร่ภายใต้ BSL (Business Source License) ผู้ร่วมก่อตั้ง MySQL เสนอใบอนุญาต BSL เพื่อเป็นทางเลือกแทนรุ่น Open Core สาระสำคัญของ BSL คือรหัสของฟังก์ชันขั้นสูงนั้นเริ่มมีให้แก้ไข แต่ในบางครั้งสามารถใช้งานได้ฟรีหากตรงตามเงื่อนไขเพิ่มเติมเท่านั้น ซึ่งจำเป็นต้องซื้อใบอนุญาตเชิงพาณิชย์เพื่อหลีกเลี่ยง ข้อกำหนดสิทธิ์การใช้งานเพิ่มเติมสำหรับโครงการ Dragonfly กำหนดให้ต้องโอนรหัสไปยังสิทธิ์การใช้งาน Apache 2.0 ในวันที่ 15 มีนาคม 2028 จนถึงขณะนี้ ใบอนุญาตอนุญาตให้ใช้รหัสเพียงเพื่อรับรองการทำงานของบริการและผลิตภัณฑ์เท่านั้น แต่ห้ามมิให้ใช้เพื่อสร้างบริการคลาวด์แบบชำระเงินที่ทำหน้าที่เป็นส่วนเสริมของ Dragonfly
เวอร์ชัน Dragonfly 1.0 มีความโดดเด่นในด้านการดำเนินการสนับสนุนการจำลองข้อมูลจากเซิร์ฟเวอร์หลักไปยังเซิร์ฟเวอร์รอง อย่างไรก็ตาม สามารถกำหนดค่า Dragonfly เพื่อใช้เป็นที่จัดเก็บข้อมูลรองที่รับข้อมูลจากเซิร์ฟเวอร์หลักโดยอิงจาก Dragonfly หรือจาก Redis API การจัดการการจำลองเข้ากันได้กับ Redis และอิงตามการใช้คำสั่ง ROLE และ REPLICAOF (SLAVEOF)
ที่มา: opennet.ru