โครงการ Dragonfly กำลังพัฒนาสิ่งทดแทน Redis และ Memcached ที่รวดเร็วยิ่งขึ้น

ระบบแคชในหน่วยความจำ Dragonfly รุ่นแรกพร้อมใช้งานแล้ว โดยให้การสนับสนุนโปรโตคอล Memcached และ Redis แต่อนุญาตให้ดำเนินการสืบค้นด้วยประสิทธิภาพที่สูงขึ้นมากและใช้หน่วยความจำน้อยลง ระบบจัดการข้อมูลในรูปแบบคีย์/ค่า และสามารถใช้เป็นโซลูชันน้ำหนักเบาเพื่อเพิ่มความเร็วในการทำงานของไซต์ที่มีการโหลดสูง การแคชการสืบค้นที่ช้าไปยัง DBMS และข้อมูลระดับกลางใน RAM รหัส Dragonfly เขียนด้วยภาษา C/C++ และเผยแพร่ภายใต้ BSL (Business Source License)

ผู้ร่วมก่อตั้ง MySQL เสนอใบอนุญาต BSL เพื่อเป็นทางเลือกแทนรุ่น Open Core สาระสำคัญของ BSL คือรหัสของฟังก์ชันขั้นสูงนั้นเริ่มมีให้แก้ไข แต่ในบางครั้งสามารถใช้งานได้ฟรีหากตรงตามเงื่อนไขเพิ่มเติมเท่านั้น ซึ่งจำเป็นต้องซื้อใบอนุญาตเชิงพาณิชย์เพื่อหลีกเลี่ยง เงื่อนไขใบอนุญาตเพิ่มเติมของโครงการ Dragonfly กำหนดให้โอนรหัสไปยังใบอนุญาต Apache 2.0 ในวันที่ 1 มิถุนายน 2027 เท่านั้น จนถึงขณะนี้ ใบอนุญาตอนุญาตให้ใช้รหัสเพียงเพื่อรับรองการทำงานของบริการและผลิตภัณฑ์เท่านั้น แต่ห้ามมิให้ใช้เพื่อสร้างบริการคลาวด์แบบชำระเงินที่ทำหน้าที่เป็นส่วนเสริมของ Dragonfly

ตามที่นักพัฒนาและสาธิตการทดสอบ Dragonfly อ้างว่าเป็นระบบจัดเก็บหน่วยความจำที่เร็วที่สุด เมื่อเปรียบเทียบกับ Redis แล้ว Dragonfly มีประสิทธิภาพเพิ่มขึ้น 25 เท่า และลดการใช้หน่วยความจำลง 2 เท่าสำหรับเวิร์กโหลดทั่วไป เซิร์ฟเวอร์ Dragonfly หนึ่งตัวสามารถประมวลผลคำขอได้หลายล้านคำขอต่อวินาที ตัวอย่างเช่น ในสภาพแวดล้อม Amazon EC6 c16gn.3.8xlarge ก็เป็นไปได้ที่จะบรรลุประสิทธิภาพ XNUMX ล้านคำขอต่อวินาที

โครงการ Dragonfly กำลังพัฒนาสิ่งทดแทน Redis และ Memcached ที่รวดเร็วยิ่งขึ้น

ในการทดสอบการจัดเก็บข้อมูลขนาด 5 GB Dragonfly ต้องการหน่วยความจำน้อยกว่า Redis ถึง 30% เมื่อสร้างสแนปชอตด้วยคำสั่ง "bgsave" การใช้หน่วยความจำจะเพิ่มขึ้น แต่ในช่วงเวลาสูงสุดจะยังคงน้อยกว่าใน Redis เกือบสามเท่าและการดำเนินการบันทึกสแน็ปช็อตนั้นเร็วกว่ามาก (ในการทดสอบสแน็ปช็อตใน Dragonfly เขียนใน 30 วินาทีในขณะที่ Redis - ใน 42 วินาที)

โครงการ Dragonfly กำลังพัฒนาสิ่งทดแทน Redis และ Memcached ที่รวดเร็วยิ่งขึ้น

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

ในบรรดาคุณสมบัติที่มีในรุ่นแรก มีการกล่าวถึงการรองรับโปรโตคอล RESP2 และคำสั่ง 130 Redis ซึ่งสอดคล้องกับฟังก์ชันการทำงานของ Redis 2.8 โดยประมาณ นอกจากนี้ Dragonfly ยังรองรับคำสั่ง memcached ทั้งหมด ยกเว้น CAS (ตรวจสอบและตั้งค่า) ให้การสนับสนุนสำหรับการดำเนินการแบบอะซิงโครนัสสำหรับการสร้างสแน็ปช็อต ให้การใช้หน่วยความจำที่คาดการณ์ได้ ให้ล่าม Lua 5.4 ในตัว และรองรับประเภทข้อมูลที่ซับซ้อน เช่น แฮช ชุดและรายการ (ZSET, HSET, LIST, SETS และ STRING)

โหมดแคชมีจำหน่ายแยกต่างหาก ซึ่งจะแทนที่ข้อมูลเก่าด้วยข้อมูลใหม่โดยอัตโนมัติหลังจากที่หน่วยความจำว่างหมด คุณสามารถแนบข้อมูลตลอดอายุการใช้งานระหว่างที่ข้อมูลนั้นถือว่ามีความเกี่ยวข้องได้ สถานะพื้นที่เก็บข้อมูลสามารถล้างลงดิสก์ในพื้นหลังเพื่อการกู้คืนในภายหลังหลังจากรีสตาร์ท ในการจัดการระบบ จะมีการจัดเตรียมคอนโซล HTTP (เชื่อมโยงกับพอร์ต TCP 6379) และ API สำหรับการส่งคืนตัววัด ซึ่งเข้ากันได้กับ Prometheus ในเวอร์ชันต่อๆ ไป เราวางแผนที่จะขยายการรองรับคำสั่ง Redis และใช้ความสามารถในการจำลองพื้นที่จัดเก็บข้อมูลเพื่อให้ทนทานต่อข้อผิดพลาดและการปรับสมดุลโหลด

ที่มา: opennet.ru

เพิ่มความคิดเห็น