Хочу понять, лыжи не едут или как.
Есть два ̶с̶т̶у̶л̶а̶ сервака с приложениями на yii2. Один принимает кучу сообщений от юзеров, складывает в базу и больше ничего не делает.
На другом серваке yii в бесконечном цикле стучится в базу (баш скрипт дергает консольную команду). Вытаскивает оттуда последние сообщения, потом кладет их в очередь кролика. И дальше уже кролик дергает новый контроллер, который рассылает пуши.
Мне это немножко взорвало мозг. Разве не логичнее сразу, из первого приложения добавлять сообщение в rabbitmq? Без дерганья базы в бесконечном цикле. Как по мне, это дичь. Но может я чего не понимаю? Такая схема чисто теоретически может быть оправдана?
Люди, которые это писали, уже уволились, спрашивать подробности не у кого. И вообще все травой поросло
База данных выполняет роль хранилища, ДДОС первого приложение не даст повалить очередь, и как минимум все сообщения будут обработаны, как максимум упадет только первое приложение а кролик продолжит жрать морковку.
Кролик умеет в RPC, если БД их поддеоживает, возможно можно выкинуть крон и кролик сам БД опрашивать будет.
Разве не логичнее сразу, из первого приложения добавлять сообщение в rabbitmq
Да, это логично. Но сохранение в БД я бы также оставил по простой причине - консистентность. А то на больших объемах кролик может терять данные + иногда есть необходимость повторной обработки (CQRS/Event Sourcing)
Ну да, я имела в виду: сохранять в базу, но и в кролика тоже класть сразу. Фух, спасибо за ответ. А то у меня уже крыша уезжать начала, пока разобралась как оно работает) Думала, может упускаю какой высший смысл
Иван Шумов, скорее всего первая версия этого ПО была вообще без кролик, потом его присобачили как-то сбоку как экспериментальное решение с расчетом позже переделать на него, но в итоге так оно и осталось в недоделанном виде.