Липкие сессии: хорошо или плохо? - PullRequest
1 голос
/ 21 ноября 2011

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

Помогут ли липкие сессии решить эту проблему? Не одобряется ли использование липких сессий? И какие могут быть другие решения?

Я сейчас хостинг в Amazon, используя их балансировщик нагрузки.

1 Ответ

4 голосов
/ 21 ноября 2011

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

В противном случае я буду считать, что вы отправляете 2 быстрых запроса, и они попадают на оба ваших сервера с балансировкой нагрузки (как в случае циклического перебора)что ваша транзакция не завершится до того, как второй запрос попадет на сервер, и вы полагаете, что липкие сеансы решат эту проблему.

Липкий сеанс отправит все запросы в этом сеансе на тот же сервер.В вашем примере оба запроса теперь попадают на один и тот же сервер, и если вы больше ничего не сделаете, транзакция для первого запроса не будет зафиксирована до начала второго запроса, поэтому вы получите тот же результат, то есть только липкие сеансы не помогут.

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

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

В последнем случае, если ваши сеансы длятся некоторый интервал, например, 1/2 часа, если у вас есть N новых пользователей, они первоначально будут равномерно распределены между обоими вашими серверами.Если до 1/2 часа все пользователи с сервера 1 уйдут, а другие пользователи M войдут, то у вас будет больше нагрузки на сервер 2, на котором есть первоначальный пользователь N / 2 плюс новые пользователи M / 2, в то время как на сервере serer 1 только M /2 пользователя, т. Е. У вас будет потрачена впустую емкость, и вам потребуется код для исправления.

Бывают случаи, когда липкие сеансы могут быть полезны, но если у вас нет веских оснований для их использования, я бы их избегал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...