Как добиться кластеризации, балансировки нагрузки и отработки отказа для сессионных компонентов в OGS
JBoss, похоже, имеет довольно простой набор аннотаций / конфигураций для сессионных компонентов кластеризации и балансировки нагрузки, но я не вижу тех же функций в документах GlassFish 3.x.
Допустим, у меня есть оба MyStatefulBean
а также MyStatelessBean
фасоль. Для них обоих я хочу следующие возможности:
- Я хочу иметь возможность создать кластер bean-компонента (с любым числом или масштабом) и поместить его за программный балансировщик нагрузки, который будет округлять бины; а также
- Если по какой-либо причине один из кластерных компонентов не работает, я хочу, чтобы он был удален из пула
GlassFish free/(версия для сообщества) даже поддерживает это или мне придется реализовать это самостоятельно?
Касательно первого вопроса: имеет ли смысл кластеризация / балансировка нагрузки даже при формировании бинов с состоянием? Я не думаю, что сейчас, когда я думаю об этом...
2 ответа
Во-первых, вам нужно включить высокую доступность для приложения, если вы хотите сохранить состояние сеанса при сбое. Если вы используете консоль администратора, для этого есть флажок на экране развертывания приложения. Если вы выполняете развертывание из командной строки, используйте "asadmin deploy --availabilityenabled=true --target mycluster myapp.ear".
Когда выполняется поиск компонента, сгенерированный прокси / заглушка RMI компонента содержит список всех доступных кластеризованных экземпляров GlassFish. Порядок серверов генерируется случайным образом, и заглушка RMI выберет сервер в верхней части списка. Вот как нагрузка распределяется по кластеру. В случае сбоя удаленного сервера будет выбран следующий сервер в списке. Если удаленный компонент является сессионным компонентом с состоянием, то сеанс сохраняется при восстановлении после сбоя.
Как упоминает @pdudits, пожалуйста, прочитайте документацию по этому вопросу для более подробного освещения.
Надеюсь это поможет!
Если вы планируете вызывать компоненты через удаленные вызовы, то вам нужна глава в Руководстве по высокой доступности.
Аварийное переключение bean-компонентов с состоянием имеет смысл, но балансировка нагрузки также возможна. Имейте в виду, что у этого есть свои пределы, самое большое из которых, что расширенный контекст постоянства не может быть использован.
- Размеры пула для bean-компонента указываются в настройках сервиса EJB и могут быть переопределены в
glassfish-ejb-jar.xml
для конкретного боба - AFAIK, это то, что говорит EJB Spec - когда возникает системное исключение (это включает непроверенные исключения), бин уничтожается.