Санах ойн доторх өгөгдлийг кэшлэх систем болох Dragonfly 1.0 хувилбар

Dragonfly санах ойн кэш, хадгалалтын системийг гаргасан бөгөөд энэ нь өгөгдлийг түлхүүр/утга форматаар удирддаг бөгөөд ачаалал ихтэй сайтуудын ажлыг хурдасгах, DBMS-ийн удаашралтай асуулга болон RAM дахь завсрын өгөгдлийг кэш болгоход хялбар шийдэл болгон ашиглаж болно. Dragonfly нь Memcached болон Redis протоколуудыг дэмждэг бөгөөд энэ нь танд одоо байгаа үйлчлүүлэгчийн санг ашиглах, кодыг дахин боловсруулахгүйгээр Memcached болон Redis ашиглан төслүүдийг Dragonfly руу шилжүүлэх боломжийг олгодог.

Redis-тэй харьцуулахад Dragonfly нь Amazon EC2 c6gn.16xlarge орчинд ердийн ажлын ачааллын гүйцэтгэлийг 25 дахин (секундэд 3.8 сая хүсэлт) өсгөсөн. AWS c6gn.16xlarge орчинд Memcached-тэй харьцуулахад Dragonfly нь секундэд 4.7 дахин их бичих хүсэлт (3.8 мянгатай харьцуулахад 806 сая), секундэд 1.77 дахин их (3.7 саятай харьцуулахад 2.1 сая) унших хүсэлтийг гүйцэтгэх боломжтой байв.

Санах ойн доторх өгөгдлийг кэшлэх систем болох Dragonfly 1.0 хувилбар

5 ГБ өгөгдөл хадгалах туршилтын хувьд Dragonfly нь Redis-ээс 30% бага санах ой шаарддаг. "bgsave" командыг ашиглан агшин зуурын зураг үүсгэх үед санах ойн хэрэглээ нэмэгддэг боловч оргил үед энэ нь Redis-ээс бараг гурав дахин бага хэвээр байсан бөгөөд агшин зуурын бичлэг хийх ажиллагаа өөрөө илүү хурдан байдаг (туршилтанд Dragonfly-д агшин зуурын зургийг 30-д бичсэн болно. секунд, харин Редис - 42 секунд).

Санах ойн доторх өгөгдлийг кэшлэх систем болох Dragonfly 1.0 хувилбар

Нөөцийг хуваалцахгүйгээр (хуваалцсан-юу ч биш) олон урсгалтай архитектурын ачаар өндөр гүйцэтгэлд хүрдэг бөгөөд энэ нь хэлхээ бүрд өгөгдлийн өөрийн гэсэн хэсэг бүхий тусдаа тусдаа процессор хуваарилагдсан, мутекс болон эргэх түгжээгүйгээр ажилладаг гэсэн үг юм. Олон түлхүүртэй ажиллахдаа атомын шинж чанарыг хангахын тулд хөнгөн VLL түгжээг ашигладаг. Мэдээллийг санах ойд үр дүнтэй хадгалахын тулд хуваалттай хэш хүснэгтийн төрлийг хэрэгжүүлдэг самбарын бүтцийг ашигладаг.

Dragonfly-ийн зарим онцлог:

  • Чөлөөт санах ой дууссаны дараа хуучин өгөгдлийг автоматаар шинэ мэдээллээр солих кэш горим.
  • Өгөгдлийг хамаатай гэж үзсэн насан туршдаа өгөгдөлтэй холбоход дэмжлэг үзүүлэх.
  • Дахин ачаалсны дараа дараа сэргээх зорилгоор санах ойн төлөвийг диск рүү арын дэвсгэр дээр цэвэрлэхэд дэмжлэг үзүүлдэг.
  • Системийн удирдлагад зориулсан HTTP консол (TCP 6379 порттой холбогддог) ба Prometheus-тай нийцтэй хэмжигдэхүүнийг буцаах API байгаа.
  • 185 Redis командыг дэмждэг бөгөөд энэ нь Redis 5 хувилбарын ажиллагаатай ойролцоо юм.
  • CAS-аас бусад бүх Memcached командуудыг дэмждэг (шалгах ба тохируулах).
  • Хормын хувилбар үүсгэх асинхрон үйлдлүүдийг дэмжих.
  • Урьдчилан таамаглаж болох санах ойн хэрэглээ.
  • Баригдсан Lua 5.4 орчуулагч.
  • Хэш, багц, жагсаалт (ZSET, HSET, LIST, SETS болон STRING) болон JSON өгөгдөл зэрэг нарийн төвөгтэй өгөгдлийн төрлийг дэмждэг.
  • Гэмтлийг тэсвэрлэх, ачааллыг тэнцвэржүүлэх зорилгоор хадгалах сангийн хуулбарыг дэмждэг.

Dragonfly код нь C/C++ хэл дээр бичигдсэн бөгөөд BSL (Business Source License) дагуу тараагддаг. BSL лицензийг MySQL-ийн үүсгэн байгуулагчид Open Core загвараас өөр хувилбар болгон санал болгосон. BSL-ийн мөн чанар нь дэвшилтэт функциональ кодыг эхлээд өөрчлөх боломжтой байдаг боловч арилжааны лиценз худалдаж авах шаардлагатай нэмэлт нөхцөл хангагдсан тохиолдолд л тодорхой хугацаанд үнэ төлбөргүй ашиглаж болно. Dragonfly төслийн лицензийн нэмэлт нөхцлүүд нь кодыг 2.0 оны 15-р сарын 2028-нд Apache XNUMX лиценз рүү шилжүүлэхийг шаарддаг. Энэ хүртэл лиценз нь зөвхөн үйлчилгээ, бүтээгдэхүүнийхээ ажиллагааг хангахын тулд кодыг ашиглахыг зөвшөөрдөг боловч Dragonfly-ийн нэмэлт үүрэг гүйцэтгэдэг төлбөртэй үүлэн үйлчилгээг бий болгоход ашиглахыг хориглодог.

Dragonfly 1.0 хувилбар нь үндсэн серверээс хоёрдогч сервер рүү өгөгдлийг хуулбарлахад дэмжлэг үзүүлдгээрээ онцлог юм. Гэсэн хэдий ч Dragonfly-ийг Dragonfly эсвэл Redis дээр суурилсан үндсэн серверээс өгөгдөл хүлээн авдаг хоёрдогч хадгалах сан болгон ашиглахаар тохируулж болно. Хуулбарлах удирдлагын API нь Redis-тэй нийцдэг бөгөөд ROLE болон REPLICAOF (SLAVEOF) командуудыг ашиглахад суурилдаг.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх