在重载Web服务器上缓存数据

时间:2013-05-03 15:48:27

标签: database performance design-patterns caching database-performance

我目前有一个Web应用程序,在每个页面上请求从当前登录用户的数据库中获取用户数据。

此Web应用程序可能拥有大约30,000个并发用户。

我的问题是,最好是缓存它。例如在C#中使用System.Web.HttpRuntime.Cache.Add

或者这会破坏存储器中存储多达3万个用户对象的服务器内存吗?

不缓存并在每次请求时从数据库中获取所需数据会更好吗?

2 个答案:

答案 0 :(得分:1)

如何根据可用内存拥有一些有限的缓存。并在其上编写LRU(最近最少使用)算法。它可以改善性能,特别是对于经常访问的用户。

答案 1 :(得分:1)

在这种规模上,您需要一个明确的缓存和扩展策略。将缓存黑客攻击与规划明确的策略不同。将缓存黑客攻击将失败。

缓存高度取决于数据。数据是否经常变化?您将拥有多少读取与写入的比率?你打算如何扩展数据库?如果Web场中的服务器具有不同的数据值,会发生什么情况?缓存一致性是否重要?

您最终可能会遇到几种不同类型的缓存:

  1. IIS静态缓存
  2. ASP.Net缓存
  3. 您应用中的LRU缓存。
  4. 内存分布式缓存,例如MemCacheD。
  5. 浏览器中的HTTP缓存。
  6. 此外,如果您正在提供静态数据(图像,CSS,Javascript等),您将需要与CDN集成以进行交付。使用AWS S3或Azure存储很容易。

    您还需要确保计划如何从一开始就扩展。您可能希望使用Elastic Bean StalkAzure's Websites Infrastruture部署到云提供商,例如AWS。