Spring WebFlux WebClient устойчивость и производительность

Я просто тестирую на примере проекта PoC некоторые блокирующие / неблокирующие решения в простом распространенном сценарии.

Сценарий:

  • Есть конечная точка блокировки отдыха, которая довольно медленная - каждый запрос занимает 200 мс.
  • Есть и другое - клиентское приложение, которое вызывает эту медленную конечную точку.

Я протестировал текущий (блокирующий) загрузочный клиент Spring (tomcat), Spring Boot 2.0 (netty) с помощью WebFlux - WebClient, Ratpack и Lagom. В каждом случае я подчеркнул клиентское приложение с помощью простого сценария тестирования Gatling (100-1000 пользователей в секунду).

Я протестировал ratpack и lagom в качестве эталонных неблокирующих серверов io, чтобы сравнить результаты с весенней загрузкой (с блокировкой и без блокировки).

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

Использование WebClient:

@RestController
public class NonBlockingClientController {
private WebClient client = WebClient.create("http://localhost:9000");

@GetMapping("/client")
public Mono<String> getData() {
    return client.get()
            .uri("/routing")
            .accept(TEXT_PLAIN)
            .exchange()
            .then(response -> response.bodyToMono(String.class));
}
}

Я понятия не имею, что идет не так, или текущая версия снимка просто работает.

Все источники опубликованы на https://github.com/rutkowskij/blocking-non-blocking-poc

  • blocking-service - медленная блокирующая конечная точка
  • неблокирующий клиент - клиент на основе Spring Boot 2.0 и WebClient

Я только что создал простое приложение Spring Boot, используя spring-boot-starter-webflux с версией 2.0.0.BUILD-SNAPSHOT, которое приносит spring-webflux версии 5.0.0.BUILD-SNAPSHOT и то же самое для Spring Core, Beans, Context и т. Д.


person Jakub Rutkowski    schedule 30.03.2017    source источник
comment
Я создал связанную проблему с jira: jira.spring.io/browse/SPR-15584   -  person Jakub Rutkowski    schedule 19.06.2017
comment
Проблема окончательно решена в версии 5.0 RC4.   -  person Jakub Rutkowski    schedule 08.09.2017
comment
не могли бы вы тогда ответить на свой вопрос?   -  person Brian Clozel    schedule 12.10.2017


Ответы (1)


Проблема больше не существует после выпуска 5.0 RC4. Вопрос касался объединения подключений в сети реактор и активную зону реактора.

Я также тестировал Spring Boot 2.0.0.M4 - теперь все выглядит нормально.

Подробности: http://jira.spring.io/browse/SPR-15584

person Jakub Rutkowski    schedule 18.10.2017
comment
Когда ты говоришь, что сейчас все в порядке. Можете ли вы указать на правильную документацию, относящуюся к пулу соединений в response-netty при использовании webclient. - person ROCKY; 24.02.2018