Выпуск Dragonfly 1.0, сістэмы для кэшавання дадзеных у аператыўнай памяці

Адбыўся рэліз сістэмы кэшавання і захоўванні дадзеных у аператыўнай памяці Dragonfly, якая маніпулюе дадзенымі ў фармаце ключ/значэнне і можа ўжывацца як легкаважнае рашэнне для паскарэння працы высоканагружаных сайтаў, якое кэшуецца павольныя запыты да СКБД і прамежкавыя дадзеныя ў аператыўнай памяці. Dragonfly падтрымлівае пратаколы Memcached і Redis, што дазваляе выкарыстоўваць ужо існуючыя кліенцкія бібліятэкі і без перапрацоўкі кода перакладаць на Dragonfly праекты, якія выкарыстоўваюць Memcached і Redis.

У параўнанні з Redis у Dragonfly пры тыпавых відах нагрузкі ў асяроддзі Amazon EC2 c6gn.16xlarge атрымалася дамагчыся 25-кратнага павелічэння прадукцыйнасці (3.8 млн запытаў у секунду). У параўнанні з Memcached у AWS-акружэнні c6gn.16xlarge Dragonfly змог выканаць у 4.7 разы больш запытаў у секунду на запіс (3.8 млн супраць 806 тысяч) і ў 1.77 разоў больш запытаў у секунду на чытанне (3.7 млн ​​супраць 2.1/XNUMX млн).

Выпуск Dragonfly 1.0, сістэмы для кэшавання дадзеных у аператыўнай памяці

У тэстах на захоўванне 5 ГБ дадзеных Dragonfly запатрабаваў на 30% менш памяці, чым Redis. Падчас стварэння снапшотаў камандай bgsave спажыванне памяці ўзрастае, але ў пікавыя моманты яно заставалася амаль у тры разы менш, чым у Redis, а сама аперацыя запісу снапшота выконваецца значна хутчэй (у цесце снапшот у Dragonfly быў запісаны за 30 секунд, а Redis - За 42 секунды).

Выпуск Dragonfly 1.0, сістэмы для кэшавання дадзеных у аператыўнай памяці

Высокая прадукцыйнасць дасягаецца дзякуючы шматструменнай архітэктуры без падзелу рэсурсаў (shared-nothing), якая разумее, што да кожнага струменя прывязваецца асобны адасоблены апрацоўшчык са сваёй порцыяй дадзеных, які працуе без мьютэксаў і spin-блакіровак. Для забеспячэння атамарнасці пры працы з некалькімі ключамі выкарыстоўваюцца легкаважныя блакаванні VLL. Для эфектыўнага захоўвання інфармацыі ў памяці прымяняецца структура dashtable, якая рэалізуе разнавіднасць секцыянаванага хэш-табліц.

Некаторыя магчымасці Dragonfly:

  • Рэжым кэшавання, пры якім аўтаматычна забяспечваецца выцясненне старых дадзеных новымі пасля вычарпання вольнай памяці.
  • Падтрымка прывязкі да дадзеных часу жыцця, на працягу якога дадзеныя лічацца актуальнымі.
  • Падтрымка скіду стану сховішча на дыск у фонавым рэжыме для наступнага аднаўлення пасля перазапуску.
  • Наяўнасць HTTP-кансолі (прывязваецца да TCP-порту 6379) для кіравання сістэмай і API для аддачы метрык, сумяшчальны з Prometheus.
  • Падтрымка 185 каманд Redis, што прыкладна адпавядае функцыянальнасці выпуску Redis 5.
  • Падтрымка ўсіх каманд Memcached, акрамя CAS (check-and-set).
  • Падтрымка асінхронных аперацый для стварэння снапшотаў.
  • Прадказальнае спажыванне памяці.
  • Убудаваны інтэрпрэтатар Lua 5.4.
  • Падтрымка складаных тыпаў дадзеных, такіх як хэшы, мноствы, спісы (ZSET, HSET, LIST, SETS і STRING) і дадзеныя ў фармаце JSON.
  • Падтрымка рэплікацыі сховішчы для забеспячэння адмоваўстойлівасці і балансавання нагрузкі.

Код Dragonfly напісаны на мовах C/З++ і распаўсюджваецца пад ліцэнзіяй BSL (Business Source License). Ліцэнзія BSL была прапанавана сузаснавальнікамі MySQL у якасці альтэрнатывы мадэлі Open Core. Сутнасць BSL у тым, што код пашыранай функцыянальнасці першапачаткова даступны для занясення змен, але на працягу нейкага часу можа прымяняцца бясплатна толькі пры выкананні дадатковых умоў, для абыходу якіх патрабуецца набыццё камерцыйнай ліцэнзіі. Дадатковыя ліцэнзійныя ўмовы праекту Dragonfly прадпісваюць перавод кода на ліцэнзію Apache 2.0 15 сакавіка 2028 года. Да гэтага часу ліцэнзія дазваляе выкарыстанне кода толькі для забеспячэння працы сваіх сэрвісаў і прадуктаў, але забараняе ўжыванне для стварэння платных хмарных сэрвісаў, якія выступаюць надбудовай над Dragonfly.

Версія Dragonfly 1.0 характэрная рэалізацыяй падтрымай рэплікацыі дадзеных з першаснага сервера на другасны. Пры гэтым Dragonfly можна наладзіць для выкарыстання ў якасці другаснага сховішча, які прымае дадзеныя з першаснага сервера як на базе Dragonfly, так і на базе Redis. API для кіравання рэплікацыяй сумяшчальны з Redis і заснаваны на ўжыванні каманд ROLE і REPLICAOF (SLAVEOF).

Крыніца: opennet.ru

Дадаць каментар