Назад | Перейти на главную страницу

Наивна ли эта схема балансировки нагрузки / горизонтального масштабирования?

Я предлагаю свое решение следующей проблемы и прошу вас, профессионалов в области сетевых и серверных администраторов, проверить его или найти в нем бреши. Меня интересуют любые очевидные векторы атак или проблемы масштабируемости, которые вы можете увидеть. Спасибо!

Требования:

Схема:

            PUBLIC NETWORK
+-----+------+--------+-----+------->
      |      |        |     |
      v      v        v     v
    +---+  +---+     +--+  +--+
    |LB1|  |LB2| ... |S1|  |S2| ...
    +---+  +---+     +--+  +--+

Избыточные балансировщики нагрузки (LB *, через что-то вроде DNS RR или просто аварийное переключение): их единственная цель - предложить клиентам URI для некоторого экземпляра сервера приложений, который затем клиент будет постоянно использовать для своих запросов. Первоначально распределение будет случайным или циклическим.

Каждый экземпляр сервера приложений (S *) независимо обрабатывает запросы напрямую от клиентов.

Архитектура без сохранения состояния позволяет отключать отдельные серверы. Клиенты запрашивают новый сервер у балансировщиков нагрузки, если их назначенный сервер выходит из строя.

Новые серверы приложений могут раскручиваться, регистрироваться в балансировщиках нагрузки и очень быстро назначаться клиентам. Все S * будут иметь запись DNS субдомена для совместного использования подстановочного сертификата.

Наивная реализация может быть выполнена полностью на одном сервере с нулевым резервированием и делегировать ответственность для расширения по мере необходимости.

Непосредственные опасения

Брандмауэр и защита от DDoS-атак должны управляться на каждом сервере, а не централизованно, как у обратных прокси-серверов с балансировкой нагрузки. Насколько я понял, централизованное управление конфигурацией - это так далеко.

Эта схема не использует преимущества географического положения или времени ответа сервера, как это было бы в случае с Anycast DNS. Это сознательный компромисс для большей вероятности привязки к серверу, и, возможно, его можно будет использовать позже.

В целом это выглядит неплохо, но в схеме есть пробелы.

  • Объясните, как клиент знает, что нужно отступить, если сервер выйдет из строя. (думаю, самая большая проблема)
  • Объясните, как ваши балансировщики нагрузки просто предоставляют URI. Это просто веб-серверы?
  • Как вы обрабатываете данные с отслеживанием состояния, такие как файлы cookie сеанса, которые могут передавать неявные данные с предыдущего сервера. Или вы используете обычные файлы cookie?
  • Как зарегистрироваться в балансировщике нагрузки?
  • Как в таком дизайне будет работать хранилище? Как это масштабируется?
  • Как балансировщик нагрузки фактически балансирует нагрузку в этой схеме? Поскольку все, что он предлагает, - это ссылки, он не может узнать, когда сеанс завершился на стороне сервера.
  • Как балансировщик нагрузки узнает, что сервер не работает?