Гарантированная обработка запросов в распределенном приложении

Мне нужна консультация по Java приложению.

У меня есть распределенное на кластера приложение A и внешние приложения B, C, D и остальные, всего ~ 50. В мое приложение A идет поток запросов клиентов, суммарный 15 tps. На каждый запрос я делаю вызовы в приложения B, C, D... Но приложение B выставило мне rate limiter равный 1 tps, а C - равный 10 тпс. У каждого приложения свои tps

Задача:

1)гарантировано обрабатывать все сообщения от клиентов(если приложение упало, запрос от клиента не должен «потеряться», а должен так же быть обработан, те отправлены запросы в смежные приложения);

2)управлять исходящим rate limiter;

Было две идеи для реализации части 1 - Кафка или база данных.

Если сделать общий топик в Кафке и из него вычитывать сообщения, отравлять в соответствующую систему согласно типу сообщения, то вся скорость будет замедляться до скорости приложения B и ее 1 тпс.

Если сделать отдельный топик для вызова каждого приложения - 50 producer и 50 consumer - не слишком ли много ресурсов приложения уйдет на это?

База данных - записывать в таблицу с типами для каждого приложения и 50 шедуллеров? Не слишком ли большая нагрузка на БД - 50 инсертов, 750 апдейтов, 50 селектов каждую секунду?

Подскажите, какие есть решения, лучшие практики, примеры приложений?


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