У нас есть мобильное приложение, которое представляет фид для пользователей. API REST канала реализуется на tomcat, который параллельно делает обращения к различным источникам данных, таким как Couchbase, MYSQL, для представления контента. Простой код приведен ниже:
Future<List<CardDTO>> pnrFuture = null;
Future<List<CardDTO>> newsFuture = null;
ExecutionContext ec = ExecutionContexts.fromExecutorService(executor);
final List<CardDTO> combinedDTOs = new ArrayList<CardDTO>();
// Array list of futures
List<Future<List<CardDTO>>> futures = new ArrayList<Future<List<CardDTO>>>();
futures.add(future(new PNRFuture(pnrService, userId), ec));
futures.add(future(new NewsFuture(newsService, userId), ec));
futures.add(future(new SettingsFuture(userPreferenceManager, userId), ec));
Future<Iterable<List<CardDTO>>> futuresSequence = sequence(futures, ec);
// combine the cards
Future<List<CardDTO>> futureSum = futuresSequence.map(
new Mapper<Iterable<List<CardDTO>>, List<CardDTO>>() {
@Override
public List<CardDTO> apply(Iterable<List<CardDTO>> allDTOs) {
for (List<CardDTO> cardDTOs : allDTOs) {
if (cardDTOs != null) {
combinedDTOs.addAll(cardDTOs);
}
}
Collections.sort(combinedDTOs);
return combinedDTOs;
}
}
);
Await.result(futureSum, Duration.Inf());
return combinedDTOs;
Сейчас у нас есть около 4-5 параллельных задач для каждого запроса. Но ожидается, что он достигнет почти 20-25 параллельных задач, поскольку мы вводим новые виды товаров в фид.
Мой вопрос: как я могу улучшить этот дизайн? Какая настройка требуется в Tomcat, чтобы обеспечить оптимальное 20-25 параллельных вызовов при большой нагрузке.
Я понимаю, что это широкая тема, но любые предложения были бы очень полезными.