Удаленный пул соединений с базой данных из нескольких сервлетов - PullRequest
0 голосов
/ 28 февраля 2012

Это многокомпонентный вопрос, поэтому, пожалуйста, потерпите меня.

Я разрабатываю веб-приложение с сервлетами Java. Будет несколько серверов приложений для балансировки нагрузки системы. Эти серверы обращаются к центральной удаленной базе данных (ни один из них не находится в локальной сети) для выполнения запросов. Одним из требований системы является возможность динамически добавлять новый сервер приложений в сеть и иметь возможность подключаться к базе данных и сразу же начинать обработку запросов.

Мои вопросы:

  • Чтобы настроить удаленный сервер базы данных MySQL, мне нужно изменить некоторые файлы конфигурации, чтобы разрешить внешние подключения. Какие это файлы и как я могу изменить их на лету для новых добавленных серверов, IP-адрес которых неизвестен, пока они не будут запущены?
  • Для удаленного доступа к базе данных следует ли использовать пул соединений? Будет ли пул соединений выполняться индивидуально для каждого сервлета? Как будет масштабироваться пул для вновь добавленных серверов (больше запросов)?
  • Каждый запрос к серверу приложений проходит через несколько отдельных вызовов базы данных (пример: поиск и обновление). Должен ли я использовать одно и то же соединение для этих операций или каждый раз освобождать его?

Спасибо

1 Ответ

1 голос
/ 28 февраля 2012

Я мало что знаю о MySQL, поэтому я не буду отвечать на первую часть.

Но да, вам определенно следует использовать пул соединений.Время установки соединения будет еще хуже для удаленной базы данных, чем для соседней, поэтому повторное использование соединений еще более важно.

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

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

Одно предостережение: сохранение соединения в течение срока действия запроса может увеличить необходимый размер пула по сравнению с захватом.и освобождение для каждой операции.Обычно это хороший компромисс.Но если вы сильно ограничены количеством соединений, это может быть не так.В какой-то степени это зависит от того, как долго ваши запросы выполняются, и от того, сколько они работают с базой данных, с более короткими и загруженными запросами, которые лучше используют повторно используемое соединение.Если вы обслуживаете огромные потоки мультимедиа, которые могут быть сгенерированы без ссылки на базу данных, возможно, ваше приложение не соответствует этому шаблону.

Последний момент: если ваша база данных находится далеко, вы будетебольше пользы от кешированияВнимательно посмотрите, есть ли данные, которые вы можете с пользой кэшировать или даже хранить в локальной базе данных на каждом сервере, чтобы избежать обращений к центральной базе данных.

...