Является ли объединение пулов соединений лучшим способом для запуска многих экземпляров приложений на одном сервере (с MySQL)?

#mysql #tomcat #connection-pooling

#mysql #tomcat #объединение в пул соединений

Вопрос:

Я хочу настроить сервер tomcat с mysql 5.1 community edition (на win server 2008 x64) для запуска большого проекта на одной машине. У меня есть приложение gwt, и мне нужно запустить более 300 его экземпляров на одном сервере HP.

Каждый экземпляр использует отдельную базу данных MySQL (от db1 до db300), поэтому ему нужен отдельный пул соединений, это часть моей конфигурации пула соединений для db1 (аналогично другим базам данных):

 <Resource name="jdbc/mysql/db1" auth="Container" type="javax.sql.DataSource" initialSize="5" maxActive="100" maxIdle="20" maxWait="30000" removeAbandoned="true" removeAbandonedTimeout="5" validationQuery="select now();" .../>
  

Для 300 экземпляров количество активных подключений будет равно 300 * 100 = 30000 активных подключений!

Теперь я хочу знать, возможно ли открыть такое огромное количество подключений к 300 базам данных MySQL на одном сервере.

Если нет, то каково решение, и если да, то сколько ресурсов (ОЗУ и ЦП) будет использовано?

Является ли объединение пулов соединений лучшим способом или есть другой способ?

Если объединение пулов соединений является лучшим выбором, то какие могут быть наилучшие настройки для моего раздела ресурсов для создания моих пулов?

Ответ №1:

Количество активных подключений составило бы всего 30000, если бы каждому из 300 экземпляров требовалось использовать 100 одновременно. Если они простаивают, они будут использовать только где-то между 1500 (из initialSize) и 6000 (из maxIdle) в зависимости от вашей конфигурации. Вероятно, вы захотите снизить эти значения, чтобы обрабатывать 300 экземпляров. Возможно, initialSize="2" maxActive="10" maxIdle="5" этого достаточно?

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

Комментарии:

1. поскольку мое приложение работает на GWT, поэтому ему необходимо обращаться к базе данных для анализа почти каждого пользовательского запроса, поэтому требуется большое количество подключений, но каждое соединение будет возвращаться в пул через короткое время, поэтому я должен увеличить количество активных подключений в пуле (maxActive > = 50), иначе программа завершится сбоем через очень короткое время, и без пула подключений она не сможет работать даже в течение 5 минут!