Производительность кэшированного пула потоков в веб-приложении - PullRequest
0 голосов
/ 21 марта 2019

У меня есть Spring Boot Application.

Отправляет запрос на другие серверы (реплики), используя restTemplate в foreach.Отличается только одно - адрес URL.

Я думаю, что в этом случае я должен использовать ExecutorService.newCachedThreadPool() вместо foreach.

1 . У меня есть @ Controllers с той же логикой.Должен ли я использовать один ExecutorService для приложения или для каждого @ Controller свой собственный ExecutorService?
2 .ThreadPool поведение - если достигнут максимальный размер, нет свободных потоков, и очередь заполняется, включается политика отклонения.
Могу ли я проверить это или просто обработать исключение?

1 Ответ

1 голос
/ 21 марта 2019

Если у вас есть сценарий, подобный этому

Несколько экземпляров приложения по разному URL

AppInstance1 => localhost:8881
AppInstance2 => localhost:8882
...
AppInstanceN => localhost:888N

Теперь вы можете locaBalance всех этих приложений по общему URL сказать

http://localhost/

Вы можете использовать Любой балансировщик нагрузки, например Nginx

Что делает Балансировщик нагрузки, он будет перенаправлять ваши запросы на другой сервер на основе настроенного алгоритма

, например.Round Robin

Таким образом, когда пользователь нажимает http://localhost/user/1

AppInstance1 или AppInstance2 .., этот запрос может быть обработан

...