2

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

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

我们有一个独特的回调需求,可以通过利用公共端点上的正常负载平衡行为很好地满足该需求,但让每个实例都公开一个内部端点。根据已发布的端点限制数字,这是不可能的。那么,在定义内部端点时,是“每个实例 1 个”还是什么?是否所有角色实例都服务于端点?当他们说内部端点没有负载平衡时,Microsoft 是什么意思?所有流量是否只流向一个实例?那没有意义。

4

3 回答 3

12

首先让我们澄清一下数量和限制。EndPoints 的限制是针对角色,而不是针对实例。如果您不确定,或者仍然对角色和实例术语感到困惑,您可以查看我的博客文章。因此,限制是每个角色。

现在 EndPoints 之间的差异 - 我在这里有一篇描述它们的博客文章。但在快速回合中,Internal EndPoint 只会在部署内部打开通信。这就是为什么它是内部的。没有外部流量(来自 Internet)将能够到达内部端点。在这种情况下,它不是负载平衡的,因为没有流量通过/通过负载平衡器!内部端点的流量只在角色实例之间传输(最终通过一些内部路由硬件),但从不存在于部署边界。话虽如此,必须已经清楚不能将 Internet 流量发送到内部端点。

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

回到数字。假设您有 1 个具有 1 个输入端点和 1 个内部端点的 WebRole。这使您的部署总共有 2 个端点。即使您启动 50 个实例,您仍然只有 2 个 EndPoints 计入总 EndPoints 限制。

您能否获得特定实例的特定端点 - 当然可以!通过RoleEnvironemnt类。它有Roles 枚举。每个 Role 都有Instances,每个 Instance 都有InstanceEndpoints

希望这可以帮助!

于 2012-09-09T19:28:29.780 回答
3

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

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

内部端点没有公共 IP 地址,只能从云服务或包括该云服务的虚拟网络内部访问。Windows Azure 不会对内部端点的流量进行负载平衡 - 每个角色实例端点必须单独寻址。Ryan Dunn 有一篇不错的文章,展示了一个与托管 WCF 服务的内部端点实现负载平衡交互的简单示例。

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

于 2012-09-09T20:34:21.050 回答
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 的发现机制。

于 2012-09-09T21:21:12.563 回答