C#asp.net sql2000高流量Web服务的提示

时间:2020-03-05 18:55:38  来源:igfitidea点击:

我正在开发一个Web服务,将从"动态标语"中调用其方法,该方法将显示从sql server表读取的某种消息队列。

横幅广告将在高流量网站的首页上施加沉重压力;每次加载横幅时,它将调用我的Web服务,以获得新的消息队列。

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

显然,我将尝试使消息尽可能少,以限制流量。

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

解决方案是cweb服务,asp.net 3.5,sql server 2000。

有什么提示吗?其他方法?

谢谢

安德里亚

解决方案

回答

我认为缓存是一种合理的方法,我们可以更进一步,并向其中添加SQL依赖关系。

ASP.NET缓存:SQL Server 2000的SQL缓存依赖性

回答

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

AFAIK依赖项兑现在SQL Server 2000中不是很有效。

回答

如果我们使用文件路径,请记住这一点。

http://petesbloggerama.blogspot.com/2008/02/aspnet-writing-files-vs-application.html

回答

这取决于很多事情:

  • 如果数据变化不大(请考虑使用"发布"按钮或者每日批处理后端),那么我肯定会使用静态文件(通过后端的推送更新)。我们在几个大型站点上使用了该解决方案,并且效果很好。
  • 如果数据足够小,则内存缓存(即Http Cache)是可行的,但是请注意锁定问题,并且还要注意在大量内存负载下Http Cache不能很好地工作,因为如果框架需要内存,则项目可能会提前过期。我以前被它咬过!有了以上注意事项,Http Cache工作得很好。

回答

另外,一种解决Skliwz提到的内存限制的方法是,如果我们在普通应用程序之外使用此服务,则可以将其隔离在自己的应用程序池中。我之前看到过这样做,这也会有所帮助。

回答

谢谢大家,因为数据量很小,但是基础表会改变,我想我将采用HttpCache方式:即使数据正在更改,我实际上也需要一种减少数据库访问的方式(因此,这就是原因不使用@Bloodhound建议的直接Sql依赖项)。

我想在公开之前我会做一些压力测试。

再次谢谢大家。

回答

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

  • 基于HttpCache的正向(常规)缓存,其工作原理是将属性放在类中。使用最简单,但是在某些情况下,我们必须等待从数据库中实际获取内容。
  • 从头开始预取缓存,在第一次调用后,该缓存将在后台开始刷新缓存,在某些情况下,我们可以保证不等待就拥有内容。

在SixPack库主页上的更多信息。请注意,该代码(尤其是前向缓存)已经过负载测试。

这是简单缓存的示例:

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