Прямой доступ к работникам Azure; в обход балансировщика нагрузки - PullRequest
9 голосов
/ 18 апреля 2011

Обычно доступ к работникам Azure осуществляется через конечные точки, определенные в определении службы. Эти конечные точки, которые должны быть TCP или HTTP (S), передаются через балансировщик нагрузки и затем подключаются к фактическому IP / порту компьютеров Azure.

Мое приложение значительно выиграет от использования UDP, поскольку я подключаюсь с сотовых устройств, где байты подсчитываются для выставления счетов, а издержки SYN / ACK / FIN затмевают 8-байтовые пакеты, которые я отправляю. Я даже подумывал поместить свои данные прямо в заголовки сообщений ICMP. Однако все это не поддерживается балансировщиком нагрузки.

Я знаю, что вы можете включить ping на виртуальных машинах Azure, а затем пинговать их - http://weblogs.thinktecture.com/cweyer/2010/12/enabling-ping-aka-icmp-on-windows-azure-roles.html.

Что-нибудь мешает мне использовать службу на основе TCP (предоставляемую через балансировщик нагрузки), которая просто раздает IP-адрес и порт адреса виртуальной машины Azure, а затем приложение связывается напрямую с этим работником? (Мне придется самому управлять балансировкой нагрузки.) Если рабочий будет остановлен или перемещен, мое приложение будет достаточно умным, чтобы повторно подключиться к конечной точке TCP и запросить новое место для отправки данных.

Работает ли эта концепция или есть что-то, что препятствует такому прямому доступу?

Ответы [ 2 ]

3 голосов
/ 18 апреля 2011

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

Существует серия из двух статей, написанная Бенджамином Гинебертьером, в которой описана маршрутизация запросов приложений IIS для обеспечения липких сессий ( часть 1 , часть 2 ). Это может быть хорошей отправной точкой.

Райан Данн также рассказал о маршрутизации http-сессии в Cloud Cover Show, а также о последующем сообщении в блоге .

Я понимаю, что эти два примера не совсем то, что вы делаете, поскольку они маршрутизируют http, но они имеют сходную предпосылку.

1 голос
/ 20 ноября 2013

Существует такая вещь, как InstanceInputEndpoint, которую можно использовать для определения портов на общедоступном IP-адресе, которые будут направлены на локальный порт в конкретном экземпляре виртуальной машины.Таким образом, у вас будет определенная комбинация порт + IP, которая может напрямую обращаться к конкретной виртуальной машине.

  <InstanceInputEndpoint name="HttpInstanceEndpoint" protocol="tcp" localPort="80">
    <AllocatePublicPortFrom>
      <FixedPortRange max="8089" min="8081" />
    </AllocatePublicPortFrom>
  </InstanceInputEndpoint>

Дополнительная информация: http://msdn.microsoft.com/en-us/library/windowsazure/gg557552.aspx

...