了解asp.net中的负载均衡

dba*_*nes 20 asp.net performance load-balancing

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

  1. IIS会为您做所有的平衡吗?
  2. 您是否有一个单独的Web层位于分布式服务器上,在发送到子服务器之前执行某些工作,例如auth或其他工作?

看起来很多我一直在阅读的文章并没有真正给我一个直接的答案,或者我只是没有正确理解它们,我想了解真正的负载平衡如何从技术方面起作用,如果有人有任何代码可以分享,那也很好.

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

Kon*_*osa 17

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

  • 与IIS集成的应用程序请求路由,理想情况下,您应该有一个单独的Web层来进行路由工作,
  • 与Microsoft Windows Server集成的网络负载平衡,您可以将现有服务器加入NLB群集.

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

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

编辑:

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

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


Cod*_*ter 10

IIS会为您做所有的平衡吗?

是的,如果您配置应用程序请求路由:

IIS中的ARR

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

是.

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

,ARR很"哑":

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

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

对于身份验证,您可以查看Windows Server 2012的Web应用程序代理.


EdS*_*dSF 5

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

  • 上述所有上述答案的ARR是一个"代理",用于处理从用户到服务器的流量.

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

  • 我没有佩戴IT /服务器帽这么长时间,并且坦率地说没有触及聚集动手(总是由某些提供商"自动处理"),所以我确实从我们的主人那里问了这个问题,"什么/怎么样我们的集群/服务器之间的复制"完成了吗?" - 问题涵盖了类似的问题

    • 我只在1台服务器上工作/设置,是否可以在我们的集群/服务器场中的X VM中复制?多久?
    • 那么动态生成,代码和/或用户生成的文件(文件系统)呢?如果它在VM1的文件系统上,并且我有10个负载均衡的VM,并且客户端可以随时命中其中任何一个,那么......?
    • 加密怎么样?例如,如果您使用DPAPI加密的web.config的东西(egdb康恩串/段),什么是这种影响(因为它是基于机键,和好,明显的一点是,现在你有机器(小号)或VM(s).RSA重写......?
  • SSL:ARR也可以为您处理这个问题,这太棒了!但是就像所有的力量一样,来一个"骗局" - 如果你在你的代码中检查/验证,例如HttpRequest.IsSecureConnection,那么它将永远是false.您的服务器/虚拟机没有证书,ARR可以.加密的conn在客户端和ARR之间.ARR到您的服务器/虚拟机不是.正如链接所解释的那样,如果您更喜欢它(没有卸载),您可以......但这意味着您的所有服务器/ VM都应该拥有一个证书(以及与上述"复制"相关的方式如何开始在您的头).

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