Мне интересно концептуально, как балансировка нагрузки работает на уровне EJB (а не репликация веб-сеанса) с контейнерами Java EE, такими как Glassfish. Из того, что я понял, ваш удаленный интерфейс — это прокси, который делегирует ваш вызов одному из многих серверов, которые могут быть в вашей среде.
Ты прав. В Glassfish первоначальный поиск попытается связаться с одним из серверов, перечисленных в файле jndi.properties
. Затем сервер знает все остальные узлы в кластере, которые будут использоваться для циклического перебора. Удаленная ссылка (прокси) сделает это за вас прозрачно. Теоретически узлы можно добавлять/удалять из кластера динамически. См. раздел балансировка нагрузки и отработка отказа Glassfish RMI-IIOP а>.
Если что-то пойдет не так, они должны быть в состоянии «закончить» на другом сервере? Я хочу понять основную теорию этой балансировки нагрузки, почему она лучше, чем куча серверов, на которых запущено простое веб-приложение с привязкой сеансов к балансировщику нагрузки?
Если bean-компонент не имеет состояния, вам даже не нужна какая-либо привязка, и запрос может быть обработан на любом узле. Каждая удаленная ссылка сама по себе действует как балансировщик нагрузки.
Если bean-компонент с полным состоянием, он более волосатый. Кластер будет пытаться поддерживать 2 реплики компонента. И запрос рассылается против этих двух реплик. Если один из узлов выйдет из строя, кластер будет воссоздавать другую реплику до тех пор, пока узел не вернется. Это действительно похоже на репликацию сеанса HTTP с привязкой сеанса.
Но, в отличие от веб-сервера, bean-компоненты являются транзакционными компонентами. Поэтому, если возникает исключение, транзакция откатывается, а bean-компонент с отслеживанием состояния становится недействительным, поскольку его состояние больше не может быть согласованным.
Как указал Паскаль, для определенного вида сбоя существует своего рода отказоустойчивость. Если узел недоступен, запрос может быть перенаправлен на другой узел. Но если узел выходит из строя во время обработки запроса, я не знаю, сможет ли он повторно отправить его куда-нибудь еще.
Если вы хотите узнать больше, я предлагаю вам прочитать Руководство по высокой доступности GlassFish и Поддержка кластеров в Glassfish.
person
ewernli
schedule
13.03.2010