Эта схема распределения нагрузки / горизонтального масштабирования наивна?
Я предлагаю свое решение следующей проблемы и прошу вас, профессионалы в области сетевых технологий и администрирования серверов, проверить ее или выявить в ней дыры. Меня интересуют любые очевидные векторы атак или проблемы масштабируемости, которые вы можете увидеть. Спасибо!
Требования:
- Поддержка HTTPS, обрабатывается каждым сервером приложений независимо
- почти линейная горизонтальная масштабируемость
- пропускная способность, распределенная по серверам (данные ответов не все возвращаются через LB или прокси)
- что-то вроде аварийного переключения для серверов приложений и балансировщиков нагрузки
- клиент-серверная близость
- Linux-friendly (решение не с закрытым исходным кодом)
- самонастройки удобно! (т.е. низкая начальная стоимость)
Схема:
PUBLIC NETWORK
+-----+------+--------+-----+------->
| | | |
v v v v
+---+ +---+ +--+ +--+
|LB1| |LB2| ... |S1| |S2| ...
+---+ +---+ +--+ +--+
Избыточные балансировщики нагрузки (LB*, через что-то вроде DNS RR или просто аварийное переключение): их единственная цель - предложить клиентам URI для некоторого экземпляра сервера приложений, который клиент затем будет постоянно использовать для своих запросов. Первоначально распределение будет случайным или циклическим.
Каждый экземпляр Application Server (S*) независимо обрабатывает запросы напрямую от клиентов.
Архитектура без сохранения состояния позволяет отключать отдельные серверы. Клиенты запрашивают новый сервер у балансировщиков нагрузки в случае сбоя назначенного им сервера.
Новые серверы приложений могут раскручиваться, регистрироваться с помощью балансировщиков нагрузки и очень быстро назначаться клиентам. Все S * будут иметь DNS-запись субдомена для совместного использования сертификата с подстановочными знаками.
Наивная реализация может быть выполнена полностью на одном сервере с нулевой избыточностью и делегировать обязанности по мере необходимости.
Непосредственные проблемы
Защита брандмауэром и DDoS должна осуществляться на каждом сервере, а не централизованно, как у вас с обратными прокси-серверами с балансировкой нагрузки. Централизованное управление конфигурацией, насколько я думал, это.
Эта схема не использует преимущества географического местоположения или времени отклика сервера, как это делает Anycast DNS. Это осознанный компромисс для большей вероятности привязки к серверу, и, возможно, он будет добавлен позднее.
1 ответ
На высоком уровне это выглядит хорошо, но в схеме есть некоторые пробелы.
- Объясните, как клиент знает, что нужно откатиться, если сервер отключится (самая большая проблема, я думаю)
- Объясните, как ваши балансировщики нагрузки просто предоставляют URI. Это просто веб-серверы?
- Как вы обрабатываете данные с состоянием, такие как сеансовые куки, которые могут передавать неявные данные с предыдущего сервера. Иначе, вы используете нормальные куки?
- Как вы регистрируетесь с балансировщиком нагрузки?
- Как будет работать хранилище в этом проекте? Как это масштабируется?
- Как балансировщик нагрузки фактически уравновешивает нагрузку в этой схеме? Поскольку все, что он предлагает, это рефералы, у него нет возможности узнать, когда сеанс закончился на стороне сервера.
- Как балансировщик нагрузки узнает, что сервер не работает?