База данных всегда была нашей слабой точкой. У нас обычно есть сотни или тысячи сообщений для обработки в минуту, и им разрешается использовать только дюжину подключений БД. Большинство запросов работают быстро (миллисекунды), но некоторые могут потребоваться подключение в течение нескольких секунд.
Наше типичное решение:
- semaphore с емкостью n
- tradepoolexecutor с количеством потоков n
- tradepoolexecutor с количеством потоков n
-
n + 1 и jdbc (1 соединение зарезервировано для сердечного зонда/Lifine)
Я рассматриваю 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