Существует ли клиент golang redis, который автоматически обнаруживает новые шарды для pubsub? - PullRequest
0 голосов
/ 28 августа 2018

[ОБНОВЛЕНИЕ]: Текущий redis отправляет каждое опубликованное сообщение каждому узлу во всем кластере:

/* -----------------------------------------------------------------------------
 * CLUSTER Pub/Sub support
 *
 * For now we do very little, just propagating PUBLISH messages across the whole
 * cluster. In the future we'll try to get smarter and avoiding propagating those
 * messages to hosts without receives for a given channel.
 * -------------------------------------------------------------------------- */
void clusterPropagatePublish(robj *channel, robj *message) {
    clusterSendPublish(NULL, channel, message);
}

Это оригинальный текст вопроса, который не является правильным:

Насколько я понимаю, мне нужно:

  1. Для данного канала найдите узел, которому принадлежит слот хеша.

  2. Подписаться на этот узел, а также на кластер: слоты для обнаружения миграций.

  3. После миграции слота подпишитесь на канал на новом узле и оставьте старое соединение открытым.

  4. Пересылать сообщения приложению от старого соединения до его закрытия и запоминать эти сообщения.

  5. Когда миграция завершена и старое соединение закрыто, пересылайте сообщения с нового соединения, обрезая запомненные сообщения. с первого соединения.

Кто-нибудь из клиентской библиотеки golang redis делает это? Я просмотрел многие, и мне кажется, что я должен написать эту логику сам, постоянно опрос CLUSTER SLOTS или прослушивание в пабе этой информации, чтобы узнать когда осколки увеличиваются или уменьшаются и перемещают мой существующий паб сценарии с одного сервера на другой.

т.е. есть много библиотек Голанга, которые обрабатывают нормальный ключ GET с кластером даже если количество осколков меняется. Но Pubsub и кластер является совсем другое дело, верно?

1 Ответ

0 голосов
/ 28 августа 2018

Каналы PubSub в кластере Redis являются общими для всех узлов - сообщения передаются по внутренней шине, поэтому вам не нужен специальный клиент и / или логика.

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

Источник: Спецификация кластера Redis

...