Программы
Что новый Redis нам готовит

Что новый Redis нам готовит

В Redis 3 должна появиться возможность использовать несколько Redis-нод как кластер. О кластере говорили давно, примерно тогда же пытались сделать, но вскоре поняли, что с разбегу сделать его не получится — надо решить перед этим ряд проблем.

В Redis 3 должна появиться возможность использовать несколько Redis-нод как кластер. О кластере говорили давно, примерно тогда же пытались сделать, но вскоре поняли, что с разбегу сделать его не получится — надо решить перед этим ряд проблем.

И вот уже Redis 3 rc-3 — документации особо нет, но есть пара paper’ов, описывающих виденье разработчиков.

Что сулит кластер:

  • Автоматическое разделение данных между многими нодами.
  • Успешное завершение операций даже при условии, если часть нод упала или недоступна.

Каждая нода будет сидеть на 2-х портах — один для общения с клиентом и ещё один для перегонки данных между нодами. Отличаться они будут ровно на 10000. То есть, если мы используем 6379-ой порт для общения с клиентом, 16379-ой будет использоваться для общения в кластере по бинарному протоколу.

Шардинг не последовательный, вместо этого используются хеш-слоты. 16384 слотов, хеш-слот получается из ключа простейшим способом: берём CRC16, делим по модулю 16384. Дальше хеш-слот отображается на одну из нод. По-сути в данном случае хеш-слот = виртуальный шард. Их можно раскидать на ноды, потом изменить физическую конфигурацию кластера — решардинг без downtime => profit!

Для поддержки доступности используются репликации каждой ноды. То есть, если у нас кластер из 3-х нод: ABC — по ним разделены хеш-слоты (0 — 5500, 5501 — 11000, 11001 — 16383). Каждая нода — master, к ней стоит репликой slave: A1B1C1. Если мастеры вылетают — кластер начинает работать со слейвами (прошу прощения за «смешение английского с нижегородским»). Если и последние отсутствуют — мы остаёмся без части данных, лежащих на них.

Во время, когда мастер становится недоступен, запускается механизм голосований среди реплик на должность мастера. Не сразу — через node timeout, который конфигурируется. Если после голосования бывший мастер становится доступен, а реплика была признана большинством как новый мастер, старый слагает с себя полномочия и резко забывает всё, что успел узнать за время разрыва сети. Так могут теряться данные. Ещё один пример того, что механизм голосований может работать во вред :)

Redis кластер не даёт строгой консистентности. Только weak/lazy-consistency. В некоторых случаях он может «забыть» записать данные. За это мы получаем асинхронность: пишем в B, сразу получаем ответ, идём дальше. А B начинает рассылать на свои реплики изменения. B может упасть до того, как пошлёт репликам обновления. Тогда реплика займёт его место, не зная о том, что что-то изменилось. В общем-то, очередная иллюстрация CAP-«теоремы».

В планах добавление синхронной записи (опционально) для ситуаций, когда потеря недопустима.

Собственно как-то так будет выглядеть Redis-кластер. Остаётся дождаться «замороженной» версии для production и начать использовать — выглядит вполне себе приятно.

Также может быть вам интересно:

Сортированные множества в Redis

Читать »

6 вопросов, которые стоит задать до

Не так важно, до чего стоит задавать эти вопросы: до того, как начать выполнять таск (если ты программист), до того, как прописывать бизнес-модель (если ты стартапер), до того как готовить ужин… Имеет смысл знать ответы до начала какой-либо деятельности.

Читать »
Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

Современные сайты редко ограничиваются только текстом и вёрсткой. Часто в заметках красуются фотографии, а рядом с описанием товаров - их изображения.

Фото Очередь обработки Redis на Python

Очередь обработки Redis на Python

В базе данных Redis есть занимательная структура данных — список. Он подходит для разных задач, но в этой заметке речь пойдёт только об очереди обработки заданий.

Фото Примеры работы с NoSQL базой данных Redis из Python

Примеры работы с NoSQL базой данных Redis из Python

База данных Redis имеет множество возможностей для оптимизации работы программ и добавления различных занимательных возможностей ваших проектов. Поэтому, безусловно, стоит обсудить, как с ней работать из Python.

Фото Три примера работы с SQL базой данных в Python — Pony ORM (бонус)

Три примера работы с SQL базой данных в Python — Pony ORM (бонус)

К заметкам про работу с базой данных из sqlite3, sqlalchemy.Table и sqlalchemy.orm решил добавить и заметку про Pony ORM — крутую, но несколько эзотерическую ORM для Python.

Фото Решаем проблему ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number и Error Code: 1064 в MySQL / MariaDB

Решаем проблему ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number и Error Code: 1064 в MySQL / MariaDB

MySQL и её новая сестричка из мира СПО – MariaDB довольно сильно распространены на хостингах, да и LAMP никто не отменял – пользуются ещё. Так вот не так давно стала возникать эта ошибка. Как её чинить? В этой заметке.

Фото SQLite приняли Code of Conduct, основанный на Уставе святого Бенедикта

SQLite приняли Code of Conduct, основанный на Уставе святого Бенедикта

Проект SQLite приняли новый Code of Conduct. И он сильно отличается от того, к чему мы привыкли

Фото Сводка новостей за 2-ую неделю сентября

Сводка новостей за 2-ую неделю сентября

Новости за вторую неделю сентября

Фото Полезные, но неочевидные команды PostgreSQL

Полезные, но неочевидные команды PostgreSQL

Часто новичку в PostgreSQL сложно просто от того, что многие команды, к которым он привык в других СУРБД называются по-другому, и вообще выглядят странно