Wir haben eine mobile App, die Feeds für Benutzer darstellt. Die feed-REST-API ist auf tomcat implementiert, die Aufrufe an verschiedene Datenquellen wie Couchbase, MYSQL zur Darstellung des Inhalts durchführt. Der einfache Code ist unten angegeben:So optimieren Sie Tomcat für Feed ziehen
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;
Im Moment haben wir etwa 4-5 parallele Aufgaben pro Anfrage. Es wird jedoch erwartet, dass es zu fast 20-25 parallelen Aufgaben wachsen wird, wenn wir neue Arten von Futtermitteln einführen.
Meine Frage ist, wie kann ich dieses Design verbessern? Welche Art von Abstimmung ist in Tomcat erforderlich, um sicherzustellen, dass solche 20-25 parallelen Anrufe unter hoher Last optimal bedient werden können.
Ich verstehe, dass dies ein breites Thema ist, aber alle Vorschläge wären sehr hilfreich.
ist es erforderlich, alle Daten in einer einzigen Anfrage zurück? – AdamSkywalker
Ja, der komplette Feed wird zurückgegeben. In Zukunft kann es paginiert werden ... –
@ madhur-ahuja: Es gibt viele Dinge, die verbessert werden können, um ein Design wie dieses besser zu machen - Es scheint mir, dass Sie versuchen, etwas wie [http://martinfowler.com/articles/microservices.html] (Microservices), um verschiedene Datenquellen zu einem Feed zu aggregieren. Problem ist ... Tomcat ist das kleinste Ihrer Probleme. Da jeder Remote-Dienst fehlschlagen kann, müssen Sie sich auf die Ausfallsicherheit des Systems konzentrieren, um ein Design wie dieses tatsächlich auszuführen. Leistungsschalter und Balancer sind das erste, was mir in den Sinn kommt, aber sie sind Off-Bereich der Frage :) –