Рубрики
Uncategorized

Почему вы никогда не должны использовать липкие сеансы

Этот пост был первоначально опубликован в моем блоге. Липкие сессии дают возможность маршрутизации входящего … Tagged с WebDev, DevOps, Architecture.

Этот пост был первоначально опубликован В моем блоге Анкет

Sticky Sessions предоставляют возможность маршрутизации входящих запросов на конкретный сервер на основе их идентификатора сеанса. Обычно мы находим их в приложениях, которые поддерживают их состояние в не-жестком обслуживании. Примером является сохранение состояния в памяти или на жестком диске сервера. В этой статье мы обсудим, что такое липкие сеансы. Мы также объясним, почему они «плохие», и как разработать приложение, чтобы мы могли полностью их избежать.

Как работают липкие сеансы?

Привязывая сеанс IID с конкретным сервером на нашей инфраструктуре, переопределяет нашу стратегию по умолчанию-балансу. Ниже вы можете увидеть диаграмму, показывающая, как пользователь может запросить сеанс с наших серверов. Балансировщик нагрузки направляет запрос на случайном сервере, в нашем примере, сервер 2.

После получения SessionID сеанс ограничен сервером 2. В этом случае балансировщик нагрузки пересылает каждый последовательный запрос на этот сервер.

Обычно это случается с помощью приложений, которые поддерживают их состояние в каком -то локальном хранилище, например, память или жесткий диск. Таким образом, Server 1 не имеет доступа к действиям, выполняемым предыдущими запросами. Сервер 2 теперь обязан обслуживать эти запросы.

Почему вы должны избегать липких сессий?

Они могут легко снизиться

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

Наше приложение не масштабируется правильно

Еще один ключевой момент, о котором мы должны упомянуть, заключается в том, что липкие сеансы не позволяют наше приложение правильно масштабироваться. Когда мы связываем сервер с определенным запросом, мы напрямую удаляем возможность использовать емкость наших других серверов для выполнения последовательных запросов. В результате, когда мы выполняем интенсивную задачу ЦП в конкретном сеансе, мы заставляем один экземпляр нашей инфраструктуры для обработки всей его нагрузки.

Они могут быть опасными.

Кроме того, обязательные сеансы с конкретными серверами также могут вызвать проблемы безопасности. Что если кто -то решит создать сеанс, а затем выполнить набор очень интенсивных процессовых запросов в нашем приложении? См. Пример ниже.

Балансировщик нагрузки пересылает каждый запрос на сервер, на который ограничен сеансом. Это называется атакой DOS, и это значительно увеличивает загрузку сервера. Используя липкие сеансы, злоумышленник может выполнить эту операцию с половиной ресурсов, которые потребуются, если мы не используем их. Это верно только для конкретного примера. Чем больше инфраструктура, тем выше вероятность того, что кто -то потрудится использовать эту «уязвимость». Это позволило бы злоумышленнику снять наши серверы один за другим, с значительно более низкой стоимостью. Кроме того, это потребовало бы, чтобы мы создали дополнительные правила мониторинга для распознавания такого типа атаки, потому что общая нагрузка сервера наших серверов не будет такой высокой, когда будет атакован только один сервер.

Есть альтернатива?

Да, есть, и вы, вероятно, должны его использовать. Приложение может избавиться от липких сессий, используя внешнюю службу для сохранения его состояния. См. Пример ниже.

Каждый сервер выполняет действия, сохраняя процесс каждой задачи или запроса на общий ресурс, такой как MySQL или Redis, делая его доступным для всех других серверов нашей инфраструктуры. Таким образом, балансировщик нагрузки пересылает каждый запрос между всеми доступными серверами, а не одним. Кроме того, серверы могут обслуживать последовательные запросы независимо от того, какой сервер обслуживал предыдущий.

Если вы нашли этот пост в блоге полезным, вы можете Подпишитесь на мою бюллетени И сначала узнайте о любых новых сообщениях.

People Vector, созданный PCH.Vector — www.freepik.com

Оригинал: «https://dev.to/gkoniaris/why-you-should-never-use-sticky-sessions-2pkj»