Требования: иметь практическое решение, которое работает для облака или любого типа среды, где нет доступа к аппаратным балансировщикам нагрузки, протоколам BGP и всем этим.
Номер запроса дохода приложения неизвестен, но он должен быть достаточно высоким, чтобы соответствовать ожиданиям увеличения нагрузки без страха.
Давайте найдем приложение с похожим характером загрузки, например, магазин журналов и приложение поиска. Я нашел один .
Что они хотят:
- Балансировать нагрузку на коллекторы
- Обеспечивает отказоустойчивость, позволяя нам продолжать прием данных, если один из сборщиков умирает или испытывает проблемы
- Горизонтальное масштабирование с ростом наших объемов журналов
Что они попробовали и узнали об ELB:
- Не работает, как ожидалось
- Проблемы с задержкой из-за увеличения нагрузки
- Недостаточно средств мониторинга
- Слишком много ограничений (количество открытых портов и протоколов)
Почему они выбрали с Route53:
- «Round Robin - довольно простая балансировка нагрузки, но она хорошо работает для нас с точки зрения эффективности»
- «Мы используем проверку работоспособности при отказе Route 53».
- «Если возникает проблема с коллектором, Route 53 автоматически выводит его из эксплуатации; наши клиенты не увидят никакого влияния».
- Предварительный прогрев с маршрутом 53 не требуется
Маршрут 53 оказался лучшим способом для Loggly воспользоваться нашими высокопроизводительными сборщиками, учитывая наши огромные объемы журналов, непредсказуемые изменения и постоянный рост нашего бизнеса. Это согласуется с основными целями сборщиков: сбор данных на скорости линии сети с нулевыми потерями, и это позволяет нам воспользоваться гибкостью всех сервисов AWS, которые мы используем в Loggly.
Этот конкретный пример показывает, что в некоторых сценариях (сборщик журналов, служба рекламы и т. П.) Балансировщик нагрузки избыточен, и «круговое решение проверки работоспособности DNS» отлично справляется со своей задачей.
Давайте посмотрим, что в AWS говорят об отказоустойчивости DNS:
С помощью DNS Failover Route 53 может обнаружить сбой вашего сайта и перенаправить ваших конечных пользователей в альтернативные или резервные местоположения, которые вы укажете. Маршрут 53 DNS Failover использует проверки работоспособности - регулярно отправляет интернет-запросы к конечным точкам ваших приложений из разных мест по всему миру - чтобы определить, работает ли каждая конечная точка вашего приложения или нет.
Этот метод также делает ELB (не требуется, просто для заметки) более устойчивым, опять же, он основан на RR + Health Check:
Маршрут 53 DNS Failover обрабатывает все эти сценарии сбоя путем интеграции с ELB за кулисами. После включения Route 53 автоматически конфигурирует и управляет проверками работоспособности для отдельных узлов ELB.
Давайте теперь посмотрим, как это работает за кулисами. Очевидный вопрос - как бороться с кешированием DNS:
Тем не менее, DNS-кэширование все еще может быть проблемой здесь (см. Наш предыдущий пост, где рассматривается проблема «длинного хвоста»), если TTL не соблюдается всеми слоями между вашим клиентом и Route 53. Затем вы можете применить технику «очистки кэша»: отправить запрос на уникальный домен
("http://<unique-id>.<your-domain>")
и определить подстановочный ресурс
Record "*.<your-domain>" to match it.
Algolia представила «стратегию повторных попыток клиента», которая работает очень хорошо, если ваш клиент (JS в вашем случае) может справиться с этим:
В итоге мы внедрили базовую стратегию повторов в наших клиентах API. Каждый клиент API был разработан для доступа к трем различным машинам. Три разные записи DNS представляли каждого пользователя: USERIDID-1.algolia.io, USERID-2.algolia.io и USERID-3.algolia.io. Наша первая реализация состояла в том, чтобы случайным образом выбрать одну из записей, а затем повторить попытку с другой в случае сбоя.