Назад |
Перейти на главную страницу
Гарантированная клиентская служба пересылки HTTP (надежный облачный балансировщик нагрузки)
Моя ситуация довольно проста и, думаю, встречается довольно часто. У меня есть несколько проектов, которые выглядят примерно одинаково - один проект состоит из:
- Серверы статического контента - есть несколько достойных решений для CDN, которые решают эту проблему.
- Frontend HTTP-серверы, которые должны получать входящие запросы, распределять их по внутренним серверам, получать ответы и публиковать их обратно пользователям.
- Backend HTTP-серверы - масштабируемые, правильно распределенные по всему миру
- Серверы баз данных / серверы NoSQL / все, что хранит данные
Проблема здесь (2) - внешние серверы. Мы используем несколько технологий для обеспечения отказоустойчивости и балансировки нагрузки с помощью внешних интерфейсов, а именно:
- Циклический перебор DNS и переключение зон DNS - не совсем который хорошо балансирует нагрузку, очень медленно восстанавливается после сбоя (т.е. переключение зон DNS на практике занимает не менее 15-20 минут даже с 1-минутным TTL)
- Коммутация BGP - довольно дорого, требует больших организационных усилий (например, получение как минимум / 23 блока IP-адреса), не очень практично переключаться между более чем двумя путями
- BGP anycast - тоже довольно дорого и сложно
- Переключение между серверами в одном центре обработки данных с использованием VRRP / CARP на маршрутизаторе - наиболее жизнеспособная альтернатива, но не совсем отказоустойчивая из-за того, что один центр обработки данных является SPoF
Если подумать, я думал, что там должен быть готовым SaaS-решением этой проблемы. В нашем следующем проекте я мечтаю сделать его таким:
- Создавайте бэкенды, развертывайте их по всему миру, готовьте их IP-адреса
- Купить доменное имя
- Зарегистрируйтесь во внешней службе, которая:
- Предоставьте мне IP-адреса, на которые я укажу свое доменное имя
- Иметь гарантированные веб-серверы, постоянно прослушивающие эти IP-адреса
- Следите за моими бэкэндами
- Перенаправлять запросы, которые он получает, на наименее загруженный рабочий сервер (в идеале, корректировка политики балансировки нагрузки с использованием некоторых принципов географической / сетевой задержки)
- Получите ответ от бэкэнда и отправьте его пользователю
Я сделал домашнее задание и обнаружил, что существует несколько доступных решений SaaS для балансировки нагрузки:
- Amazon CloudFront - но на самом деле это не интерфейс экспедитор, но контент, обслуживающий интерфейс (т.е. в основном CDN как услуга)
- Amazon Elastic Load Balancing - похоже, это то, что я искал, но он не работает с бэкэндами, не размещенными на EC2
- Лазурь похоже, включает какой-то «балансировщик нагрузки», но он также работает только с серверами, размещенными в Azure.
- Балансировщики нагрузки RackSpace Cloud также, похоже, работает только с серверными модулями, размещенными на RackSpace
- Балансировщик нагрузки Storm Cloudопять же, похоже, работает только с серверами, размещенными на Storm
Интересно, существует ли что-нибудь еще, что могло бы воплотить мою мечту в реальность? Может я ошибаюсь и такого не существует? Или я просто ищу не тот термин, а уже есть другой общепринятый термин для такой услуги?