网络农业/花园有多常见?我应该为它设计我的网站吗?

时间:2011-07-26 15:19:42

标签: asp.net iis caching web-farm

我正在运行一个ASP.NET网站,服务器既可以读取数据又可以将数据写入数据库,还可以将一些经常访问的数据作为缓存直接存储在进程内存中。当新请求进入时,它们会在写入数据库之前根据缓存中的数据进行处理。

我的托管服务提供商突然决定将他们的服务器置于负载均衡器之下。这意味着我的缓存系统会随着多个服务器随机处理请求而变成香蕉。所以我必须重写我的应用程序的一大部分只是为了获得更差的性能,因为我现在必须查询数据库而不是快速的内存变量检查。

首先,我并没有真正看到在iis服务器上分配负载的重点,因为在我的经验中,数据库查询通常是瓶颈,现在数据库必须采取更多的措施。其次,似乎这些事情需要仔细规划,而不仅仅是托管服务提供商为其所有客户设置的东西,并期望所有应用程序都适合他们。

这些事情是常见的还是我愚蠢地使用进程内存作为缓存?

我应该开始寻找新的托管服务提供商,还是我希望网络农业能够迟早到达?我是否应该考虑我编写的所有未来应用程序,并完全避免进程缓存和类似设计?

(请不要把它变成农业与农业之战,我只是想知道在开发时我是否必须牢记这一点。)

1 个答案:

答案 0 :(得分:1)

我绝对更像是一名开发人员而非网络/部署专家。因此,虽然我对这些概念有一个相当不错的全面理解(以及一些有关陷阱/限制的第一手经验),但我会依赖其他SO来更彻底地审查我的意见。有了这个警告......

首先要注意的是:“网络农场”与“网络花园”不同。 Web场通常是一系列(物理或虚拟)计算机,通常每个都有一个唯一的IP地址,位于某种负载平衡器之后。大多数负载均衡器支持会话亲和性,这意味着给定用户在首次点击该站点时将获得一台随机机器,但在每次后续命中时都会获得相同的机器。因此,您的内存中状态管理应该仍然可以正常工作,并且会话关联性将使给定会话在其整个生命周期内使用相同的应用程序缓存的可能性很大。

我的理解是“网络花园”特定于IIS,并且基本上是在同一台机器上并行运行的网络服务器的“多个实例”。它与Web场具有相同的主要用途(支持更多并发连接)。但是,据我所知,它不支持任何类型的会话亲和性。这意味着每个请求可能最终都在不同的逻辑应用程序中,因此每个请求都可以使用不同的应用程序缓存。它还意味着您无法使用进程内会话处理 - 您必须转到ASP会话状态服务或SQL支持的会话配置。当我的客户转向网络园林模式时,那些让我感到困扰的重要事情。

首先,我并没有真正看到在iis服务器上分配负载的重点,因为在我的经验中,数据库查询通常是瓶颈”。 IIS具有有限数量的可用工作线程(可配置,但仍然是有限的),因此只能提供有限数量的同时连接。即使每个请求都是相当快速的操作,在繁忙的网站上,有限的上限也会导致用户体验变慢。 Web场/花园增加了同时请求的数量,即使它不能很好地解决CPU负载的平衡问题。

这些事情是常见的还是我首先使用进程内存作为缓存?”这不是一个“或”问题。是的,根据我的经验,网络农场很常见(网络花园不那么常见,但这可能只是我与之合作过的客户)。无论如何,使用内存缓存没有任何问题 - 它们是ASP.NET不可或缺的一部分。当然,有很多方法可以错误地使用它们并导致自己出现问题 - 但这是一个更大的讨论,并不是特定于您的系统是否将部署在Web场上。

在我的意见中,你应该设计你的系统假设:

  • 他们必须在网络农场/花园上运行
  • 您将拥有会话亲和力
  • 您将不具备应用级别缓存关联性

这当然不是分布式部署的详尽指南。但我希望它让你更接近了解一些农场/花园景观。

相关问题