Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解asp.net中的负载平衡_Asp.net_Performance_Load Balancing - Fatal编程技术网

了解asp.net中的负载平衡

了解asp.net中的负载平衡,asp.net,performance,load-balancing,Asp.net,Performance,Load Balancing,我正在写一个网站,它将开始使用负载平衡器,我正试图用我的头脑去思考它 IIS只是为你做所有的平衡吗 您是否有一个单独的web层,它位于分布式服务器上,在发送到子服务器之前执行一些工作,如auth或其他工作 似乎我一直在读的很多文章并没有给我一个直接的答案,或者我只是没有正确地理解它们,我想从技术的角度了解一下真正的负载平衡是如何工作的,如果有人有任何代码可以共享也很好 我知道缓存将是一个问题,但这是一个不同的主题,会话也是如此。IIS默认情况下没有负载平衡器,但您至少可以使用两种Microsof

我正在写一个网站,它将开始使用负载平衡器,我正试图用我的头脑去思考它

  • IIS只是为你做所有的平衡吗
  • 您是否有一个单独的web层,它位于分布式服务器上,在发送到子服务器之前执行一些工作,如auth或其他工作
  • 似乎我一直在读的很多文章并没有给我一个直接的答案,或者我只是没有正确地理解它们,我想从技术的角度了解一下真正的负载平衡是如何工作的,如果有人有任何代码可以共享也很好


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

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

    • 与IIS集成后,理想情况下,您应该有一个单独的web层来执行路由工作
    • 它与Microsoft Windows Server集成,在那里您可以将现有服务器加入NLB群集
    这两种技术本身都不需要任何代码,这是基础设施的问题。但在开发过程中,您当然必须记住负载平衡环境。例如,要使网站真正平衡,它们应该是无状态的。否则,您必须在客户端和服务器之间提供所谓的粘性,以便同一客户端始终连接到同一服务器

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

    编辑:

    只想澄清几件事,就这两种技术说几句话:

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

    是,如果您配置:

    分布式服务器上是否有单独的web层

    在发送到子服务器之前做一些工作,比如身份验证或其他工作

    ,ARR相当“愚蠢”:

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

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


    有关身份验证,您可以查看Windows Server 2012。

    一些提示,以及您需要完全了解的项目:

    • ARR作为上述所有答案,状态是一个“代理”,处理从用户到服务器的流量

    • 您可以像Konrad指出的那样处理状态,也可以使用ARR do“粘性”会话(确保客户机始终转到“此服务器”——可能是维护该特定客户机状态的服务器)。请参阅关于该答案的讨论/评论-太棒了

    • 我已经很长时间没有戴IT/服务器帽了,坦率地说,我也没有亲自接触过集群(总是由某个提供商“自动为我处理”),所以我确实从我们的主机上问了这个问题,“我们的集群/服务器场之间的复制是如何完成的?”-这个问题包括以下内容

      • 我只在1台服务器上工作/设置东西,这会在集群/服务器场中的X个虚拟机上复制吗?需要多长时间
      • 动态生成的、代码生成的和/或用户生成的文件(文件系统)怎么样?如果它在VM1的文件系统上,我有10个负载平衡的虚拟机,客户端可以在任何时间命中其中任何一个,那么
      • 那么加密呢?例如,如果您使用DPAPI加密web.config内容(例如db conn strings/sections),会产生什么影响(因为它是基于机器密钥的