Azure Web角色内部端点 - 未加载平衡

时间:2012-09-09 18:01:10

标签: azure azure-web-roles

Azure文档说,Web角色上的内部端点不会进行负载平衡。这有什么实际影响?

实施例: 我有一个包含20个实例的Web角色。如果我为该Web角色定义内部端点,那么内部实现是什么?例如,所有20个实例是否仍然可以为此终点服务?我可以为每个实例获取特定的端点吗?

我们有一个独特的回调要求,可以通过利用公共端点上的正常负载平衡行为很好地服务,但让每个实例都公开一个内部端点。根据公布的端点限制数量,这是不可能的。那么,在定义内部端点时,它是“每个实例1个”,还是什么?是否所有角色实例都为端点提供服务?微软在说内部端点没有负载均衡时意味着什么?是否所有流量都流向一个实例?这没有意义。

3 个答案:

答案 0 :(得分:12)

首先让我们澄清数字和限制。 EndPoints的限制适用于角色,而不适用于实例。如果您不确定或仍然混淆角色和实例条款,可以查看my blog post on that。因此,限制是每个角色。

现在EndPoints之间存在差异 - 我有一篇博客文章描述了它们here。但在快速回合中,Internal EndPoint只会在部署中打开内部通信。这就是为什么它是内部的。没有外部流量(来自Internet)将能够转到内部端点。在这方面,它不是负载平衡的,因为没有流量通过/通过负载均衡器!内部EndPoints的流量仅在Role Intances(最终通过一些内部路由硬件)之间进行,但从不存在部署边界。话虽如此,必须清楚的是,没有互联网流量可以发送到内部端点。

附注 - 然而,InputEndpoint可以从Internet和部署内部发现。但它 LoadBalanced,因为到InputEndpoint的流量来自/通过LoadBalancer来自Internet。

回到数字。假设您有1个WebRole,其中包含1个输入端点和1个内部端点。这使您的部署总共有2个EndPoints。即使您启动了50个实例,您也只会有2个EndPoints计入EndPoints总数限制。

您是否可以获得针对特定Instace的特定EndPoint - 当然可以!通过RoleEnvironemnt课程。它有Roles enumeration。每个角色都有Instances,每个实例都有InstanceEndpoints

希望这有帮助!

答案 1 :(得分:3)

端点在角色级别定义,并为每个实例实例化。

输入端点具有公共IP地址,可以从Internet访问。在托管端点的角色的所有实例中,对该输入端点的流量进行负载平衡(使用循环算法)。

内部端点没有公共IP地址,只能从云服务或virtual network内部访问,包括该云服务。 Windows Azure不会将流量负载平衡到内部端点 - 必须单独处理每个角色实例端点。 Ryan Dunn有一个很好的post,展示了一个与托管WCF服务的内部端点实现负载均衡交互的简单示例。

Spring Wave版本引入了instance input endpoint的预览,这是一个公共IP端点,端口转发到特定角色实例。这显然不是负载平衡,而是提供了一种直接连接到特定实例的方法。

答案 2 :(得分:3)

只是想让事情变得更简洁和具体:

// get a list of all instances of role "MyRole"
var instances = RoleEnvironment.Roles["MyRole"].Instances;

// pick an instance at random
var instance = instances[new Random().Next(instances.Count())];

// for that instance, get the IP address and port for the endpoint "MyEndpoint"
var endpoint = instance.InstanceEndpoints["MyEndpoint"].IPEndpoint;

将内部端点视为查找其他VM的发现机制。