同一角色的多个角色实例是否可以通过获取RoleEnvironment
中所有这些实例所侦听的特定端点的VIP(虚拟IP)地址来相互通信?如果是这样,则返回VIP可以对调用者(RoleEnvironment
方法)实例本身进行负载平衡。
答案 0 :(得分:6)
角色实例可以通过内部端点相互通信。与输入端点不同,它们仅对部署中的其他实例可见(无论角色如何)。
直接通过内部端点直接说话,完全绕过外部VIP负载均衡器。因此,如果您有三个正在尝试连接的辅助角色实例(例如,您的REST服务所在的实例),则必须在3个实例之间进行自己的负载平衡。
使用内部端点与输入端点一样简单。首先设置一个:
随后抓一个。例如(最粗略的意思):
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;
注意:您仍然可以从任何角色访问任何角色的输入端点。此时,您将像来自外部世界的任何其他流量一样进行负载平衡。而且你也必须担心安全问题(而内部端点却没有)。