Как спроектировать весеннее загрузочное приложение, которое может обрабатывать 1к запросов в секунду - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть контроллер покоя, который принимает почтовые запросы и возвращает статусы того, были ли операции успешными или нет.Он прекрасно работает для 100 запросов в секунду, так как у меня есть несколько операций, лежащих в основе этого, которые в конце посылают ответ.

Могут быть сотни пользователей, пытающихся отправить запросы контроллеру, таким образом, все это делается с использованиемЗавершаемое будущее и http Async invoker.Проблема возникает, когда выполняется 1000 запросов в секунду, а затем потоки контроллера исчерпываются, поскольку уже существует несколько потоков, обрабатывающих несколько запросов, и все ожидают завершения в будущем и затем отправляют ответ.

Какможно ли сделать так, чтобы мой контроллер отдыха мог обрабатывать 1000 запросов в секунду без прерывания.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

уже существует несколько потоков, обрабатывающих несколько запросов, и все ожидают завершения в будущем и затем отправляют ответ.

Фактически вы можете сделать свои контроллеры асинхронными, вернув их обратноCompletableFuture.Просто соедините вызовы на CompletableFuture, возвращенные вашей службой, чтобы преобразовать их в соответствующий ответ, вместо использования get() или join():

@RequestMapping
public CompletableFuture<ResponseEntity<…>> processRequest() {
    return myService.getStatusFuture()
                    .thenApply(status -> convertToResponseEntity(status));
}

Конечно, чтобы это работало должным образом, вам следуетиметь действительно асинхронный сервис.Если вы используете @Async или отправляете задачи с помощью CompletableFuture.supplyAsync(), это просто переместит проблему из пула потоков HTTP в другой пул потоков.

0 голосов
/ 27 декабря 2018

Это зависит от сервера сервлета, который вы используете.В файле application.properties вы можете использовать свойства сервера . * для установки необходимых параметров.

В этой ссылке выВы можете найти эти свойства в разделе EMBEDDED SERVER CONFIGURATION .Если вы используете встроенный сервер Tomcat по умолчанию, проверьте свойства server.tomcat. *.В особенности свойства server.tomcat.accept-count , server.tomcat.max-connections и server.tomcat.max-threads .

...