Corvus เป็นพร็อกซี Redis Cluster ที่รวดเร็วและมีน้ำหนักเบาสำหรับ Redis 3.0 พร้อมเปิดใช้งานโหมดคลัสเตอร์
การใช้งานไคลเอนต์ Redis ส่วนใหญ่ไม่รองรับคลัสเตอร์ Redis เรามีบริการจำนวนมากที่อาศัย Redis ซึ่งเขียนขึ้นใน Python, Java, Go, NodeJs ฯลฯ มันยากที่จะให้ไลบรารีไคลเอนต์ Redis สำหรับหลายภาษาโดยไม่ทำลายความสามารถในการทำลาย เราเคยใช้ Twemproxy มาก่อน แต่ต้องอาศัย Sentinel สำหรับความพร้อมใช้งานสูง แต่ก็ต้องมีการรีสตาร์ทเพื่อเพิ่มหรือลบอินสแตนซ์ Redis แบ็กเอนด์ซึ่งทำให้เกิดการหยุดชะงักของบริการ และ Twemproxy เป็นเธรดเดี่ยวเราต้องปรับใช้อินสแตนซ์ twemproxy หลายครั้งสำหรับลูกค้าจำนวนมากซึ่งทำให้เกิดอาการปวดหัว SA
ดังนั้นเราจึงสร้าง Corvus
ดูรายละเอียดในผลการทดสอบของเรา
หากใช้รีลีสที่ดาวน์โหลดจากหน้าเผยแพร่เพียงแค่ทำ:
$ make
เปิดใช้งานโหมดการดีบัก:
make debug
หากสร้างจากแหล่งข้อมูลล่าสุด:
git clone https://github.com/eleme/corvus.git
cd corvus
git submodule update --init
make deps # need autoconf
make ไบนารีสามารถพบได้ที่ ./src/corvus corvus
ตัวอย่างไฟล์การกำหนดค่าอยู่ที่ corvus.conf
$ ./src/corvus path/to/corvus.confSET , GET , INCR ) ได้รับการสนับสนุนMGET : แยกออกเป็นหลาย GETMSET : แยกเป็นหลาย SETDEL : แบ่งออกเป็นคีย์เดี่ยวหลายตัว DELEXISTS EXISTS แบ่งออกเป็นคีย์เดียวหลายตัวPING : ไม่สนใจและจะไม่ถูกส่งต่อINFO TIME : จะไม่ถูกส่งต่อไปยังแบ็กเอนด์ Redis ข้อมูลที่เก็บรวบรวมในพร็อกซีจะถูกส่งคืนSLOWLOG : ส่งคืน slowlogs ที่บันทึกโดย Corvus เอง โปรดทราบว่าแตกต่างจาก Redis ในรายการ Slowlog มีฟิลด์ remote latency เพิ่มเติมก่อนที่ฟิลด์ total latency slowlog จะบันทึกคำสั่งย่อยที่ช้าที่สุดสำหรับคำสั่งหลายคีย์: MGET , MSET , DEL , EXISTS เวลาแฝงทั้งหมดของรายการ CMD ย่อยจะเหมือนกับ CMD หลักAUTH : Do Authentication ในพร็อกซีCONFIG : สนับสนุน get , set และเขียนคำสั่งย่อย rewrite เพื่อดึงและจัดการ corvus configSELECT : ละเว้นหากดัชนีคือ 0 จะไม่ถูกส่งต่อ EVAL : ควรได้รับคีย์อย่างน้อยหนึ่งคีย์ หากมีหลายปุ่มทั้งหมดควรอยู่ในโหนดเดียวกันคำสั่งต่อไปนี้ต้องการคีย์อาร์กิวเมนต์ทั้งหมดเป็นของโหนด Redis เดียวกัน:
SORT .RPOP , LPUSHSDIFF , SDIFFSTORE , SINTER , SINTERSTORE , SMOVE , SUNION , SUNIONSTOREZINTERSTORE , ZUNIONSTOREPFCOUNTE , PFMERGE คำสั่งต่อไปนี้ไม่พร้อมใช้งานเช่น KEYS เราไม่สามารถค้นหาคีย์ในอินสแตนซ์ Redis แบ็กเอนด์ทั้งหมดได้
KEYS , MIGRATE , MOVE , OBJECT , RANDOMKEY , RENAME , RENAMENX , SCAN , WAITBITOP , MSETNXBLPOP , BRPOP , BRPOPLPUSHPSUBSCRIBE , PUBLISH , PUBSUB , PUNSUBSCRIBE , SUBSCRIBE , UNSUBSCRIBEEVALSHA , SCRIPTDISCARD , EXEC , MULTI , UNWATCH , WATCHCLUSTER .ECHO QUITBGREWRITEAOF , BGSAVE , CLIENT , COMMAND , CONFIG , DBSIZE , DEBUG , FLUSHALL , FLUSHDB , lastsave, LASTSAVE , MONITOR , ROLE , SAVE SHUTDOWN SLAVEOF , SYNC MIT ลิขสิทธิ์ (c) 2016 Eleme Inc.
ดูใบอนุญาตสำหรับรายละเอียด