Моя ситуация довольно проста и, я думаю, она встречается довольно часто. У меня есть несколько проектов, которые выглядят почти одинаково - один проект состоит из:
- Серверов статического контента - есть несколько достойных решений CDN, которые решают эту проблему;
- Серверы HTTP Frontend - которые должны получать входящие запросы, распределять их по внутренним серверам, получать ответы и отправлять их пользователям
- Внутренние HTTP-серверы - масштабируемые, правильно распределенные по всему миру
- Серверы баз данных / серверы NoSQL / все, что хранит данные
Проблема здесь ( 2) - фронтенд-серверы. Мы используем несколько технологий для обеспечения отказоустойчивости и балансировки нагрузки с помощью внешних интерфейсов, а именно:
- циклический перебор DNS и переключение зон DNS - не совсем , что хорошо справляется с балансировкой нагрузки, очень медленно восстанавливается после сбоя (т.е. переключение зон DNS занимает не менее 15-20 минут на практике даже с 1-минутным TTL).
- Переключение BGP - довольно дорого, требует больших организационных усилий (т. Е.получение как минимум / 23 блока IP-адреса), не очень практично переключаться между более чем двумя путями
- Anycast BGP - в основном, также довольно дорого и сложно
- Переключение между серверами в одном центре обработки данных с использованием VRRP / CARP в маршрутизатор - наиболее жизнеспособная альтернатива, но не совсем отказоустойчивая из-за того, что единственный центр обработки данных является SPoF
Если подумать, я подумал, что должно быть готовым SaaS-решением для этой проблемы. В нашем следующем проекте я мечтаю сделать его таким образом:
- Создать бэкенды, развернуть их по всему миру, подготовить их IP-адреса
- Купить доменное имя
- Подпишитесь на внешнюю службу, которая:
- Предоставьте мне IP-адреса, на которые я буду указывать в моем доменном имени.
- Иметь гарантированно, что веб-серверы будут постоянно прослушивать эти IP-адреса
- Мониторинг мои бэкэнды
- Перенаправлять запросы, которые он получает, к наименее загруженному рабочему бэкэнду (в идеале, корректировка политики балансировки нагрузки с использованием некоторых принципов географической / сетевой задержки)
- Получение ответа от бэкэнда и отправка его обратно пользователю
I сделал домашнее задание и обнаружил, что существует несколько доступных SaaS-решений для балансировки нагрузки:
- Amazon CloudFront - но на самом деле это не сервер пересылки внешнего интерфейса , а интерфейс, обслуживающий контент (т. е.в основном CDN как услуга)
- Amazon Elastic Load Balancing - похоже, это то, что я искал, но он не работает с серверными модулями, не размещенными на EC2
- Azure , похоже, включает некоторые своего рода «балансировщик нагрузки», но он также работает только с серверами, размещенными в Azure
- Облачные балансировщики нагрузки RackSpace , похоже, также работают только с серверными модулями, размещенными на RackSpace
- , Storm Cloud Load Balancer , опять же, похоже, работает только с серверами, размещенными на Storm
. Интересно, существует ли что-нибудь еще, что могло бы сделать развертывание моей мечты реальностью? Может я ошибаюсь и такого не существует? Или я просто ищу неправильный термин, а для такой службы уже есть другой общепринятый термин?
задан
GreyCat
30 November 2012 в 03:00
Ссылка