Использование 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:
- https://habr.com/ru/company/manychat/blog/507136/
- https://mcs.mail.ru/blog/kak-ispolzovat-raznye-struktury-dannyh-redis-smotrim
- https://aws.amazon.com/ru/redis/
ClickHouse: