c# - 缩放 ASP.NET 应用程序

标签 c# asp.net session scalability web-farm

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

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

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

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

  • 是否最容易实现的模型只是一个负载均衡器,它会以循环方式将请求分配给五台服务器中的每台服务器?

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

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

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

最佳答案

正如 David 所指出的,这个问题的大部分实际上更像是一个管理问题,并且可能对 ServerFault 有用。他发布的链接提供了值得仔细研究的好信息。

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

一般来说,一旦您设置了进程外 session 状态,它就是透明的。不过,它确实需要您在 Session 中存储 Serializable 对象。


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

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


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

关于c# - 缩放 ASP.NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549841/

相关文章:

c# - Linux:Mono 安装和错误

c# - 具有多个创建 FTP 请求的线程的 ThreadPool 超时

php - 如何用不同的ip捕获同一个用户

session - 如何使用 redis、express 和 socket.io 让 session 工作?

c# 属性仅包含 get,其中从 App.config 设置的值

c# - 在 .NET 4.0 中创建可与 .NET 4.5 中的 "await"一起使用的异步方法

c# - 如何重新同步 Visual Studio 2008 Windows 窗体设计器?

c# - 如何从按钮中删除禁用属性?

asp.net - Helios项目的当前状态是什么?

php - 我的自动重定向登录页面方法在 PHP 中是否正确?