The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

15.07.2017 09:36  Выпуск СУБД Redis 4.0 с новым движком репликации и поддержкой модулей

Представлен релиз СУБД Redis 4.0, относящейся к классу NoSQL-систем. Redis предоставляет похожие на Memcached функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua.

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

Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.

Ключевые улучшения, добавленные в Redis 4.0:

  • Реализован новый движок репликации - PSYNC2 (Partial Replication v2), предлагающий более эффективные методы согласования обмена данными и доставки изменений между первичными и вторичными узлами. Вторичные узлы (slave) теперь могут переводиться в категорию первичных (master) без проведения полной ресинхронизации и могут на лету принять на себя репликацию на другие вторичные узлы. Кроме того, вторичные узлы теперь могут быть временно остановлены, например для проведения обновления, а после возвращения в строй доведены до актуального состояния при помощи частичной ресинхронизации, охватывающей только изменившиеся за время простоя данные.

    Более того, первичный узел может быть переведён во вторичный и присоединён к новому первичному узлу с выполнением лишь частичной ресинхронизации или первичный и вторичный узлы могут поменяться местами. Значительно изменена работа при организации цепочек репликации, в которых одни вторичные узлы (sub-slave) реплицируются от других вторичных узлов. Поток репликации для slave и sub-slave теперь не отличается и идентичен потоку, отдаваемому главным первичным узлом. Новый протокол репликации обратно совместим с прошлыми выпусками, что позволяет использовать Redis 4.0 на slave-серверах, подключаемых к master-узлам на основе старых выпусков Redis;

  • Обеспечена возможность подключения дополнительной функциональности через модули. Redis теперь может применяться как фреймворк для создания сетевых сервисов - через модули могут быть добавлены новые возможности и структуры хранения данных, реализованы новые типы и вынесены в отдельные потоки медленные обработчики, которые не будут блокировать основной поток запросов. API для создания модулей абстрагирован от ядра Redis, что позволяет использовать один и тот же модуль с разными версиями Redis без внесения в него изменений;
  • Улучшена работа кэша, который теперь поддерживает алгоритм замещения элементов LFU (Least-Frequently Used), который обеспечивает вытеснение на основе частоты обращения к элементу, а не на основе времени последнего обращения (LRU, Least Recently Used);
  • Операции DEL, FLUSHDB и FLUSHALL теперь могут выполняться в фоновом режиме с выносом обработчика в отдельный поток, не блокирующий основной процесс. Для фонового удаления вместо DEL предлагается команда UNLINK, а для фонового выполнения команд FLUSH* необходимо указать опцию ASYNC;
  • Представлена новая команда SWAPDB, которая позволяет полностью и мгновенно заменить одно содержимое БД на другое. Замена выполняется атомарно без ощутимых задержек;
  • Реализован новый комбинированный режим сброса данных на диск, который сочетает использование полного дампа RDB и AOF-лога (Append Only File), отражающего изменения, внесённые с момента создания дампа;
  • В число поддерживаемых платформ добавлены платы Raspberry Pi, работа на которых теперь проверяется для каждого выпуска Redis;
  • Добавлена новая команда MEMORY и её варианты "MEMORY USAGE", "MEMORY OVERHEAD" и "MEMORY DOCTOR", предоставляющие средства для анализа использования памяти в Redis и диагностики проблем;
  • Расширены возможности Redis Cluster, в котором появилась поддержка запуска узлов в контейнерах с NAT и контейнерах Docker, улучшен код определения сбоев, снижена нагрузка на CPU;
  • Добавлена поддержка активной дефрагментации памяти, которая позволяет выполнять дефрагментацию налету без остановки работы, если применяется система распределения памяти Jemalloc (в Linux по умолчанию);
  • Снижено потребление памяти, в процессе работы тот же набор данных теперь занимает меньше ОЗУ;
  • Модернизирован формат дампов RDB, в котором теперь поддерживаются 64-разрядные размеры блоков и предварительно отсортированные метаданные;
  • Увеличена эффективность реализации хэш-таблиц (тип dict);
  • Добавлена защита от межпротокольных атак, в которых используется сходство элементов протокола "POST" и "Host:" в HTTP и Redis, что позволяет отправить POST-запрос к Redis на локальной системе из запущенного в браузере web-приложения;
  • Команды RPUSHX и LPUSHX теперь могут принимать произвольное число элементов;
  • Серьёзно переработаны некоторые внутренние подсистемы.


  1. Главная ссылка к новости (https://groups.google.com/foru...)
  2. OpenNews: Критическая уязвимость в СУБД Redis
  3. OpenNews: Выявлено вредоносное ПО, использующее уязвимые СУБД Redis для майнинга криптовалют
  4. OpenNews: Выявлено около 6000 скомпрометированных установок СУБД Redis
  5. OpenNews: Выпуск СУБД Redis 3.2
  6. OpenNews: Представлена Serenity, Redis-совместимая транзакционная СУБД с дисковым хранилищем
Лицензия: CC-BY
Тип: Программы
Ключевые слова: redis, nosql
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Arcade (ok), 10:32, 15/07/2017 [ответить] [показать ветку] [···]    [к модератору]
  • +1 +/
    Ух ты, как раз ругался на топорность мастер-слейв репликации и сложность впихивания этого в продакшн. Будем посмотреть.
     
     
  • 2.5, dep (?), 13:18, 15/07/2017 [^] [ответить]    [к модератору]
  • –3 +/
    Что именно для вас там было топорно?
     
  • 2.24, Zoolander (?), 12:14, 19/07/2017 [^] [ответить]    [к модератору]
  • –3 +/
    Что за дурацкая привычка коверкать русский язык?

    "Будем смотреть" - так правильно.

    Или Пучкова начитался и обезьянничаешь?

     
  • 1.2, Аноним (-), 10:33, 15/07/2017 [ответить] [показать ветку] [···]     [к модератору]
  • –5 +/
    Заметил, что memcached последнее время возродился и активно развивается -https ... весь текст скрыт [показать]
     
     
  • 2.3, пох (?), 11:11, 15/07/2017 [^] [ответить]    [к модератору]  
  • +8 +/
    > Заметил, что memcached последнее время возродился

    да уж охренеть как "возродился" - в issues мега-проблемы 2012го года (особенно хороша - "мы жрем # в конфиге как управляющий символ" - ну никак с 15го года не одолеть ее), в коммитах - какая-то сомнительная возня непойми с чем и ради чего.
    issues:
    Add drop_privileges() for Linux needs review/testing
    #95 opened Dec 15, 2014 by viraptor
    - вот с 2014го needs. Никак двадцать строчек ниасилить. Единственный автор с того самого года ниасилил себе тестовый билдхост под линуксом...

    > в котором закрыли DoS-уязвимость CVE-2017-9951

    которая закрывала DoS-уязвимость CVE-2016-8705, да так и ниасилила.

    с другой стороны, если вас беспокоят уязвимости в memcached - вы ох..ли...э... вы выбрали совершенно неподходящий для вашей задачи сервис хранения.

    И чем меньше не в меру активные рукожoпы лазят в этот код, тем лучше. А там - все равно перейдем поголовно на redis. Вот ровно потому, что у него есть вменяемые разработчики и твиттер с вмварью им платит.

     
     
  • 3.9, KonstantinB (ok), 20:26, 15/07/2017 [^] [ответить]    [к модератору]  
  • +/
    > жрем # в конфиге как управляющий символ

    У memcached нет конфига.

    Всякие там обертки из дистрибутивов - это привет мейнтенерам дистрибутивов.

     
     
  • 4.13, пох (?), 12:43, 16/07/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    > У memcached нет конфига.

    вас обманули. Поинтересуйтесь содержимым
    https://github.com/memcached/memcached/blob/master/scripts/start-memcached
    (существует практически столько же, сколько и сам memcached)

    > Всякие там обертки из дистрибутивов - это привет мейнтенерам дистрибутивов.

    наоборот - привет рукожопому майнтейнеру вашего дистрибутива, который не знал, что у memcached'а таки есть вполне себе штатный конфиг и штатный скрипт запуска, умеющий его парсить (хреново ;-)

    правда, сейчас это уже немодно, тру хипстеры каждый раз вручную юнит для systemd переписывают (который умеет читать из отдельного конфига четыре ненужных параметра, а если надо, к примеру, не торчать на внешнем интерфейсе - то "отредактируйте unit")

     
     
  • 5.14, Аноним (-), 12:49, 16/07/2017 [^] [ответить]    [к модератору]  
  • +/
    Это как раз дебиановский скрипт.


    в репозиторий memcached его сунули относительно недавно, уже при Фейсбуке

     
  • 5.18, Y (??), 07:08, 17/07/2017 [^] [ответить]    [к модератору]  
  • +/
    Не гони на юниты. Во первых тебя никто не заставляет отказываться от конфигов (если ты конечно хоть что-то разрабатываешь). Во вторых отредактировать юнит не сложнее чем отредактировать конфиг или скрипт. И там и тут простой текстовый файл, написанный по простым правилам (в случае скрипта правила немного усложняются конечно). А в третьих тот же юнит(+конфиг) дает намного больше возможностей и удобства, чем тот же "инит-скрипт" + конфиг. Начиная от того что пишется один раз, а работает на всех дистрибутивах и заканчивая тем, что не нужно скрипт 4 раз копировать что бы 6 инстасов запустить.
     
     
  • 6.19, пох (?), 09:37, 17/07/2017 [^] [ответить]    [к модератору]  
  • –2 +/
    > Не гони на юниты. Во первых тебя никто не заставляет отказываться от конфигов

    там _есть_ конфиг ;-)
    Феерически бессмысленный. И рекомендация "если что - поменяйте прямо в скрипте"
    - соблюдая меры предосторожности, чтоб его не автопооверрайдило при апгрейде ;-)

    > Начиная от того что пишется один раз, а работает на всех дистрибутивах

    без ручного вмешательства все равно не работает, потому что ты не знаешь, что именно в этом дистрибутиве должно стартовать ДО (вероятно, как минимум, сеть?) и что - после (вероятно, использующий софт), и как то и другое в данном дистрибутиве угораздило называться (то что все systemd-based копипастят друг у друга, это не заслуга systemd).
    Какая разница, делаем мы это редактируя заголовок или внешней интуитивно-приятной программой?
    А если эту мелочь вынести за скобки - ну вот и остается start-memcached - вполне себе дистрибутивонезависимый (правда, requires perl, но все уже привыкли - pure-config-args не шибко лучше, смысл тот же)

    > и заканчивая тем, что не нужно скрипт 4 раз копировать что бы 6 инстасов запустить.

    этот - нужно ;-) Ну да, можно было бы и получше написать - ну так и sh скрипт тоже можно (вон, freebsd'шный mysqld вполне умеет сто инстансов - интересно, кто этим пользуется)

    Единственная явно видимая польза - memcache как раз явный кандидат на услуги автоперезапускалки. Но daemontools тоже в общем-то никто не отменял.

     
  • 1.4, Аноним (-), 11:26, 15/07/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    хорошие новости
     
  • 1.6, Аноним (-), 14:26, 15/07/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –5 +/
    > Redis обеспечивает постоянное хранение данных на диске и гарантирует сохранность БД в случае аварийного завершения работы.

    Зачем людей обманываете?

     
     
  • 2.7, пох (?), 16:23, 15/07/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    > Зачем людей обманываете?

    а что не так? AOF в fsync mode вполне себе гарантирует и консистентность, и завершенность операций (настолько, насколько их обеспечит fs, как и у всех)

    "но зачем?"

     
     
  • 3.8, Аноним (-), 17:14, 15/07/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    > "но зачем?"

    что зачем? некоторым вот нужна полная гарантия, ессно в рамках возможности железа и фс, но это уже другой уровень

     
     
  • 4.12, Аноним (-), 03:32, 16/07/2017 [^] [ответить]    [к модератору]  
  • –2 +/
    'mount -o sync' спасёт отца русской демократии.
     
  • 4.20, Аноним (-), 12:45, 17/07/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Интересное чтиво от автора redis - http://antirez.com/news/60. Автор redis-а не рекомендует использовать redis в качестве основной базы данных или можете оказаться без данных
     
     
  • 5.21, Аноним (-), 13:03, 17/07/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Комментатором на opennet-е и маминым админам этого к сожалению не понять
     
     
  • 6.22, пох (?), 13:37, 17/07/2017 [^] [ответить]    [к модератору]  
  • +/
    > Комментатором на opennet-е и маминым админам этого к сожалению не понять

    куда им... они даже не замечают, что по ссылке некропостинг 2013го года, и речь там о redis 2 (кто им тогда вообще пользовался, блин, и зачем?)

    Сегодня никто не мешает применять его в такой позе, будет ничуть не хуже всеми любимого постгреза, и чинить в случае чего легче - "но зачем?"

    Кто может нарисовать вменяемый use-case и как в нем выглядят структуры данных?

     
  • 5.23, Аноним (-), 18:54, 17/07/2017 [^] [ответить]     [к модератору]  
  • +1 +/
    Эта заметка была написана 4 года назад, когда в Redis был только достаточно топо... весь текст скрыт [показать]
     
  • 1.15, Аноним (-), 12:52, 16/07/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    >в случае проблем позволяя откатить изменения

    Какой командой?

     
     
  • 2.17, ваш К.О. (?), 01:42, 17/07/2017 [^] [ответить]    [к модератору]  
  • +/
    > Какой командой?

    DISCARD жеж
    Только это для проблем в логике приложения, а не проблем с базой, как можно было подумать.

     
  • 1.16, Аноним (-), 12:54, 16/07/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    >и ведение на диске лога изменений

    Как это включить?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor