Я работаю над простым микросервисом, написанным на Spring Boot. Эта служба будет действовать как прокси для других ресурсов, которые имеют жесткое ограничение на количество одновременных подключений, а обработка запросов занимает некоторое время.
Я хотел бы наложить жесткое ограничение на одновременные подключения, разрешенные для моего микросервиса, и отклонить любое с 503 или на уровне tcp/ip. Я пытался изучить различные конфигурации, которые можно сделать для Jetty/Tomcat/Undertow, но пока не нашел ничего полностью убедительного.
Я нашел некоторые настройки, регулирующие пулы потоков:
- server.tomcat.max-threads=0 # Максимальное количество рабочих потоков.
- server.undertow.io-threads= # Количество потоков ввода-вывода, которые нужно создать для воркера.
- server.undertow.worker-threads= # Количество рабочих потоков.
- server.jetty.acceptors= # Количество используемых потоков акцепторов.
- server.jetty.selectors= # Количество используемых потоков селектора.
Но если правильно понять, все они настраивают размеры пула потоков и просто приведут к тому, что соединения будут поставлены в очередь на каком-то уровне.
Это кажется действительно интересным, но это еще не было объединено и предназначено для Spring Boot 1.5, https://github.com/spring-projects/spring-boot/pull/6571
Мне не повезло, используя настройку сейчас? Я мог бы, конечно, реализовать фильтр, но предпочел бы заблокировать его на более раннем уровне и не изобретать велосипед. Я предполагаю, что использование apache или чего-то еще впереди также является вариантом, но все же это кажется излишним.
QoSFilter
иDoSFilter
для таких ограничений на количество подключений (в следующей версии Jetty 9.4.x будет больше возможностей). - person Joakim Erdfelt   schedule 24.08.2016