如何优化Tomcat for Feed pull

Mad*_*uja 12 java tomcat akka

我们有一个移动应用程序,向用户提供Feed.feed tom API是在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; 
Run Code Online (Sandbox Code Playgroud)

现在我们每个请求有大约4-5个并行任务.但随着我们在饲料中引入新种类的物品,预计它将增长到近20-25个并行任务.

我的问题是,我该如何改进这种设计?Tomcat需要进行何种调整才能确保在重负载下最佳地提供20-25个并行调用.

我知道这是一个广泛的主题,但任何建议都会非常有用.

Chr*_*ltz 7

Tomcat只管理传入的HTTP连接并来回推送字节.没有Tomcat优化可以使您的应用程序运行得更好.

如果您需要为每个传入的HTTP请求运行25个并行进程,并且您认为这很疯狂,那么您需要重新思考应用程序的工作方式.

没有tomcat配置可以帮助您在问题中提供的内容.


Dam*_*ien 4

据我所知,您是通过移动应用程序调用此功能,并且提要数量可能会增加。

根据返回的数据量,是否可以在同一调用中返回某些提要的结果?这样服务器就可以完成工作。您可以控制服务器 - 您无法控制用户设备及其连接速度。

正如 nickebbit 所建议的,DefferedResult 之类的东西确实很容易实现。这些提要中的数据是否有可能不会快速更新?如果是这样 - 您应该研究 EHCache 和 @Cacheable 注释的使用。

您可以想出一个解决方案,让用户始终从 Tomcat 服务器中提取内容的缓存版本。但是您的 tomcat 服务器会在后台不断更新该缓存。

这是一项额外的工作 - 但最终如果用户体验不快 - 用户将不想使用这个应用程序