Подтвердить что ты не робот

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

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

Сценарий:

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

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

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

Во всех случаях у меня есть результаты, как ожидалось, кроме теста 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

  • блокировка-сервис - медленная конечная точка блокировки
  • non-blocking-client - Spring Клиент Boot 2.0 и WebClient

Я просто создал простое приложение Spring для загрузки с помощью spring -boot-starter-webflux с версией 2.0.0.BUILD-SNAPSHOT, которая приносит spring -webflux версию 5.0.0.BUILD-SNAPSHOT и то же самое для Spring Ядро, Beans, Контекст и т.д.

4b9b3361

Ответ 1

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

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

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