Задать вопрос

Как лучше организовать очередь сообщений для их разбора по графику?

По REST API приходят 10-50 тыс. запросов в минуту.
Обрабатывать нужно не все, а только ~2% ( так как большинство запросов это дубли )
Real-time не нужен, достаточно раз в минуту их обрабатывать.

Подскажите как лучше это организовать ?
Использовать какой-то готовый инструмент для построения очереди ?
Или просто как-то складывать в файл (на чём такое лучше писать - nodejs, python, go ?), и потом этот файл разбирать по крону ?
  • Вопрос задан
  • 552 просмотра
Подписаться 4 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 5
@66demon666
Сетевой админ, АТС-админ
Выглядит как попытка сделать костыль, не в ту сторону смотрите
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Я-бы разобрался с дублями. Если есть система которая продуцирует их - то наверное можно
как-то решить этот вопрос на уровне источника. Это performance issue который нужно обусждать.

Можно строить всякие архитектуры на базе очередей или идемпотентных баз но при этом главная
причина (сетевой траф) будет непофикшена а по сути спрятана под ковер.
Ответ написан
@Wan-Derer
Зобанели на Хабре, волки́ ;((
Вроде как, такое кол-во запросов вполне по силам современным реактивным серверам. Для тех кто знает Java, пара полезных лекций по реактивщине: раз, два. К сожалению, не нашёл видео с замерами производительности.
Вопрос можно ли обрабатывать запросы по мере их поступления это не вопрос производительности web-сервера, это вопрос как долго ты будет готовить данные для ответа. Если там нет долгих вычислений или запросов к другим сервисам - обрабатывай в реальном времени.
Если есть - используй очередь. Какую именно - вопрос о количестве данных. Если одновременно обрабатываемые данные не помещаются в память - используй Kafka, Rabbit и т.п. Если помещаются - организуй FIFO буфер в памяти, коллекция Queue есть во всех нормальных языках (ну, или её можно сделать на основе связного списка).
Присоединюсь к предыдущим ораторам: надо разбираться с дублями. Ты говоришь что для снижения нагрузки можно отвечать не на все запросы, а только на последний в серии. А как определить что только что прилетевший запрос - последний?
На чём писать - на том что знаешь. А если не получится - искать программиста на Java :)
Ответ написан
Комментировать
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Раз в минуту: cron
Очереди: AWS SQS, RabbitMQ, Apache Kafka
Лучше писать на том, что вы знаете и в чём разбираетесь. Хоть pascal.
Ответ написан
Captain
@Captain
Можно писать в тот же redis, для данных с одинаковым хэшем дублирования не будет. Ну и есть очереди на основе redis разные, зависит от вашего языка.
А так, соглашусь с предыдущим оратором - надо бы разобраться с дублированием, откуда его столько...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы