Является ли Micronaut Data с R2DBC более масштабируемым подходом, чем классическая модель «один поток на соединение»? Micronaut Data JDBC?

Согласно руководству по реагированию на данные micronaut,

... В случае реактивного выполнения и если поддерживающая реализация блокируется, Micronaut Data будет использовать настроенный пул потоков ввода-вывода для планирования выполнения запроса в другом потоке.

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

Мой прямой вопрос: доступ к реляционной базе данных (например, PostGres драйвер R2DBC) бросит R2DBC будет Micronaut Data полагаться на то, что драйвер R2DBC будет обрабатывать неблокирующим образом и будет более масштабируемым?

Предположим, что мой микросервис предоставляет реактивную конечную точку на основе ReactiveX и должен получить доступ к блокирующему источнику данных throw Micronaut Data JDBC (например, Oracle R2DBC еще не находится в производственной версии), из вышесказанного ясно, что он будет использовать настраиваемый пул потоков ввода-вывода при доступе к данным. Я полностью теряю преимущества реактивной конечной точки?

Это мой первый проект с Micronaut, и у меня есть несколько проектов с реактивным подходом. Я далек от того, чтобы быть экспертом в передовых методах реагирования, но я помню, что читал в нескольких блогах: избегайте использования реактивного стека, если у вас есть блокирующий источник. Я также помню, как читал, что у вас может быть худший результат, смешивая неблокирующий с блокирующим дизайном, в основном из-за того, как спроектирован цикл событий (например, Netty). Поскольку я буду использовать Micronaut с ReactiveX и реляционной базой данных, в некоторых случаях с R2DBC и в других с JDBC, я буду признателен за любые комментарии по поводу моих сомнений.


person Jim C    schedule 22.10.2020    source источник


Ответы (1)


Вы не полностью теряете преимущества, поскольку, если у вас есть HTTP-запросы, которые не блокируют, вы можете скомпоновать эти операции с помощью своей логики JDBC.

Однако, если вам нужна настоящая неблокирующая способность с помощью R2DBC, см. https://github.com/micronaut-projects/micronaut-r2dbc/

person Graeme Rocher    schedule 16.11.2020