Использование ClickHouse, Redis, RabbitMQ

Я новичок в некоторых вопросах. Какие есть примеры использования, указанных в заголовке вопроса технологий (ClickHouse, Redis, RabbitMQ)? Возможно ли их использование при создании сайтов? Приведите подробно (по каждой из технологий) все виды использования и примеры (куски кода) использования.


Ответы (1 шт):

Автор решения: Михаил Ребров

Дисклеймер:
Данный вопрос слишком общий и одного ответа не хватит для того чтобы описать все что вы запросили в данном вопросе

Возможно ли их использование при создании сайтов?

Все возможно использовать везде где только угодно.
Это всего лишь инструменты.
Если они помогут вам решить вашу задачу - то использйте.

В реальных сервисах они постоянно используются по прямому назначению.

Тем не менее, если для Вас сайт это что-то на Wordpress, то в данном случае использование подобных инструментов будет скорее избыточно и это можно рассматривать как overengineering

RabbitMQ

Это сервер для обмена сообщениями между компонентами системы по протоколу AMQP. Основная идея состоит в том, что отдельные подсистемы (или независимые приложения) могут обмениваться произвольным образом сообщениями через AMQP-брокер, который осуществляет маршрутизацию данных сообщений, гарантирует доставку этих сообщений, и поддерживает подписку на сообщения нужного типа.

Простой пример использования:

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

Допустим нам нужно по запросу готовить какой-то очень большой отчет.
Вместо того,чтобы его генерировать в режиме реального времени, мы можем в обработчике сохранить задачу на его генерацию и послать сообщение через брокер сообщений компоненту, который в фоне будет выполнять задачи по построению данных отчетов. Данный сервис будет подписан на очередь сообщений в которых говориться, какие именно отчеты нужно строить. Он будет выполнять эти задачи одна, за другой после чего будет уведомлять заказчика о том, что задача выполнена, после чего можно будет показать уведомление пользователю, что его отчет готов.

Другой кейс - это распределение нагрузки по времени, для того чтобы сервис мог легче справляться с пиковыми нагрузками.
Если есть относительно ресурсоемкие задачи, которые не вызывают критических нагрузок в обычное время, то это не значит, что при увеличении потока таких запросов они не поставят сервис на колени.
У многих ресурсов есть периоды с наименьшей и наибольшей активностью:

  • банальные нагрузки в дневное и ночное время
  • любые другие события связанные с графиком и распорядком дня
  • менее очевидные: события, мероприятия и рекламные компании, которые единовременно приклекают большой приток клиентов

и для того чтобы не переплачивать за оборудование, которое сможет выдерживать пиковые нагрузки, которое будет простаивать 99% своего времени - нагрузку распределяют по времени.

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

Пример: декодирование загруженного на YouTube видео и подготовка видео форматов 144p, 240p, 360p, 480p, 720p, 1080p и т.д. Данная задача определенно имеет распределение нагрузки по времени и эта задача будет всегда занимать разное время, в зависимости от занятости серверов.

Redis

Это в первую очередь хранилище данных в формате ключ-значение(key-value storage). Все данные хранятся в оперативной памяти, поэтому данное хранилище относится к классу быстрых хранилищ (в отличии от какого-нибудь МуСкула, которому данные приходится читать с диска). При этом он поддерживает и постоянное хранение данных за счет механизмов снимков и журналирования.

Также поддерживает возможность обмена сообщениями.

Используется

  • как быстрая БД в формате key-value storage
  • как БД реального времени
  • как сервер кеширования (продвинутый аналог Memcache)
  • как брокер сообщений (упрощенный аналог RabbitMQ)

Тем не менее у меня не поворачивается язык назвать Redis простым key-value storage. Он поддерживает огромное количество типов хранимых данных и огромное количество команд и операций. Redis - это целый комбайн для работы с данными в оперативной памяти, который постоянно доробатывается и которому постоянно находятся способы применения.

ClickHouse

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

Яндекс разрабатывал ее для Метрики и другие сервисы также используют данную СУБД для работы с аналитикой.
Тут сказать больше нечего, потому что все примеры использования данной СУБД - это аналитические запросы.
Если оно вам не нужно - не используйте

Описание и реальные примеры

ну и ссылки, которые вы просили:

RabbitMQ:

Redis:

ClickHouse:

→ Ссылка