Оптимальное распределение нагрузки может быть очень дорогим и сложным. Базовая балансировка нагрузки должна просто гарантировать, что каждый сервер обслуживает примерно одинаковое количество обращений в любое время.
Самый простой способ распределения нагрузки - предоставить несколько записей A в DNS. По умолчанию IP-адрес будет настроен методом циклического перебора. Это приведет к тому, что пользователи будут относительно равномерно распределены по серверам. Это хорошо работает для сайтов без гражданства. Немного более сложный метод требуется, когда у вас есть сайт с состоянием.
Для обработки требований к состоянию вы можете использовать перенаправления. Дайте каждому веб-серверу альтернативный адрес, такой как www1, www2, www3 и т. Д. Перенаправьте начальное соединение www на альтернативный адрес хоста. Таким образом, у вас могут возникнуть проблемы с закладками, но они должны быть равномерно распределены по серверам.
Альтернативно, использование другого пути для указания того, какой сервер обрабатывает сеанс с отслеживанием состояния, позволило бы проксировать сеансы, которые переключили хост на исходный сервер. Это может быть проблемой, когда сеанс для неисправного сервера прибывает на сервер, который перешел с неисправного сервера. Однако, за исключением программного обеспечения для кластеризации, в любом случае состояние будет отсутствовать. Из-за кэширования в браузере у вас может не быть большого количества сеансов, меняющих серверы.
Отказоустойчивость может быть обработана путем настройки сервера на получение IP-адреса отказавшего сервера. Это минимизирует время простоя в случае сбоя сервера. Без программного обеспечения кластеризации сеансы с сохранением состояния будут потеряны в случае сбоя сервера.
Без аварийного переключения пользователи будут испытывать задержку, пока их браузер не переключится на следующий IP-адрес.
Использование служб Restful, а не сеансов с состоянием, должно устранить проблемы с кластеризацией на внешнем интерфейсе. Проблемы с кластеризацией на стороне хранилища все еще будут применяться.
Даже с балансировщиками нагрузки перед серверами у вас, скорее всего, будет круговой DNS перед ними. Это обеспечит использование всех ваших балансировщиков нагрузки. Они добавят еще один слой к вашему дизайну, с дополнительной сложностью и еще одной точкой отказа. Тем не менее, они могут обеспечить некоторые функции безопасности.
Лучшее решение будет зависеть от соответствующих требований.
Внедрение серверов изображений для обслуживания контента, такого как изображения, файлы CSS и другой статический контент, может облегчить загрузку серверов приложений.