2016-08-24 3 views
0

Я работаю над простым микросервисом, написанным в Spring Boot. Эта услуга будет действовать как прокси-сервер в отношении других ресурсов, которые имеют жесткий параллельный лимит подключения, и запросы требуют времени для обработки.Ограничения жесткого ограничения Весенняя загрузка

Я хотел бы наложить жесткие ограничения на одновременные подключения, разрешенные для моего микросервиса, и отклонить их либо с помощью уровня 503, либо на уровне tcp/ip. Я попытался изучить различные конфигурации, которые могут быть сделаны для Jetty/Tomcat/Undertow, но пока не понял что-то совершенно убедительное.

Я нашел некоторые параметры, регулирующие пулы:

  • server.tomcat.max-темы = 0 # Максимальное количество рабочих потоков.
  • server.undertow.io-threads = # Количество потоков ввода-вывода для создания для рабочего.
  • server.undertow.worker-threads = # Количество рабочих потоков.
  • server.jetty.acceptors = # Количество потоков акцепторов для использования.
  • server.jetty.selectors = # Количество селекторных потоков для использования.

Но если вы правильно понимаете, все они настраивают размеры пула потоков и приведут к тому, что соединения будут поставлены в очередь на каком-то уровне.

Это кажется очень интересным, но это еще не были объединены в еще и предназначен для Spring ботинке 1.5, https://github.com/spring-projects/spring-boot/pull/6571

Am I повезло, используя установку для сейчас? Я мог бы, конечно, реализовать фильтр, но скорее блокировал бы его на более раннем уровне и не должен был изобретать колесо. Я предполагаю, что использование apache или что-то еще впереди также является вариантом, но все же это похоже на перебор.

+0

Jetty имеет '' QoSFilter' и DoSFilter' для этих видов ограничений подключения (Наступающий Jetty 9.4.x будет иметь больше возможностей). –

+0

Я посмотрел на DoSFilter, но я не могу найти какой-либо параметр, который фактически ограничивает количество параллельных/текущих запросов. Я что-то упускаю? – user1293081

ответ

1

Попробуйте взглянуть на EmbeddedServletContainerCustomizer

this gist может дать вам и идея, как сделать это.

TomcatEmbeddedServletContainerFactory factory = ...; 
    factory.addConnectorCustomizers(connector -> 
      ((AbstractProtocol) connector.getProtocolHandler()).setMaxConnections(10000)); 
+0

Спасибо! Попробуй, как только у меня будет время, но выглядит многообещающе. – user1293081

Смежные вопросы