Балансировка нагрузки экземпляров Windows Azure локально
При развертывании нескольких экземпляров WebRole
в Windows Azure Emulator
эмулятор запускает несколько экземпляров IIS Express WebRole, каждый из которых имеет зарезервированный локальный IP-адрес, например:
127.255.0.1
127.255.0.2
127.255.0.3
Проблема в том, что я хочу получить доступ к WebRole, как если бы он был действительно развернут в Azure, мне нужно проверить, что Session State
сохраняется между экземплярами.
Так как мой Session Id
хранится в cookie, каждый раз, когда я подключаюсь к другому экземпляру, мне нужно вручную "вставить" cookie в запрос для проверки данных сеанса (поскольку браузер рассматривает IP следующего экземпляра как другой домен).
Есть ли способ, которым я могу использовать hostname
(на компьютере с Windows 7), который случайно указывает на один из этих IP?
1 ответ
Ну, по-видимому, эмулятор выполняет балансировку нагрузки для всех запросов между экземплярами:
Нажатие "Отладка" в облачном проекте откроет веб-страницу с IP-адресом, который является виртуальным балансировщиком нагрузки (обычно 127.0.0.1:80, если он еще не занят).
Тем не менее, во-первых, меня ввели в заблуждение две вещи:
- 1. Список нескольких экземпляров IIS Express, каждый из которых имеет свою привязку (изображение прилагается).
2. Неявная близость:
Я заставил свое веб-приложение вывести идентификатор экземпляра и постоянно получал один и тот же идентификатор экземпляра. Причиной этого является (я полагаю) сродство, которое обеспечивает эмулятор (возможно, с использованием сравнения файлов cookie).
Заключение:
Если вы хотите вручную загрузить баланс или самостоятельно контролировать сродство, вы можете использовать IIS Server Farming
возможности (как я в конце концов) эмулировать балансировку нагрузки.
(Apache / Nginx как своего рода "обратный прокси-сервер" также является хорошим вариантом, но я предпочел придерживаться продуктов, которые уже установлены и используются).