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

Обработка обращений пакетами?

Добрый день, товарищи!

Необходима помощь в проектировании системы. Суть в следующем: от различных клиентов сервер получает обращения, как только накопится N обращений, запросы отправляются в обработчик, затем ответ отсылается N клиентам. Клиент ждет ответа сервера T секунд. Все это время (T) копятся и отправляются в обработчик новые пачки.
Какой оптимальный вариант реализации данного функционала?

Вводные:
  • бекенд на PHP
  • MySQL
  • все входящие сообщения обязательно сохранять
  • микросервис для обработки может "упасть"


Для понимания: это чат с сервером. Клиент задает вопрос, отдельный микросервис находит ответа и возвращает его. Для уменьшения нагрузки было принято решения отправлять запросы пачками (по N) штук. Клиент ждет ответа сервера T времени, если ответа нет, то выполняется другой алгоритм на клиенте.
  • Вопрос задан
  • 69 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Есть такие штуки как брокеры сообщений, они специально придуманы для быстрого приема сообщений из разных источников, и передачи их обработчикам или клиентам по требованию.
Там по ссылке их целый список, разной степени навороченности.

примеры:
https://habr.com/ru/post/488654/ RabbitMQ
https://habr.com/ru/post/496182/ Apache Kafka

Какой именно вам лучше подойдет - сложно сейчас сказать.
Также можно Redis с этой целью применить.

В общем виде схема примерно такая:
Принимаете все подряд сообщения, ставите им статус "в очереди".
Обработчик берет сообщение, ставит статус "в работе" и дату.
Если обработал - меняет статус на "обработано".
Какой-то вотчер периодически проверяет те что в работе, и если времени прошло много - меняет статус "в работе" на "в очереди" и ставит счетчик ошибок. Если Ошибки повторяются - меняет статус на "здесь ошибка в сообщении, разберитесь"

С доставкой абонентам история похожая, только статус не "в работе" а "ожидает отправку", "отправлен", "принят" и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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