【问题标题】:How can I cache private data in a webfarm for ASP MVC如何在 ASP MVC 的 webfarm 中缓存私有数据
【发布时间】:2011-06-26 13:28:25
【问题描述】:

我正在用 ASP MVC3 制作一个基于会员的网络应用程序,并且我正在尝试提前计划,起初我们的用户群不会很大,但与任何软件一样,总有可能出现突然的音量峰值。

考虑到这种情况,我知道数据库是大多数 Web 应用程序的瓶颈区域。我们正在使用 MSSQL 2008RS,我们将拥有带有多个客户端数据库的专用服务器,每个客户端都有自己的数据库,因此如果一台服务器开始出现瓶颈,我们可以垂直扩展或将一些数据库移动到新服务器并开始填充它。

为了访问数据库,我们主要使用 LINQ 2 SQL,目前正在重构我们的一些代码,以利用 IQueryable 机制进行内容的延迟加载。但是每个页面都包含来自数据库各个部分的相当多的内容。

我们还有一些大型数据库用于程序中的小部件,这些小部件很少更改但有数百万行。这些的目标是以某种方式将它们同步到主要来源并将它们分布在多台机器上,然后对这些服务器进行负载平衡。

有了这个布局,我什至应该担心缓存,还是 MSSQL 中的内置缓存机制就足够了?

如果是这样,我应该从哪里开始?我已经简要查看了应用程序结构,但它看起来仅适用于 Azure?

资源:

How to cache data in a MVC application

http://stephenwalther.com/blog/archive/2008/08/28/asp-net-mvc-tip-39-use-the-velocity-distributed-cache.aspx

http://stephenwalther.com/blog/archive/2008/08/29/asp-net-mvc-tip-40-don-t-cache-pages-that-require-authentication.aspx

【问题讨论】:

    标签: c# sql-server asp.net-mvc caching


    【解决方案1】:
    1. 延迟加载是性能杀手。使用一个连接加载整个对象图比延迟加载其他属性更好。对象列表尤其如此。如果您进行迭代,您最终会延迟加载列表中的每个项目。此外,对数据库的每次调用都有开销。更少的调用 = 更好的性能。

    2. 在需要两台数据库服务器之前,SO 是排名前 1000 的网站。我想你会没事的。

    3. 如果您的收入模型说“每个客户都有自己的数据库”,那么您的扩展问题应该很容易解决。听起来您已经计划随着客户群的增加使用更多服务器进行扩展。有什么问题?

    4. Web 层上的缓存通常是您必须担心的第一个扩展修复。您可能不需要对每个页面请求进行新的数据库调用。

    总的来说,这听起来像是很多过早的优化。您的流量尚未达到需要担心扩展的程度。在最后一秒做出此类决定。

    【讨论】:

    • 我想我所说的延迟加载的意思是,Iqueryable 将查询堆叠在一起,直到我实际抓取数据,然后它对数据库进行一次调用以获得比抓取 1 更少的数据大量数据并在内存中进行处理。
    • 感谢您的回答,很高兴知道我的情况似乎有所控制。
    • @chase 是查询组合,不是延迟加载
    • @Marc 250 达到 200k,哇,脱帽致敬!另一幅绝妙的画作在等着你。
    • @Pekka - 是的,我希望明天能到达那里。不幸的是,周末过得很慢
    【解决方案2】:

    数据库缓存与大多数缓存不同——它当然可以将使用过的数据加载到内存中并重新使用查询计划,但这并不是真正的缓存。

    AppFabric 绝对不仅仅是天蓝色的;毕竟,我是你不能在本地安装(和使用)它:)但实际上 AppFabroc、redis 和 memcached 之间几乎没有什么区别(当然,后者缺乏持久性)。

    但我认为您应该最初考虑使用内置的 asp.net 缓存;通过 HttpContext.Cache 缓存数据,以及缓存整个响应(或者,在 MVC 3 中,部分响应)。显然,您应该大致了解哪些数据被大量请求大量使用,并且可以安全地重复使用:缓存!

    只要确保您将所有缓存的 FAA 视为不可变的(如果您需要更新缓存,请重新添加修改后的值;不要修改现有对象) - 原因:如果您开始,它将无法正常工作需要使用分布式缓存,因为它使用序列化,并且您所做的任何更改都不会被下一个请求看到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2016-01-28
      • 1970-01-01
      • 2015-12-04
      相关资源
      最近更新 更多