Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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
C# 扩展ASP.NET应用程序_C#_Asp.net_Session_Scalability_Web Farm - Fatal编程技术网

C# 扩展ASP.NET应用程序

C# 扩展ASP.NET应用程序,c#,asp.net,session,scalability,web-farm,C#,Asp.net,Session,Scalability,Web Farm,这是一个非常广泛的问题,但希望我能得到有用的提示。目前,我有一个ASP.NET应用程序运行在一台服务器上。我现在需要扩展以适应不断增加的客户负载。因此,我的计划是: 1) 将ASP.NET和web组件扩展到五台服务器上 2) 将数据库移动到服务器场 我不相信我会有问题的数据库,因为它只是一个单一的IP地址就应用程序而言。然而,我现在担心的是ASP.NET和web层。我已经担心的一些问题: 实现负载平衡器的最简单模型是以循环方式将请求分发给五台服务器中的每台服务器吗 HTTPS和SSL连接现在可

这是一个非常广泛的问题,但希望我能得到有用的提示。目前,我有一个ASP.NET应用程序运行在一台服务器上。我现在需要扩展以适应不断增加的客户负载。因此,我的计划是:

1) 将ASP.NET和web组件扩展到五台服务器上

2) 将数据库移动到服务器场

我不相信我会有问题的数据库,因为它只是一个单一的IP地址就应用程序而言。然而,我现在担心的是ASP.NET和web层。我已经担心的一些问题:

  • 实现负载平衡器的最简单模型是以循环方式将请求分发给五台服务器中的每台服务器吗

  • HTTPS和SSL连接现在可以在每次发出请求时在不同的物理服务器上终止,是否存在任何问题?(例如,性能?)

  • 关于通过cookie进行会话维护(登录)是否存在任何问题?我的猜测是否定的,但不能完全解释为什么…;-)

  • 会话数据本身(存储在服务器端)有什么问题吗?显然,我需要在服务器之间复制会话状态,或者以某种方式强制请求只转到单个服务器。不管怎样,我看到了一个问题


    • 这是一个相当广泛的问题,在这样的论坛上很难完全回答。我甚至不确定这个问题是属于这里,还是应该在serverfault.com上。然而

      微软在这方面提供了大量的指导。BING“扩展asp.net应用程序”的第一个结果是这样的


      正如David所指出的,这个问题实际上更多的是一个管理问题,可能对ServerFault很有用。他发布的链接有很好的信息可以浏览

      对于您的
      会话
      问题:您需要查看会话状态服务(IIS作为一个单独的服务提供,用于维护多台服务器之间的公共状态)和/或在SQL数据库中存储asp.net会话状态。我敢肯定,这两种选择都可以在David Stratton的链接中找到

      大体上说,一旦设置了进程外会话状态,它在其他方面是透明的。不过,它确实要求您在会话中存储
      可序列化的
      对象


      是的,在这种情况下,循环DNS是负载平衡的最简单方法。它没有考虑到每台服务器上的实际负载,也没有任何关于何时一台服务器可能因维护而停机的规定;任何获得该特定IP的人都会认为该站点处于“关闭”状态,即使其他四台服务器可能正在运行

      负载平衡和处理SSL连接都可能受益于反向代理类型的情况;代理处理所有传入的连接,但它所做的只是加密和平衡web服务器的实际请求负载。(当然,这些问题更多的是行政方面的问题,但是……)



      如果所有web服务器都将自己宣传为同一个网站(通过主机标题等),那么Cookie就不会成为问题。每台服务器都会欣然接受使用相同域名的任何其他服务器设置的cookie,而不知道或关心是哪台服务器发送的cookie;它基于web浏览器获取cookie值时连接到的服务器的主机名。

      我看到了一些与循环http/https会话相关的问题。我们过去经常在进程会话中使用,并告诉负载平衡器使会话具有粘性。(我想他们用饼干来做这个)

      它让我们避免了SQL会话,但意味着当我们从http切换到https时,F5框无法保持粘性。我们最终改为SQL会话


      您可以研究将加密推送到负载平衡器。我记得这是解决我们问题的一个可能的办法,但遗憾的是,这不是我们调查的办法

      我只想提出您应该关注的数据库领域

      首先,为了支持多主模式下的数据库场,大多数仅使用单个数据库服务器构建的数据模型都需要进行大量更改

      如果你对主键使用了自动递增整数(大多数人都是这样),那么你基本上是被拧出了大门。有几种方法可以暂时缓解这种情况,但即使是那些方法也需要大量的猜测,并且很有可能发生碰撞。一种缓解措施是将每个服务器上的种子值设置为足够高的数字,以降低冲突的可能性。。。这通常会起作用,一段时间

      当然,您必须弄清楚如何跨服务器对用户进行分区

      我的观点是,这一领域不应该被轻视,而且几乎总是比简单地通过在更大的硬件上扩展数据库服务器更难实现

      如果您有意在构建数据模型时考虑多主机角色,请忽略。;)

      关于会话:不要信任“粘性”会话,粘性不是保证。坦率地说,我们的东西通常部署到服务器场,所以我们从一开始就完全禁用会话状态。移动到服务器场后,几乎没有理由使用会话状态,因为在每次页面加载时都必须从状态服务器检索数据、反序列化、序列化并存储回状态服务器


      考虑到just的数据库和网络流量,以及它们的目的是减少数据库和网络流量,那么您将了解它们是如何不再为您购买任何东西的。

      SQL server上的会话数据库可以轻松地扩展,只需对代码和配置进行少量更改。您可以将asp.net会话粘贴到会话数据库,无论服务器场中的哪个web服务器提供请求,基于会话id的sql state server映射都可以完美地工作。这可能是其中之一