Как настроить Micronaut для повышения производительности с помощью Reactor - PullRequest
0 голосов
/ 03 июня 2019

Я определил два API HTTP GET / test-mono и / test-no-mono, оба они точно такие же, за исключением того, что / test-mono использует тип возврата Mono. HelloControllerSpec тестирует оба API 1000 раз с использованием пула потоков 100, а / test-no-mono занимает 45 секунд, но / test-mono занимает более 4 минут, почему? Похоже, что в конфигурации параллелизма по умолчанию / test-no-mono намного лучше, чем /test-mono.

Полный код на https://github.com/soumitrak/micronaut-server

@Controller("/")
class HelloController {

    @Get("test-mono/{id}", produces = arrayOf(MediaType.APPLICATION_JSON))
    fun test_mono(id: String): Mono<String> {
        Thread.sleep(4000)
        return Mono.just("Hello World! $id")
    }

    @Get("test-no-mono/{id}", produces = arrayOf(MediaType.APPLICATION_JSON))
    fun test_no_mono(id: String): String {
        Thread.sleep(4000)
        return "Hello World! $id"
    }
}

$ ./gradlew clean test

Задание: тест

sk.test.server.HelloControllerSpec STANDARD_OUT

09:37:32.473 [Test worker] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [test]

sk.test.server.HelloControllerSpec> using Mono STANDARD_OUT

09:37:34.262 [Test worker] INFO  sk.test.server.HelloControllerSpec - Tests using mono
09:41:46.972 [Test worker] INFO  sk.test.server.HelloControllerSpec - Done tests using mono

Тесты выполняются через> 4 минуты

sk.test.server.HelloControllerSpec> без моно STANDARD_OUT

09:41:46.975 [Test worker] INFO  sk.test.server.HelloControllerSpec - Tests without mono
09:42:27.216 [Test worker] INFO  sk.test.server.HelloControllerSpec - Done tests without mono

Те же тесты за 45 секунд.

В чем причина "/ test-mono" медленная и как я могу улучшить производительность этого API?

1 Ответ

0 голосов
/ 11 июня 2019

Ваш тестовый сценарий нереален.Вы никогда не должны блокировать цикл обработки событий, что вы делаете при вызове Thread.sleep.Код блокировки работает лучше, потому что в нем больше потоков.Добавление большего количества потоков не является решением для достижения лучшей производительности в реалистичном сценарии.

...