Виртуальные потоки против реактивных драйверов баз данныхJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Виртуальные потоки против реактивных драйверов баз данных

Сообщение Anonymous »

Существует типичная задача: потребляйте данные из Kafka (или REST/GRPC), обработайте ее и сохраняйте их в дБ.
База данных всегда была нашей слабой точкой. У нас обычно есть сотни или тысячи сообщений для обработки в минуту, и им разрешается использовать только дюжину подключений БД. Большинство запросов работают быстро (миллисекунды), но некоторые могут потребоваться подключение в течение нескольких секунд.
Наше типичное решение:
  • semaphore с емкостью n
  • tradepoolexecutor с количеством потоков n
  • tradepoolexecutor с количеством потоков n


  • n + 1 и jdbc (1 соединение зарезервировано для сердечного зонда/Lifine)
Если сообщение прошло семафор, оно обрабатывается в отдельном потоке и в конечном итоге берет отдельное соединение JDBC из пула. Семфор необходим для сглаживания пиков нагрузки: он отвергает или отправляет сообщения обратно в тему повторения, предотвращая чрезмерное накопление в очереди пула потоков (сохраняет память) и защищает от потери слишком много сообщений, когда стручки с капюшоном выключаются. У нас все еще есть ограничения 10-50 одновременных соединений DB, и мы должны как можно быстрее обрабатывать сообщения, в идеале с одинаковым использованием процессора /памяти, но, как я уже говорил, является ограниченным пулом соединений, а не с отсутствием ресурсов в слое приложения. < /P>
Я рассматриваю 2 раствора и, возможно, их сочетание: < /p>

< /br />
< /br /> < /br /> < /br />
. Блокирование JDBC
[*] Реактивный драйвер DB (Vert.x PG -клиент, как у соседней команды есть опыт работы с ним, но другие решения также возможны)

виртуальные темы , которые, как говорят, являются серебряной apipe -api (oppi -api, api -opi, в api. Говорят, что они убивают реактивное программирование, которое было просто переходной технологией ... в моем понимании, VTS может легко заменить ThreadPoolexeCutor; Они дешевле и все такое. Но действительно ли они решат проблему ограниченного пула соединений? Будет ли освобождено подключение JDBC для обработки других запросов/ответов в ожидании ответа на первый запрос? Или он все еще будет занят из -за блокирующего характера драйвера JDBC (поэтому потоки платформы готовы потреблять больше задач, но пул соединений не так, потому что все соединения заняты)? Что происходит, когда они отправляют запрос в БД (отправьте последний байт в сеть) - будет ли подключение возвращено в пул? Если да, то, как DB управляет контекстами сеанса для многих запросов и ответов, отделенных друг от друга в этом асинхронном взаимодействии? ..


Подробнее здесь: https://stackoverflow.com/questions/797 ... se-drivers
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»