有关高流量Web服务的提示,c#asp.net sql2000

时间:2008-09-16 10:57:40

标签: c# web-services high-load

我正在开发一个Web服务,其方法将从“动态横幅”调用,该横幅将显示从sql server表读取的一类消息队列。

横幅将在高流量网站的主页上承受沉重的压力;每次加载横幅时,它都会调用我的Web服务,以获取新的消息队列。

现在:我不希望每次加载横幅时所有这些流量驱动查询到数据库,所以我想使用asp.net缓存(即HttpRuntime.Cache [cacheKey])来限制数据库访问;我将尝试每分钟左右刷新一次缓存。

显然,我会尝试尽可能少地留言,以限制流量。

但也许还有其他方法来处理这种情况;例如,我可以在文件系统上编写队列的最后一个版本,并让Web服务访问该文件;或者混合这两种方法的东西......

解决方案是c#web服务,asp.net 3.5,sql server 2000.

任何提示?其他方法?

由于

安德烈

7 个答案:

答案 0 :(得分:4)

这取决于很多事情:

  • 如果数据几乎没有变化(想想后端有“发布”按钮或每日批次),那么我肯定会使用静态文件(通过后端推送更新)。我们在几个大型网站上使用了这个解决方案并且工作得很好。
  • 如果数据足够小,内存缓存(即Http Cache)是可行的,但要注意锁定问题,并要注意Http Cache 不会在大量内存负载下工作,因为项目如果框架需要内存,可以提前过期。我以前被它咬了!有了上述警告,Http Cache运行良好。

答案 1 :(得分:2)

我认为缓存是一种合理的方法,您可以更进一步,并为其添加SQL依赖项。

ASP.NET Caching: SQL Cache Dependency With SQL Server 2000

答案 2 :(得分:1)

编写文件是一个更好的解决方案恕我直言 - 它由IIS内核代码提供服务,没有巨大的asp.net开销,您可以稍后将文件复制到CDN。

使用SQL Server 2000时,AFAIK依赖性兑现效率不高。

答案 3 :(得分:1)

答案 4 :(得分:0)

此外,解决Skliwz提到的内存限制的一种方法是,如果您在正常应用程序之外使用此服务,则可以将其隔离在自己的应用程序池中。我之前已经看过这件事,也有帮助。

答案 5 :(得分:0)

谢谢大家,因为数据量很小,但基础表会发生变化,我认为我会采用HttpCache方式:我实际上需要一种减少数据库访问的方法,即使数据正在发生变化(所以这就是不使用@Bloodhound建议的直接Sql依赖的原因。

我认为,在上市之前,我会做一些压力测试。

再次感谢所有人。

答案 6 :(得分:0)

当然,你也可以(应该)使用SixPack library中的缓存功能。

  • 基于HttpCache的转发(普通)缓存,它通过在您的类上放置属性来工作。最简单易用,但在某些情况下,您必须等待实际从数据库中提取内容。
  • 从头开始预取缓存,在第一次调用之后将开始刷新幕后缓存,并保证在某些情况下内容无需等待。

有关SixPack library homepage的更多信息。请注意,代码(尤其是转发缓存)已经过负载测试。

以下是简单缓存的示例:

    [Cached]
    public class MyTime : ContextBoundObject
    {
            [CachedMethod(1)]
            public DateTime Get()
            {
                    Console.WriteLine("Get invoked.");
                    return DateTime.Now;
            }
    }