Эти планы расширения Redis 👀

Java
Эти планы расширения Redis 👀

предисловие

RedisВсе знакомы с ним, даже если они никогда не использовали его, они слышали о нем.

как наиболее широко используемыйKVОдна из баз данных в оперативной памяти, на сегодняшний деньЭпоха большого трафика, автономный режим немного тонкий, и неизбежно иметь некоторыерасширятьстроить планы.

Ниже автор представит различные схемы и дастСцены,выполнитьДождитесь обзора, а также упомяните некоторые распространенные заблуждения новичков.

текст

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

ps: Предыстория этой статьи - это когда автор пишетПоследняя стабильная версия официального сайта5.0.8Он будет преобладать, хотя он еще не написан, он станет 6.0.1.

раздел

Обзор

раздел(Разметка) — самый простой способ расширения.

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

или если есть рукиNмашина может действовать как сервер Redis
Общий объем памяти всех машин составляет 256 ГБ, и клиенту просто требуется большой объем памяти.

Помимо удаления карт памяти и приваривания их к машине, мы также можем использовать разделы, что увеличивает вычислительную мощность.

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

Как использовать

  • обработка на стороне клиента
    Как и традиционные подтаблицы базы данных, вы можетеkeyДля начала сначала выполните вычисления и найдите экземпляр соответствующего хранилища данных для работы.
    угол дальности, например, ardiD: 1 ~ Оформление: 1000 В экземпляре 1, Оформление: 1001 ~ RudentiD: 2000 в экземпляре 2 ...
    вычисление хэша, как нашhashmapТочно так же используйте хеш-функцию для добавления битовой операции или по модулю, и также доступен расширенный игровой процесс.Согласованный хэшДождитесь операции, найдите соответствующий экземпляр для работы
  • Использовать промежуточное ПО прокси
    Мы можем разработать независимое промежуточное ПО прокси, защитить логику обработки фрагментации данных и работать независимо.
    Конечно, есть также колеса, созданные другими, и у Redis также есть отличное промежуточное ПО для прокси, такое какTwemproxy,илиcodis, вы можете выбрать, использовать ли его в зависимости от сцены.

недостаток

  • Нет возможности для многоклавишной операции, ключи не обязательно находятся в одном экземпляре, поэтому многие операции с ключами или транзакции с несколькими ключами, естественно, не поддерживаются.
  • стоимость технического обслуживания, так как каждый экземпляр физически и логически принадлежит отдельному узлу и не имеет единого управления.
  • ограниченная гибкость, подойдет сегментация диапазона, например, хэш+MOD, если вы хотитединамичныйЧтобы настроить количество экземпляров Redis, необходимо учитывать большой объем миграции данных, что очень хлопотно.

Как разработчик я знаю, что хотя мы всегда можем «спасти страну», доделав некоторые функции, которые не поддерживаются текущей средой, это всегда будет хлопотно.

Мастер-раб

Обзор переноса данных

часто говорилМастер-раб(Master-Slave), то есть метод репликации (Replication), как его ни назови.

то же, что и вышеразделТочно так же он также является основой архитектуры высокой доступности Redis.Новички могут ошибочно подумать, что такой базовый режим является «высокой доступностью», что не очень правильно.

Раздел может быть решен временноЕдиная точкане может вместитьпроблема с объемом данных, но ключ по-прежнему только на одном экземпляре, что не так надежно в эпоху большого трафика.

Мастер-рабЭто расширение другой широты, узел синхронизирует данные сотnode, так же, как размещение экземпляра"клон«То же самое, надежность значительно улучшилась.

Изображение немного преувеличено, в основном, чтобы отразитьГибкая структура, Это один ведущий и один ведомый, или один ведущий и несколько ведомых, или один ведущий и несколько ведомых... Это зависит от вашего настроения

С «клоном экземпляра» естественно сделатьразделение чтения-записи, трафик чтения равномерно распределяется на каждый подчиненный узел.

Как использовать

Эксперты собираютсяВ эпоху , программное обеспечение для чата неизбежно готовит такой пакет смайликов.

Этот мем иКак использоватьЧто это значит? Сначала посмотрите, как его использовать:

  1. Как экземпляр Redis главного узла, он не требует настройки каких-либо параметров, и его нужно только запустить в обычном режиме.
  2. В качестве экземпляра ведомого узла используйте конфигурационный файл или командный режимREPLICAOF 主节点Host 主节点portКонфигурация ведущий-ведомый может быть завершена

Это то же самое, что смайлик "далао" не двигался, я пойду"обнять бедра".

Такой мастер из наименьшей конфигурации готов, хост может предоставлять услуги из инстансов.

"Мастер-узел" в команде относителен, и ведомый также может держать ведомого за бедро, о чем упоминалось выше.Гибкая структура.

недостаток

  • подчиненные узлытолько чтение, еслиписать трафикВ большой сцене это немного подавляет.
    Затем я поставил подчиненный узелтолько чтениеТы не можешь просто выключить его? Конечно нет, репликация данных идет от ведущего к ведомому, а уникальные данные ведомого узла не могут быть синхронизированы с ведущим узлом, и данные противоречивы.
  • отказоустойчивостьНедружественно, после зависания мастерноды некуда разместить обработку записи, нужноруководствоустановки нового главного узла, например, с помощьюREPLICAOF no one(Я никого не держу за бедра.) Довольно сложно быть повышенным до главного узла, а затем разобраться с новой главной конфигурацией других подчиненных узлов.

часовой

Обзор

Мастер-рабРучное аварийное переключение, безусловно, затрудняет принятие, естественно, были решения с высокой доступностью -часовой(Сентинел).

Мы можем напрямую присоединиться к сцене, где архитектура master-slave остается неизменной.Redis Sentinel, для узламонитор, чтобы завершить автоматическуюПоиск проблемыа такжепередача.

а также может выступать в качествепоставщик конфигурации, который предоставляет информацию о главном узле, который предоставляет правильный адрес даже в случае аварийного переключения.

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

Хотя диаграмма немного сложна, похоже, что она вот-вот вызовет активатор света.

На самом деле, это очень удобно в использовании.

Как использовать

SentinelМинимальная конфигурация , достаточно одной строчки:

sentinel monitor <主节点别名> <主节点host> <主节点端口> <票数>

Вам нужно только настроить мастер, а затем использоватьredis-sentinel <配置文件>команда для включения.

Официальный сайт RedisУпомянул"Минимальная конфигурация" выглядит следующим образом, помимо упомянутой выше строки, есть и другие конфигурации:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

Это связано с тем, что официальный сайт добавляет модификатор "Типичная минимальная конфигурация», поставить важные параметры имультимастерПримеры написаны.Заботясь о каждом резюме Дафа, не забывайте о важных параметрах.На самом деле, все они имеют значения по умолчанию.

Как показано в этом примере, установитепсевдоним главного узлапросто следитьмультимастерПри , ему могут соответствовать его дополнительные элементы конфигурации, а также некоторые дозорные команды, такие какSENTINEL get-master-addr-by-nameБудут использоваться псевдонимы.

Рекомендуется количество часовых больше трех и нечетное число.Официальный сайт RedisВ нем также упоминается метод «массива» для различных ситуаций, который очень достоин ссылки.

Более

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

  • Временно недоступен при отказоустойчивости, но пример на официальном сайте тоже даетparallel-syncsПараметры для указания количества параллельных экземпляров синхронизации, чтобы избежать общей недоступности всех экземпляров во время синхронизации, что относительно удобнее, чем отработка отказа вручную.
  • Логика секционирования требует пользовательской обработки, хотя и решенаМастер-рабОднако Sentinel не предоставляет решения для разделения, и разработчикам необходимо подумать о том, как его создать.
  • Поскольку это все еще главный-ведомый, если аномальный трафик записи нарушает работу главного узла, то автоматический "отказоустойчивость«Это станет автоматическим»Передача бедствия«Раб усиливается до мастера, и он также снова повесил.
    Но этот последний пункт также является догадкой автора, и я не слышал о таком случае, так что нет нужды вдаваться в него.

кластер

Обзор

Redis Clusterявляется официальным3.0Распределенное решение, запущенное после версии.

Для разработчиков слово «официальная поддержка», скорее всего, будет очень хорошим, начиная от проблем и заканчивая функциями. Настройте, чтобы решить проблему, стоимость всегда выше.

С официальной формальной схемой кластера, отМаршрутизация запросов, отработка отказа, эластичное масштабированиеБудет проще использовать несколько широт.

ClusterВ отличие от Sentinel, он поддерживает разбиение на разделы. Говорят, что Cluster — это обновление Sentinel, которое не является строгим.

Широта этих двух различна.Если Cluster также имеет функцию аварийного переключения, было бы немного натянуто говорить, что это обновленная версия Sentinel.

ClusterВ управлении разделами используйте "хеш-слот"(хеш-слот) такое понятие, всего16384слоты, каждый экземпляр отвечает за частьканавка,пройти черезCRC16(key)&16383Эта формула вычисляет слот, соответствующий ключу.

Хотя вузела такжеkeyОба представиликанавкаКонцепция кажется трудной для понимания, но на самом деле, поскольку степень детализации выше, она снижает сложность расширения и сжатия узла, что по-прежнему очень выгодно по сравнению с традиционными стратегиями.

Конечно, «слот» — это виртуальное понятие, и сам узел поддерживает отношения «слота», а не фактически загружает и запускает «службу слотов» для запуска.

Как использовать

Различные способы игры в Redis начинаются с файла конфигурации, и кластер не является исключением.

cluster-enabled yes
cluster-config-file "redis-node.conf"

Конфигурация ключа лаконична и понятна, есть два шага

  • Запустить кластер
  • Укажите файл конфигурации кластера

Файл конфигурации кластера (cluster-config-file) предназначен для внутреннего использования и его можно не указывать, Redis поможет его создать. Запуск обычным способомredis-server redis.conf

Сначала запускаются N экземпляров Redis в кластерном режиме, что, конечно, еще не закончилось.

Следующие шаги я называю "слот распределения сватовства", Это звучит до сих пор на нем."

Метод «создания слотов распределения» также постоянно совершенствуется: от обработки непосредственно с помощью исходной команды до использования сценариев, и теперь он официально поддерживается Redis-cli, какой бы метод ни можно было использовать.

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

Приведенная выше команда — это использование redis-cli, предоставленное на официальном сайте Redis.Одна строка команды завершает операцию «три мастера и три подчиненных устройства» и автоматическое выделение слотов.

Таким образом строится кластер.Конечно, для проверки необходимо использовать официальную команду check.

redis-cli --cluster check 127.0.0.1:7001

Более

  • Хотя он имеет хорошую поддержку разделов, есть и некоторые старые проблемы с разделами, такие как: если данные не находятся в одном и том же «слоте», невозможно использовать что-то вроде msetмногоклавишная операция.
  • существуетвыберите командную страницуУпоминается, что в режиме кластера можно использовать только одну библиотеку, хотя обычно она используется одинаково, но это нужно понимать.
  • Эксплуатация и техническое обслуживание также должны быть осторожными, как говорится, "Чем проще использование, тем сложнее нижний слой», очень удобно начинать построение.При столкновении со специфическими проблемами, такими как потребление пропускной способности, перекос данных и т. д., требуется ручное вмешательство, либо изучаются соответствующие параметры конфигурации.

конец

Интересный разговор

При написании схемы "мастер-раб" обнаружил интересную вещь:

Автор начал с того, что вспомнил, что ключевая команда ведущего и ведомогоSLAVEOF, когда я позже проверил официальную, я обнаружил, что команда была изменена наREPLICAOF,несмотря на то чтоSLAVEOFЕще можно использовать.

Некоторые слова описания на официальном сайте по-прежнему кое-где Slave, а кое-где Replication.

Любопытный автор проверил соответствующую информацию и прочитал некоторые блоги автора Redis antirez об этом времени и обнаружил, что это было два года назад.

На самом деле имя переменной «Раб» дало некоторым людям возможность «распылить» волну авторов, и авторы тоже пошли на некоторые компромиссы.

Заинтересованные друзья могут поискать и посмотреть сами, а я ничего кроме техники комментировать не буду, просто приятно провести время.

Основная цель автора: при просмотре официальной документации не запутаться в разных "словарях".

END

В этой статье дается общее описание этих схем расширения Redis.

При специфическом использовании также необходимо обратить внимание наПодробная конфигурация,так же какПоддержка клиентовУчитывайте общую ситуацию.