|
|
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть Tomcat 9. Есть примерно N REST сервисов, каждое из которых - отдельное веб-приложение. Все эти N сервисов задеплоены на один томкат. Есть один инстанс Postgres. Сейчас каждое из REST-приложений использует свой экземпляр ConnectionPool. Предположим, каждый пул резервирует M -соединений. Поэтому, может оказаться такая картина, что даже без нагрузки на web-приложения, в памяти будет удерживаться N * M idle-соединений. Либо другая ситуация: веб-приложение A будет более высоконагруженное, чем приложение B. В этом случае - ресурсы (connections) приложения B будут простаивать. Мне кажется, лучше использовать общий пул, на весь tomcat. И каждое из приложений будет его использовать (например через JNDI). Не будет ли в данном решении узких мест? Тоесть, еще раз резюмируя главный вопрос: Что лучше - отдельный ConnectionPool для каждого веб-приложения, либо общий пул на все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:10 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirage, Что мешает сделать пул на каждое приложение + minIdleConnections = 0? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:16 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
А что делать нехардкод уже религия запрещает... Сделаете нехардкод,---чтоб можно было переключатся и так и так. Ведь речь идёт о строке JNDI... А на практике увидите ,что лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:17 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
У вас у каждого модуля свой пул внутри реализован? В любом случае есть смысл вынести конфигурацию в Tomcat. Общий пул проще мониторить и конфигурировать. Но если нужен какому-то модулю особой конфиг, ничего не мешает прописать 2 пула или больше. Так же, на сколько я понимаю, Tomcat позволяет и любую реализацию пула подсунуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:29 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУ вас у каждого модуля свой пул внутри реализован? У каждого модуля одинаковая конфигурация пула. Используется одинаковая БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:31 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageУ каждого модуля одинаковая конфигурация пула. Используется одинаковая БД. В Context.xml? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:35 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageBlazkowiczУ вас у каждого модуля свой пул внутри реализован? У каждого модуля одинаковая конфигурация пула. Используется одинаковая БД. Просто каждый модуль держит открытым свой инстанс пула. Конфиг пула для каждого модуля примерно такой: Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:35 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Не знаю насчет PostgreSQL, но в Oracle Thin JDBC по умолчанию кешируются запарсенные Prepared Statement'ы... т.ч. пихать все в один пул - не очень хорошая идея. Повторное использование будет сведено к 0. Правда не очень понятно, насколько оно вообще оправдано, кроме того, что жрет оперативную память В общем "не все так однозначно" ( C ) IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:36 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
BlazkowiczunicornmirageУ каждого модуля одинаковая конфигурация пула. Используется одинаковая БД. В Context.xml? Нет, модули не используют конфиг из context.xml, а создают пул программно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 12:37 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageМне кажется, лучше использовать общий пул, на весь tomcat. И каждое из приложений будет его использовать (например через JNDI). да вроде нет никаких противопоказаний. JNDI он и в африке JNDI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 13:30 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Petro123unicornmirageМне кажется, лучше использовать общий пул, на весь tomcat. И каждое из приложений будет его использовать (например через JNDI). да вроде нет никаких противопоказаний. JNDI он и в африке JNDI Есть один аргумент против такого подхода - microservice architecture. Если будет общий пул на все REST-сервисы, то при его переполнении - все выйдут из строя. Если будет каждый пул на каждый REST-сервис - то выйдет из строя только одно (самое высоконагруженное) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 13:32 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageЕсть один аргумент против такого подхода - microservice architecture. ====== это страшилка из 2-х слов которую никто не видел Если будет общий пул на все REST-сервисы, то при его переполнении - все выйдут из строя. ==== не смешите. Вам 10т. соединений хватит? Нет? Тогда давайте цифры. Если будет каждый пул на каждый REST-сервис - то выйдет из строя только одно (самое высоконагруженное) ==== см.выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 13:34 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
no56892unicornmirage, Что мешает сделать пул на каждое приложение + minIdleConnections = 0? по-умолчанию этот параметр итак равен 0, согласно исходникам GenericObjectPool: public static final int DEFAULT_MIN_IDLE = 0; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 14:18 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Если будет общий пул на все REST-сервисы, то при его переполнении - все выйдут из строя. Если будет каждый пул на каждый REST-сервис - то выйдет из строя только одно (самое высоконагруженное) +1 Выше я уже говорил, когда много пулов может быть полезно. Например Oracle Thin JDBC и его методика кеширования statement'ов (менялась от версии к версии). По факту, в результате подхода "один пул на все приложения", кэшь просто набирает дофига мусора и съедает дофига ОП. На Oracle Customer Care & Billing пришлось долго корячится с настройками и перебрать кучу версий Oracle Thin JDBC, что бы хоть как-то зажило и перестало вылезать Out Of Memory.... ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 14:25 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
лично я делаю обычно так: в томкэт объявляем один пул Код: xml 1. 2. 3. для каждого приложения конфигурируем ссылку на него (я это делаю в Catalina/host_name/context_name.xml) Код: xml 1. 2. как только общего пула начинает по какой-то причине не хватать или не устраивает, создаем новый ресурс и меняем ссылку на него. все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 14:27 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageЕсть один аргумент против такого подхода - microservice architecture. Если будет общий пул на все REST-сервисы, то при его переполнении - все выйдут из строя. Если будет каждый пул на каждый REST-сервис - то выйдет из строя только одно (самое высоконагруженное) У вас все модули в одной JVM крутятся. Что нивелирует все вышеперечисленные аргументы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 14:27 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
BlazkowiczunicornmirageЕсть один аргумент против такого подхода - microservice architecture. Если будет общий пул на все REST-сервисы, то при его переполнении - все выйдут из строя. Если будет каждый пул на каждый REST-сервис - то выйдет из строя только одно (самое высоконагруженное) У вас все модули в одной JVM крутятся. Что нивелирует все вышеперечисленные аргументы. Потому что узким местом здесь будет JVM, tomcat? можно поподробнее, почему нивелирует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 14:29 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageможно поподробнее, почему нивелирует? Переполнение памяти одним модулем - все умрут. Повышенная нагрузка на один модуль - все тормозят. Поэтому достижение потолка соединений в пуле, это лишь одна из не многих потенциальных проблем. Микросервисы же это отдельные процессы. Они на много более независимы чем JEE модули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 14:35 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Blazkowiczunicornmirageможно поподробнее, почему нивелирует? Переполнение памяти одним модулем - все умрут. Повышенная нагрузка на один модуль - все тормозят. Поэтому достижение потолка соединений в пуле, это лишь одна из не многих потенциальных проблем. Микросервисы же это отдельные процессы. Они на много более независимы чем JEE модули. Ок, предположим проблем с переполнением самой памяти нет. А существует только проблема переполнения connection pool (ведь мы указываем для него лимит соединеий). В данном случае - пул будет узким местом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 15:35 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirage, ..."Жениться или не жениться - вот в чём вопрос. А если жениться, то куда девать нынешнюю жену?" )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 16:19 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Petro123unicornmirage, ..."Жениться или не жениться - вот в чём вопрос. А если жениться, то куда девать нынешнюю жену?" )) другими словами - в данном случае - надо использовать то, что удобнее. )) По-поводу проблемы с idle-соединениями: я попробовал задать следующие параметры для пула: setMaxActive = 30 setMaxIdle = 10 setInitialSize = 10 setTimeBetweenEvictionRunsMillis = 30000 setMinEvictableIdleTimeMillis = 60000 Такая конфирурация включает pool sweeper. И получилась такая картина: 1. стартует сервис. При первом обращении выделяется 10 idle-connections в пуле. 2. если немного подождать (пару минут), то все idle-connections удаляются из пула. 3. если загрузить сервис кучей запросов, то пул вырастает согласно необходимому количеству, которое требуется для обработки. 4. если снова подождать пару минут - пул снова полностью очищается. Кажется, это то, что нужно. И в данном случае не обязательно использовать общий пул на весь томкат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 16:27 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageИ в данном случае не обязательно использовать общий пул на весь томкат. из за того что один пул или на каждое приложение, разница будет не такая очевидная. Не такая очевидная чтобы ломать и переписывать. У вас всё работает. Плюсы минусы расссмотрели). Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 16:40 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
unicornmirageВ данном случае - пул будет узким местом.Ох уж это решение проблем, которые ещё даже не обозначились ... Вам какая разница будет к базе тысяча подключение из одного пула или тысяча подключений из десяти пулов??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 18:42 |
|
||
|
Общий пул на весь servlet container, или отдельный пул на каждое web-приложение
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovunicornmirageВ данном случае - пул будет узким местом.Ох уж это решение проблем, которые ещё даже не обозначились ... Вам какая разница будет к базе тысяча подключение из одного пула или тысяча подключений из десяти пулов??? Разница обозначена в начальном топике: если будет тысяча подключений из десяти пулов, и одна часть пулов будет менее загружена, чем другая - то часть idle-connections (из менее нагруженных пулов) не будет использоваться. Тоесть будут просто вхолостую висеть в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2016, 21:05 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39278563&tid=2123862]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 431ms |

| 0 / 0 |
