Праект Dragonfly развівае хутчэйшую замену Redis і Memcached

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

Ліцэнзія BSL была прапанавана сузаснавальнікамі MySQL у якасці альтэрнатывы мадэлі Open Core. Сутнасць BSL у тым, што код пашыранай функцыянальнасці першапачаткова даступны для ўнясення змен, але на працягу нейкага часу можа прымяняцца бясплатна толькі пры выкананні дадатковых умоў, для абыходу якіх патрабуецца набыццё камерцыйнай ліцэнзіі. Дадатковыя ліцэнзійныя ўмовы праекту Dragonfly прадпісваюць пераклад кода на ліцэнзію Apache 2.0 толькі 1 чэрвеня 2027 гады. Да гэтага часу ліцэнзія дазваляе выкарыстанне кода толькі для забеспячэння працы сваіх сэрвісаў і прадуктаў, але забараняе ўжыванне для стварэння платных хмарных сэрвісаў, якія выступаюць надбудовай над Dragonfly.

Па заяве распрацоўшчыкаў і прадэманстраваным тэстам Dragonfly прэтэндуе на званне самай хуткай сістэмы захоўвання ў памяці. У параўнанні з Redis у Dragonfly пры тыпавых відах нагрузкі ўдалося дабіцца 25-кратнага павелічэння прадукцыйнасці і трохразовага зніжэння спажывання памяці. Адзін сервер Dragonfly можа апрацоўваць мільёны запытаў у секунду, напрыклад, у асяроддзі Amazon EC2 c6gn.16xlarge атрымалася дасягнуць прадукцыйнасці ў 3.8/XNUMX млн запытаў у секунду.

Праект Dragonfly развівае хутчэйшую замену Redis і Memcached

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

Праект Dragonfly развівае хутчэйшую замену Redis і Memcached

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

З магчымасцяў, даступных у першым выпуску адзначаецца падтрымка пратаколу RESP2 і 130 каманд Redis, што прыкладна адпавядае функцыянальнасці выпуску Redis 2.8. Акрамя таго, Dragonfly падтрымлівае ўсе каманды memcached, акрамя CAS (check-and-set), падае падтрымку асінхронных аперацый для стварэння снапшотаў, забяспечвае прадказальнае спажыванне памяці, падае ўбудаваны інтэрпрэтатар Lua 5.4 і падтрымлівае складаныя тыпы дадзеных, такія як хэшы, мноства (ZSET, HSET, LIST, SETS і STRING).

Асобна даступны рэжым кэшавання, пры якім аўтаматычна забяспечваецца выцясненне старых дадзеных новымі пасля вычарпання вольнай памяці. Магчыма прывязка да дадзеных часу жыцця, на працягу якога дадзеныя лічацца актуальнымі. Стан сховішчы можа скідацца на дыск у фонавым рэжыме для наступнага аднаўлення пасля перазапуску. Для кіравання сістэмай падаецца HTTP-кансоль (прывязваецца да TCP-порту 6379) і API для аддачы метрык, сумяшчальны з Prometheus. У наступных версіях плануецца пашырыць падтрымку каманд Redis і рэалізаваць магчымасць рэплікацыі сховішча для забеспячэння адмоваўстойлівасці і балансавання нагрузкі.

Крыніца: opennet.ru

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