Выпуск СКБД Redis 7.0

Апублікаваны рэліз СКБД Redis 7.0, якая адносіцца да класа NoSQL-сістэм. Redis дае функцыі для захоўвання дадзеных у фармаце ключ/значэнне, пашыраныя падтрымкай структураваных фарматаў дадзеных, такіх як спісы, хэшы і мноства, а таксама магчымасцю выканання на баку сервера скрыптоў-апрацоўшчыкаў на мове Lua. Код праекту пастаўляецца пад ліцэнзіяй BSD. Дадатковыя модулі, у якіх прапануюцца пашыраныя магчымасці для карпаратыўных карыстальнікаў, такія як RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, з 2019 года пастаўляюцца пад прапрыетарнай ліцэнзіяй RSAL. Развіццё адчыненых варыянтаў дадзеных модуляў пад ліцэнзіяй AGPLv3 спрабаваў працягнуць праект GoodFORM, які апошнім часам знаходзіцца ў стагнацыі.

У адрозненне ад сістэм захоўвання ў аператыўнай памяці, такіх як Memcached, Redis забяспечвае сталае захоўванне дадзеных на дыску і гарантуе захаванасць БД у выпадку аварыйнага завяршэння працы. Зыходныя тэксты праекту распаўсюджваюцца ў рамках ліцэнзіі BSD. Кліенцкія бібліятэкі даступныя для большасці папулярных моў, у тым ліку Perl, Python, PHP, Java, Ruby і Tcl. Redis падтрымлівае транзакцыі, якія дазваляюць выканаць за адзін крок групу каманд, гарантуючы несупярэчлівасць і паслядоўнасць (каманды ад іншых запытаў не могуць уклінавацца) выкананні зададзенага набору каманд, а ў выпадку праблем дазваляючы адкаціць змены. Усе дадзеныя ў поўным аб'ёме кэшуюцца ў аператыўнай памяці.

Для кіравання дадзенымі прадастаўляюцца такія каманды, як інкрымент / дэкрэмент, стандартныя аперацыі над спісамі і мноствамі (аб'яднанне, скрыжаванне), перайменаванне ключоў, множныя выбаркі і функцыі сартавання. Падтрымліваецца два рэжыму захоўвання: перыядычная сінхранізацыя дадзеных на дыск і вядзенне на дыску лога змен. У другім выпадку гарантуецца поўная захаванасць усіх змен. Магчымая арганізацыя master-slave рэплікацыі дадзеных на некалькі сервераў, якая здзяйсняецца ў неблакавальным рэжыме. Даступны таксама рэжым абмену паведамленнямі "публікацыя/падпіска", пры якім ствараецца канал, паведамленні з якога распаўсюджваюцца кліентам па падпісцы.

Ключавыя змены ў Redis 7.0:

  • Дададзена падтрымка функцый, якія выконваюцца на баку сервера. У адрозненне ад раней падтрымліваемых скрыптоў на мове Lua, функцыі не прывязаны да дадатку і нацэлены рэалізацыю дадатковай логікі, якая пашырае магчымасці сервера. Функцыі апрацоўваюцца непарыўна з дадзенымі і ў прывязцы да БД, а не да дадатку, у тым ліку рэпліцыруюцца і захоўваюцца ў пастаянным сховішчы.
  • Прапанавана другая рэдакцыя ACL, якая дазваляе кіраваць доступам да дадзеных на аснове ключоў і якая дапускае вызначэнне розных набораў правіл доступу да каманд з магчымасцю прывязкі некалькіх селектароў (набораў паўнамоцтваў) да кожнага карыстача. Кожны ключ можа быць атаясамлены з пэўнымі паўнамоцтвамі, напрыклад, можна абмежаваць доступ толькі чытаннем або запісам пэўнага падмноства ключоў.
  • Дадзена якая працуе ў кластары секцыянаваная (sharded) рэалізацыя парадыгмы распаўсюджвання паведамленняў па падпісцы (Publish-Subscribe), пры якой паведамленне адпраўляецца вызначанаму вузлу, да якога прывязаны канал паведамленняў, пасля чаго гэтае паведамленне перанакіроўваецца астатнім вузлам, якія ўваходзяць у секцыю (shard). Кліенты могуць атрымліваць паведамленні па падпісцы на канал, як падключаючыся да асноўнага вузла, так і да другасных вузлоў секцыі. Упраўленне ажыццяўляецца пры дапамозе каманд SSUBSCRIBE, SUNSUBSCRIBE і SPUBLISH.
  • Дададзена падтрымка апрацоўкі падкаманд у большасці кантэкстаў.
  • Дададзены новыя каманды:
    • ZMPOP, BZMPOP.
    • LMPOP, BLMPOP.
    • SINTERCARD, ZINTERCARD.
    • SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
    • EXPIRETIME, PEXPIRETIME.
    • EVAL_RO, EVALSHA_RO, SORT_RO.
    • FUNCTION*, FCALL, FCALL_RO.
    • COMMAND DOCS, COMMAND LIST.
    • LATENCY HISTOGRAM.
    • CLUSTER SHARDS, CLUSTER LINKS, CLUSTER DELSLOTSRANGE, CLUSTER ADDSLOTSRANGE.
    • CLIENT NO-EVICT.
    • ACL DRYRUN.
  • Прадастаўлена магчымасць апрацоўкі адразу некалькіх канфігурацый у адным выкліку CONFIG SET/GET.
  • Ва ўтыліту redis-cli дададзеныя опцыі "-json", "-2", "-scan", "-functions-rdb".
  • Па змаўчанні адключаны доступ кліентам да налад і камандам, якія ўплываюць на бяспеку (напрыклад, адключаныя каманды DEBUG і MODULE, забаронена змена канфігурацый са сцягам PROTECTED_CONFIG). У redis-cli спынены вывад у файл з гісторыяй каманд, якія змяшчаюць канфідэнцыйныя дадзеныя.
  • Унесена вялікая порцыя аптымізацый, накіраваных на павышэнне прадукцыйнасці і зніжэнне спажывання памяці. Напрыклад, істотна паніжанае спажыванне памяці пры ўключэнні рэжыму кластара, пры выкананні аперацый copy-on-write і пры працы з хэшамі і ключамі zset. Палепшана логіка скіду даных на дыск (выкліку fsync). Скарочана колькасць сеткавых пакетаў і зваротаў да сістэмных выклікаў пры адпраўцы адказаў кліенту. Павышана эфектыўнасць рэплікацыі.
  • Ухіленая ўразлівасць CVE-2022-24735 у асяроддзі для выканання Lua-скрыптоў, якая дазваляе ажыццявіць падстаноўку свайго Lua-кода і дамагчыся яго выкананні ў кантэксце іншага карыстача, у тым ліку мелага больш высокія прывілеі.
  • Ухіленая ўразлівасць CVE-2022-24736, якая дазваляе дамагчыся аварыйнага завяршэння працэсу redis-server з-за разнаймення нулявога паказальніка. Атака здзяйсняецца праз загрузку спецыяльна аформленых Lua-скрыптоў.

Крыніца: opennet.ru

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