репликация сеанса tomcat без многоадресной рассылки

StackOverflow https://stackoverflow.com/questions/153392

Вопрос

я планирую использовать 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 для обработки репликации сеанса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top