我试图阅读Windows Azure中的负载平衡,并且有关它的所有信息都非常模糊且不具体。我真正想要的只是一个简单的答案:Azure如何执行负载平衡?
许多应用程序使用会话或内存数据来提高性能。使用Azure,我不确定这是否可行,因为(据我所知),Azure没有任何类型的“粘性”会话。即使它不是基于会话的,而只是基于IP的平衡,这对于许多应用来说已经足够了。
那么,当天的问题 - Azure究竟是如何实现其负载平衡的呢?
答案 0 :(得分:15)
好的在这里给出正确的答案 - Azure DOES 支持在web和worker角色面前进行负载均衡(因此在此线程上标记为最佳的答案是完全错误的),但它没有支持亲和负载平衡,这是jvenema所要求的。当前实现使用循环行为。
答案 1 :(得分:7)
Azure通过在您设置的实例之间分配流量来处理表存储和SQL Azure的负载平衡。
对于像传统asp.net应用程序的会话状态,会话数据将存储在表存储中,然后可供所有webrole实例使用。这是here。
Windows Azure跨每个公共端点提供负载平衡,允许您根据需要将应用程序扩展到任意数量的实例。您需要确保您的应用程序是无状态的(或将状态存储在跨实例的公共区域中,例如blob或表)。唯一没有负载平衡的端点是内部端点。因此,如果您正在进行某种类型的角色间通信,例如从Web角色到在内部端点上托管wcf服务的多个工作者角色实例之一,您需要处理这些实例之间的负载平衡。
答案 2 :(得分:7)
虽然负载平衡曾经是循环,但微软已经改变了他们进行负载平衡的方式,如本博客所述:
http://azure.microsoft.com/blog/2014/04/08/microsoft-azure-load-balancing-services/
Microsoft Azure负载均衡器使用5元组(源IP,源端口,目标IP,目标端口,协议类型)来计算用于将流量映射到可用服务器的哈希值
答案 3 :(得分:3)
我意识到这是一个老问题,但我们通过使用Windows Web Farm Framework并创建了一层支持Affinity到我们的Web服务器的代理服务器解决了Affinity问题。
http://technet.microsoft.com/en-us/library/jj129385.aspx
如果您是自托管的,这是建议的体系结构,并且似乎同样适用于Azure。层看起来像这样......
防火墙:Azure负载均衡器(循环到代理服务器)
代理:应用程序请求路由(ARR),用于对Web服务器的Affinity,静态和动态压缩以及SSL执行负载平衡。将SSL卸载到代理服务器可为Web服务器提供额外的处理器时间。此外,Web Farm Framework非常适合扩展,因为它管理每个额外的Web服务器,复制应用程序文件,监视运行状况,在线/离线切换等。您可以拥有10,000多个由其管理的Web服务器。
Web:普通Web服务器(无需SSL,压缩等)。
数据库:普通数据库服务器或Azure SQL。
Microsoft建议您至少拥有两台ARR(代理)服务器。有些人会为Azure中的额外成本而烦恼。但是,我们发现微实例(15美元以下)非常适合作为代理服务器,如果5 mbit足够速度。
另一个替代方案是将两个ARR服务器配置为小型实例($ 65pm @ 100 mbit)但关闭一个并且仅在高峰期或第一个服务器发生故障时启用它(例如,可能安排第二个ARR服务器启动当第一次运行Windows更新并在一小时后停止时。)
这是一个令人讨厌的设置,但一旦它工作,它是非常光滑的!
注意:WFF文档中有关ARR,代理和控制器等术语的一些混淆。它们通常都是一样的。如果你试图设置它,请记住这一点。
答案 4 :(得分:1)
我认为你可能正在寻找Windows Azure AppFabric和Velocity。有关详细信息,请查看其中一个PDC sessions。