Mamy aplikację mobilną, która przedstawia kanał dla użytkowników. Interfejs API REST kanału jest zaimplementowany na serwerze tomcat, który równolegle wykonuje wywołania do różnych źródeł danych, takich jak Couchbase, MYSQL w celu prezentacji treści. Prosty kod jest podany poniżej:Jak zoptymalizować Tomcat do pobierania paszy
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;
Teraz mamy około 4-5 równoległych zadań na żądanie. Oczekuje się jednak, że w miarę dodawania nowych rodzajów produktów do paszy wzrośnie do prawie 20-25 równoległych zadań.
Moje pytanie brzmi: jak mogę ulepszyć ten projekt? Jakiego rodzaju dostrojenie jest wymagane w Tomcat, aby upewnić się, że takie 20-25 równoległych połączeń może być obsługiwane optymalnie przy dużym obciążeniu.
Rozumiem, że jest to szeroki temat, ale wszelkie sugestie byłyby bardzo pomocne.
istnieje wymóg, aby przywrócić wszystkie dane w jednym wniosku? – AdamSkywalker
Tak, zostanie przesłany kompletny plik danych. W przyszłości może być podzielona na strony ... –
@ madhur-ahuja: Jest wiele rzeczy, które można ulepszyć, aby ulepszyć ten projekt - Wydaje mi się, że próbujesz zaimplementować coś w stylu [http: // /martinfowler.com/articles/microservices.html] (mikroserwisy) do agregowania różnych źródeł danych w kanale. Problem jest ... kocur jest najmniejszym z twoich problemów. Ponieważ każda usługa zdalna może się nie udać, musisz skupić się na elastyczności systemu, aby faktycznie uzyskać taki wygląd. Wyłączniki i wyważarki są pierwszymi rzeczami, które przychodzą mi na myśl, ale są poza zakresem pytania :) –