了解asp.net中的负载均衡

时间:2013-11-20 15:19:47

标签: asp.net performance load-balancing

我正在写一个网站,它将开始使用负载均衡器,我正试图绕过它。

  1. IIS是否只为您做了所有的平衡?
  2. 您是否有一个单独的Web层位于分布式服务器上,在发送到子服务器之前执行某些工作,例如auth或其他工作?
  3. 似乎很多我一直在阅读的文章并没有真正给我一个直接的答案,或者我只是没有正确理解它们,我想了解真正的负载均衡是如何起作用的。 techincal方面,如果有人有任何代码可以分享,那也很不错。

    我知道缓存会成为一个问题,但这也是一个不同的主题,会话。

3 个答案:

答案 0 :(得分:17)

IIS默认情况下没有负载均衡器,但您可以使用至少两种Microsoft技术:

这两种技术都不需要任何代码本身,这是基础设施的问题。但是你当然必须记住开发过程中的负载平衡环境。例如,为了使网站真正平衡,它们应该是无国籍的。否则,您必须在客户端和服务器之间提供所谓的粘性,因此同一客户端将始终连接到同一服务器。

要使服务无状态,请不要在服务器上保留任何状态(例如,在ASP.NET网站的情况下为Session),而是在服务器场中所有服务器之间共享的外部服务器上保留。因此,例如,对集群中的所有站点使用外部ASP.NET Session server(StateServer或SQLServer模式)是常见的。

修改

只是澄清一些事情,关于两种提到的技术:

  • NLB 适用于网络级别(实际上是网络驱动程序),因此不需要了解所使用的应用程序。您可以创建由少数计算机/服务器组成的所谓集群,并将它们作为单个IP地址公开。然后另一台计算机可以将此IP用作任何其他IP,但连接将自动路由到集群的其中一台计算机。每个服务器上都配置了一个集群,没有外部的附加路由计算机。正如我们已经提到的,根据群集设置,可以启用或禁用粘性(此处称为单个无亲和力)。还有负载重量参数,因此您可以设置称重的负载分布,例如向最快的机器发送更多连接。但是这个参数是静态的,它不能动态地基于网络,CPU或任何其他用途。事实上,NLB并不关心目标应用程序是否正在运行,它只是将网络流量路由到所选机器。但它注意到服务器脱机,所以那里没有路由。 NLB的优点是它非常轻巧,不需要额外的机器。
  • ARR 要复杂得多,它是作为IIS上的模块构建的,旨在在应用程序级别做出路由决策。网络负载平衡只是其功能之一,因为它是一个更完整的路由解决方案。它具有“基于规则的路由,客户端和主机名亲缘关系,HTTP服务器请求的负载平衡以及分布式磁盘缓存”,如Microsoft所述。您在Server Farms创建了许多选项,如负载平衡算法,负载分配和客户端粘性。您可以定义运行状况测试和路由规则以将请求转发到其他服务器。所有这些的缺点是应该有一台安装了ARR的专用机器,因此需要更多的资源(和成本)。
  • NLB & ARR - 因为使用单个ARR计算机可能是单点故障,Microsoft states值得考虑创建ARR计算机的NLB群集。

答案 1 :(得分:10)

  

IIS是否只为您完成所有平衡?

是的,如果您配置Application Request Routing

ARR in IIS

  

您是否有一个位于分布式服务器上的单独Web层

  

在发送到子服务器之前做了一些工作,比如auth或其他工作?

No,ARR非常“愚蠢”:

  

IIS ARR不提供任何预身份验证。如果需要pre-auth,那么您可以查看Windows Server 2012 R2中可用的Web应用程序代理(WAP)。

它只是作为接受和转发请求的透明代理,同时在配置时添加一些缓存。

对于身份验证,您可以查看Windows Server 2012的Web Application Proxy

答案 2 :(得分:5)

一些提示,也许是让自己完全熟悉的项目:

  • ARR因为上述所有上述答案都是“代理”,可以处理从您的用户到服务器的流量。

  • 您可以像Konrad指出的那样处理 State ,或者您可以让ARR执行“粘性”会话(确保客户端始终转到“此服务器” - 可能是维护的服务器特定客户的状态。请参阅有关该答案的讨论/评论 - 这很棒。

  • 我没有佩戴IT /服务器帽这么长时间,并且坦率地说没有触及群集手(总是“由某些提供商自动处理”),所以我确实从我们的主机那里提出了这个问题,“我们的集群/服务器之间的复制是什么/如何”完成?“ - 问题包括

    之类的内容
    • 我只在1台服务器上工作/设置,是否可以在我们的集群/服务器场中的X VM中复制?多久了?
    • 动态生成,代码和/或用户生成的文件(文件系统)怎么样?如果它在VM1的文件系统上,并且我有10个负载均衡的VM,并且客户端可以随时命中其中任何一个,那么......?
    • 加密怎么样?例如如果你使用DPAPI加密web.config的东西(egdb conn strings / sections),那会有什么影响(因为它基于机器密钥,而且很明显,现在你有机器了( s < / strong>)或VM( s )。RSA重写....?
  • SSL ARR can handle this for you as well,这太棒了!但与所有权力一样,如果您在代码中检查/验证,则会出现“骗局”,例如: HttpRequest.IsSecureConnection,好吧,它始终是false。您的服务器/虚拟机没有证书,ARR可以。加密的conn位于客户端和ARR 之间。 ARR到您的服务器/虚拟机不是。正如链接所解释的那样,如果您更喜欢它(没有卸载),您可以......但这意味着您的所有服务器/ VM都应该拥有一个证书(以及与上述“复制”相关的方式如何开始在您的头)。

不仅仅是全面的,只是从记忆中列出的东西...... Hth