Вимоги: мати практичне рішення, яке працює для хмари або будь-якого типу оточення, де немає доступу до апаратних балансирів завантаження, протоколів BGP та всього іншого.
Номер запиту на прибуток програми невідомий, але він повинен бути достатньо високим, щоб без побоювань відповідати збільшеному очікуванню навантаження.
Давайте знайдемо додаток з подібним характером навантаження, наприклад, магазин журналів і додаток пошуку. Я знайшов одного .
Що вони хочуть:
- Збалансуйте навантаження в колекторах
- Запропонуйте відмовостійкість, дозволяючи нам продовжувати приймати дані, якщо хтось із колекторів помирає або виникає проблема
- Масштабуйте горизонтально зі збільшенням обсягів нашого журналу
Що вони спробували та дізналися про ELB:
- Не працює, як очікувалося
- Проблеми із затримкою через збільшення навантаження
- Недостатньо спостереження
- Занадто багато обмежень (кількість відкритих портів та протоколів)
Чому вони вибрали маршрут Route53:
- "Круглий робін є досить базовим балансуванням навантаження, але він добре працює для нас з точки зору ефективності"
- "Ми використовуємо переваги перевірок здоров'я на маршруті 53".
- "Якщо з колектором виникла проблема, маршрут 53 автоматично виводить її з сервісу; наші клієнти не побачать жодного впливу".
- Не потрібно попереднього розминки на маршруті 53
Маршрут 53 виявився найкращим способом для Loggly скористатися нашими високоефективними колекціонерами, враховуючи величезний обсяг журналів, непередбачувані зміни та постійний ріст нашого бізнесу. Він узгоджується з основними цілями колекторів: збирати дані зі швидкістю мережевої лінії з нульовими втратами, і це дозволяє нам скористатися еластичністю всіх служб AWS, які ми використовуємо в Loggly.
Цей конкретний приклад показує, що в деяких сценаріях (збирач журналів, сервіс рекламних оголошень або подібний) балансир навантаження є зайвим, і "рішення здоров'я DNS для перевірки здоров'я круглої лінії" робить свою роботу дуже добре.
Давайте подивимося, що AWS кажуть про перехід на DNS:
За допомогою DNS Failover Route 53 може виявити відключення вашого веб-сайту та перенаправити кінцевих користувачів на чергування або резервне копіювання вказаних вами місць. Маршрут 53 DNS Failover покладається на перевірки здоров’я - регулярно надсилаючи Інтернет-запити до ваших додатків кінцевими точками з різних місць по всьому світу, щоб визначити, чи є кожна кінцева точка вашої програми вгору чи вниз.
Ця техніка також робить ELB (не потрібен, лише на замітку) більш надійним, знову ж таки, він заснований на RR + Health Check:
Маршрут 53 DNS Failover обробляє всі ці сценарії відмов шляхом інтеграції з ELB за кадром. Після ввімкнення Маршрут 53 автоматично налаштовує та керує перевірками стану здоров'я для окремих вузлів ELB.
Давайте тепер подивимося, як це працює за сценою. Очевидне питання - як поводитися з кешуванням DNS:
Однак кешування DNS все ще може бути проблемою тут (див. Наш попередній пост, де висвітлюється проблема "довгого хвоста"), якщо TTL не дотримується всіма шарами між вашим клієнтом та маршрутом 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. Наша перша реалізація полягала у тому, щоб випадковим чином вибрати один із записів, а потім повторити спробу з іншим у разі відмови.