У меня есть приложение, которое подключается к стороннему сервису и возвращает результат клиенту.Внутри приложение делает запрос GET стороннему сервису и получает результат.Я использовал Reactor и реактивный код для масштабирования приложения при больших нагрузках.Это проект Spring Boot, который запускает встроенный Tomcat и использует Web Client (Reactive netty для отправки запросов третьей стороне).Почему-то загрузка ЦП и время отклика хуже, чем в режиме блокировки.Аппаратная настройка имеет single core , работающий в Kubernetes .
Проект настроен внутри Kubernetes и работает на одном модуле с одним ядром.Я пытался реагировать, но приложение намного медленнее и даже загрузка ЦП высока по сравнению с архитектурой блокировки.
public Mono<ResponseEntity<?>> get(HttpServletRequest request)
{
return Mono.create ( callback -> {
Mono<Response> response = Make HTTP GET Call using webClient.
response.subscribe(response -> {
callback.success(response);
},error -> {
callback.error(error);
}
});
}
С традиционным режимом блокировки я рад видеть более высокую производительность и уменьшенную загрузку ЦП при сопоставлении с реактивным подходом.Что может быть причиной этого неравенства?Это из-за переключения контекста, поскольку есть только одно ядро?Если да, как мы можем достичь лучшей производительности благодаря одноядерной архитектуре?