Могут ли несколько экземпляров одной и той же роли общаться друг с другом, получив VIP-адрес (виртуальный IP-адрес) для определенной конечной точки, прослушиваемой всеми этими экземплярами из RoleEnvironment
? Если это так, возвращаемый VIP может быть сбалансирован по нагрузке для экземпляра вызывающей стороны (из RoleEnvironment
методов).
Сетевое взаимодействие Azure между экземплярами одной роли
Ответы (1)
Экземпляры ролей могут взаимодействовать друг с другом через внутренние конечные точки. В отличие от входных конечных точек, они видны только другим экземплярам в рамках развертывания (независимо от роли).
Говоря напрямую, через внутреннюю конечную точку, вы полностью обходите балансировщик нагрузки external-VIP. Итак, если у вас есть три экземпляра рабочей роли, к которым вы пытаетесь подключиться (скажем, там, где находится ваша служба REST), вам придется выполнить собственную балансировку нагрузки для трех экземпляров.
Работать с внутренними конечными точками так же просто, как с входными конечными точками. Сначала настройте один:
Затем возьмите одну наугад. Например (в самом грубом смысле этого слова):
var random = new Random();
var role = RoleEnvironment.Roles["WorkerRole1"];
var instanceNumber = random.Next() % role.Instances.Count;
var ipendpoint = role.Instances[instanceNumber].InstanceEndpoints["myservice"].IPEndpoint;
var address = ipendpoint.Address;
var port = ipendpoint.Port;
Примечание. Вы по-прежнему можете обращаться к конечной точке ввода в любой роли из любой роли. В этот момент вы будете сбалансированы по нагрузке, как и любой другой трафик, поступающий из внешнего мира. И вам также придется беспокоиться о безопасности (в отличие от внутренних конечных точек).
RoleEnvironment
? (2) Если вы получаете свой собственный IP-адрес от RoleEnvironment
и получаете доступ к сервису через этот IP-порт: покидают ли сетевые пакеты этот экземпляр виртуальной машины и возвращаются ли они с маршрутизатора или нет? (Я думаю, что они не должны, но я не уверен.)
- person Ahmet Alp Balkan; 02.05.2013