Допустим, у меня есть приложение Spring Framework, работающее на Tomcat и использующее базу данных MySQL:
Какое решение было бы лучшим в данном случае, которое обеспечило бы коммуникабельность (цена / производительность / время интеграции)?
Точнее: что будет в поле балансировщика веб-нагрузки и кто должен быть кластеризованным веб-сервером tomcat? Что будет в поле «Балансировщик нагрузки базы данных» и как следует кластеризовать серверы баз данных? И если это вообще возможно, конкретные ссылки технической интеграции были бы большим подспорьем.
Для балансировки веб-нагрузки существует несколько решений, с открытым исходным кодом и платных, я лично использовал балансировщики нагрузки cisco (CSM и ACE) и F5, и мне они нравятся (но эти решения могут быть дорогими). Есть несколько вариантов с открытым исходным кодом, и на ум приходит одно: http://www.linuxvirtualserver.org/
Для балансировки нагрузки mysql вы можете посмотреть мастер репликации для msyql. Смотреть на: http://www.howtoforge.com/mysql_master_master_replication. То, что я делал в прошлом для проекта, у меня было 3 веб-сервера serverfarm за большим IP (F5), и все они разговаривали с одним сервером mysql. И у меня была точно такая же настройка на другом сайте, и оба сервера mysql имели мастер репликации. Таким образом, пользователи будут использовать все веб-серверы и серверы БД, и если один из серверов БД выйдет из строя, веб-ферма на этом сайте отключится, и пользователи будут использовать только другой сайт. (Отказоустойчивость и мониторинг DNS для мониторинга и переключения нескольких сайтов). Вы можете использовать глобальный балансировщик нагрузки, если у вас есть бюджет для большей детализации.
Обычный MySQL не имеет возможности балансировки нагрузки, но Кластер MySQL делает.
Я бы рекомендовал использовать MySQL Cluster для ваших нескольких экземпляров MySQL.
Затем вы можете использовать MySQL Connector / J с URL-адресами JDBC с прозрачной балансировкой нагрузки. Видеть http://dev.mysql.com/doc/ndbapi/en/mccj-using-connectorj.html
PS: Я проголосовал за перенос этого вопроса на ServerFault.com.
Я бы не рекомендовал использовать MySQL Cluster. Я никогда не видел, чтобы он работал хорошо и не падал много раз. Я не использовал его некоторое время (так как он действительно не работал год или около того).
Просто используйте ведущее устройство с ведомыми устройствами. Выполняйте все операции чтения на ведомых устройствах (если вам не нужно читать собственные записи или данные, текущие до мс). Если этого недостаточно для вас (вам придется много писать). Пора взглянуть на шардинг.
Другой вариант, если ваше приложение это позволяет (или может быть превращено в разрешающее