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

Какие best practices выбрать для архитектуры многопоточного java сервиса?

Делаю небольшое приложение на SpringBoot - агрегатор метрик. Одной из задач является получение определённых метрик из другого сервиса (сервис метрик) за указанный в настройках агрегатора лимит времени. То есть пользователь делает запрос в агрегатор, который в свою очередь должен, например, за 500 мс сделать как можно больше запросов в сервис метрик, отбросить все, которые не он не успел получить за указанное время и произвести над результатом определённую обработку и отдать пользователю. Изначально я планировал использовать executorService и Future объекты, чтобы проверять через метод get(), есть ли результат от запроса и далее агрегировать это всё по определённой логике. Непонятно сколько потоков генерить в executor при старте приложения, можно ли как-то это рассчитать? Вопрос какие проблемы в такой архитектуре, как сделать лучше?
  • Вопрос задан
  • 360 просмотров
Подписаться 3 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
petejones83
@petejones83
Если запросы проходят быстро, то стоит начать с количества тредов, равного количеству ядер. Кодирование/декодирование запросов все равно будет лимитировано на ядра.
Если длительность запросов может быть разной, то стоит поглядеть на NIO -- там можно добиться сильно большей параллельности, но обработку все равно ограничить количеством ядер.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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