Веб-приложение spring и асинхронное выполнение с использованием пула потоков

У меня есть приложение Spring, которое действует как оркестратор, в обязанности которого входит агрегирование результатов из 6+ других веб-приложений Spring, результаты которых взаимно исключают друг друга, что означает, что запросы каждой службы могут выполняться параллельно. Для этого мы использовали CompletableFuture с общим пулом ForkJoinPool с размером пула по умолчанию, и поскольку наша единственная задача в каждом потоке - это ввод-вывод, запрашивающий другие службы, мы видим исчерпание пула потоков при огромной нагрузке на систему.

final List<CompletableFuture<List<Data>>> completableFutures = CompletableFuture.supplyAsync(() -> serviceToQuery.execute(...)).collect(Collectors.toList());
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[completableFutures.size()])).join();

У нас есть скорость ~ 3000 запросов в секунду с таймаутом каждого запроса на обслуживание, установленным на 3 секунды с использованием автоматического выключателя. Мы видели, что при этой настройке также происходит тайм-аут.

Я был бы признателен, если бы кто-нибудь мог пролить свет на то, как его можно настроить для большого количества запросов, или предложить какой-либо другой подход, и я просмотрел @Async, который также работает на основе исполнителя пула потоков. Любые указатели здесь приветствуются.

Возможно, вы могли бы использовать ExecutorCompletionService и получать результаты из очереди завершения. Агрегирование может быть выполнено, если у вас есть способ коррелировать все ответы (может быть общий uuid). Другой подход может заключаться в использовании Spring Integration (SI) - там вы можете отправлять полезные данные по нескольким каналам, использовать активаторы служб для обработки ответов веб-приложений и, наконец, использовать агрегированные процессоры для агрегирования результатов на основе идентификатора корреляции и количества полезных нагрузок.

Ritesh 13.09.2018 21:54

@Ritesh Спасибо за предложение. Я обязательно оценю ваши предложения в моем контексте.

G Shenoy 13.09.2018 21:59
1
2
199
0

Другие вопросы по теме