репликация сеанса tomcat без многоадресной рассылки
-
03-07-2019 - |
Вопрос
я планирую использовать 2 выделенных корневых сервера, арендованных у хостинг-провайдера.эти машины будут запускать tomcat 6 в кластере.если позже я добавлю дополнительные машины - маловероятно, что они будут доступны с многоадресной рассылкой, потому что они будут расположены в разных подсетях.
можно ли запустить tomcat без многоадресной рассылки?все учебные пособия по кластеризации tomcat 6 включают многоадресную рассылку heartbeat.есть ли какие-либо альтернативы SimpleTcpCluster?
или в данной ситуации более уместны другие альтернативы?
Решение
Поскольку нет контроля над расстоянием между обоими серверами (они могут находиться в двух разных центрах обработки данных) и нет выделенной линии связи между серверами, я бы предпочел запускать их через циклический DNS или балансировщик нагрузки, который перенаправляет клиентов либо на www1.yourdomain.xxx, либо на www2.yourdomain.xxx и тщательно обрабатывает связь с сервером.
Если серверы интенсивно взаимодействуют друг с другом, вы можете либо изменить свою архитектуру, либо оптимизировать свое приложение так, чтобы оно "умещалось" на одном сервере (по крайней мере, на некоторое время), либо перейти на выделенный хостинг с контролем местоположения, расстояния и прокладки кабелей на ваших серверах.В противном случае ваша межсерверная коммуникация, сердцебиение и т.д.будет использовать тот же канал, что и клиенты, которые общаются с ним (напримертот же сегмент сети), который может замедлить работу всех.
Если вы действительно ожидаете такой большой нагрузки, я полагаю, здесь задействованы по крайней мере какие-то деньги, не так ли?Используйте это с умом и используйте свои навыки настройки для решения задач посложнее, чем настройка распределенной кластеризации без контроля или выделенных линий.
Другие советы
Увидев комментарий к вопросу после того, как я дал свой другой ответ, я озадачен тем, в чем заключается ваш вопрос...Речь идет о репликации сеанса?Кластерная коммуникация?Возможно, было бы лучше изложить вашу проблему вместо запланированного решения, которое само по себе имеет проблемы.
Я изложу некоторые возможные проблемы вместе с краткими ответами:
Ваше приложение требует больших затрат процессора и оперативной памяти
- Профилируйте его, оптимизируйте, попробуйте еще раз
- Купите сервер побольше / получше
Ваше приложение требует большой пропускной способности
- использование кластеризации cheapo, о которой вы упомянули в своем вопросе, скорее всего, ухудшит ситуацию, поскольку для межсерверной связи используется тот же (скрытый) канал, что и для связи клиент-сервер
- Возможно, вы сможете разделить различные виды пропускной способности, напримерза счет того, что динамический контент обслуживается с другого сервера, чем статический контент:Здесь нет необходимости в межсерверном взаимодействии
Ваше приложение требует больших затрат памяти
- приобретите сервер побольше
- перейдите на выделенный хостинг и установите столько вращающихся дисков, сколько вам нужно
- посмотрите, подойдут ли вам другие модели (например, amazons S3 storage).)
Скорее всего, ваше приложение будет иметь косую черту
- определите, какой из вышеперечисленных факторов (или других) определяет ограничения вашего приложения, и исправьте это.
Вам просто нужна репликация сеанса?
- Интерфейс Tomcats SessionManager небольшой и может быть легко реализован / расширен самостоятельно.Используйте его для любой репликации сеанса, которая вам нравится.Смотрите на Стандартный менеджер документация и реализация для получения дополнительной информации
Еще идеи
- обратите внимание на более гибкие настройки, такие как EC2 (Amazon), предложения Google или другие настройки облачных вычислений.Используйте их собственное облачное хранилище и средства межсерверной связи.Будьте осторожны, чтобы не слишком зависеть от этой инфраструктуры.
Я, конечно, кое-что забыл, но это могло бы послужить некоторой отправной точкой.Будьте более конкретны в характере вашей основной проблемы, чтобы получить лучшие ответы :)
Я пытаюсь развернуть центральный сервер аутентификации yale Central Authentication Server (CAS), и я хотел бы объединить его в кластер для обеспечения избыточности, поскольку это критически важный элемент инфраструктуры.CAS требует, чтобы сеанс был реплицирован, потому что после того, как пользователь входит в приложение A и переходит к приложению B, которое участвует в домене с единым входом, приложение B отправляет запрос в CAS, чтобы определить, есть ли у пользователя активный "билет".Поскольку нет устройства, указывающего приложению B, к какому узлу оно должно обратиться для проверки заявки, все активные заявки в одном узле должны быть реплицированы на все узлы кластера.Другими словами, липкость сеанса здесь не является решением, потому что приложение B, проверяя тикет в файле cookie пользователя, не знает идентификатор сеанса исходного сеанса в приложении A, во время которого пользователь вошел в систему.
Таким образом, CAS требует, чтобы сеанс был реплицирован на всех узлах.Требование о том, чтобы сеть поддерживала многоадресную рассылку, добавляет нетривиальный объем накладных расходов и немного усложняет развертывание этого подхода.Я протестировал этот проект в Google Code:
http://code.google.com/p/memcached-session-manager
который кажется очень полезным и простым в развертывании (по крайней мере, в ОС Linux), но, к сожалению, обеспечивает только переключение сеанса и не является решением для репликации сеанса.
Просто используй http://code.google.com/p/memcached-session-manager/ .Это отлично работает.Мы используем его в течение многих лет для этой настройки с 20 сеансами совместного использования серверов Tomcat.У вас может быть один или два сервера memcached для обработки репликации сеанса.