Эффективная работа с БД для большого RPS

Начал изучать джаву, решил сделать для примера простой REST API сервер, у него простые задачи:

  • Принять запрос, сходить в БД узнать есть ли у пользователя привелегии на такой запрос
  • Сходить в БД ещё раз, взять статью или создать новую
  • Отрендерить ответ и отправить пользователю

Как видно, сервер в основном общается с БД, а сам по себе делает мало работы.

Мой вопрос о том, как обрабатывать максимальное количество запросов этим сервером.

Я не могу нагуглить ничего полезного про асинхронное взаимодействие в java, все предлагают только создавать треды, но меня интересует производительность, я хочу обрабатывать новые запросы пока жду ответа от БД и если для каждого запроса буду создавать новый тред, то закончатся ресурсы ОС, а если создать пулл тредов, то все равно можно попасть в ситуацию когда сервер не делает ничего полезного, а просто ждет пока 100 тредов получат ответ от БД, в это время ничего не делая с остальными запросами.

В nodejs нет такой проблемы из-за event loop, но я решил попробовать java, потому что у него хороший ООП и типизация. Какой подход используют java разработчики для эффективной обработки таких задач? И как вообще общаться с БД асинхронно? Если я что-то не правильно понимаю в тредах, поправьте меня пожалуйста


Ответы (1 шт):

Автор решения: TiBi

Похоже вашу проблему лучше всего будет решить с помощью реактивного программирования.

В Java для этого есть достаточно много библиотек и фреймворков (Project Reactor, RxJava, Vert.x, Spring WebFlux и т.д.)

Простой пример реактивного REST на WebFlux с запросом к базе через SpringData+R2DBC можно найти, скажем, здесь

Также много примеров, статей и документации по реактивному программированию, библиотекам и фреймворкам можно найти через гугл

→ Ссылка