2012-05-20 80 views
1

在我最近的项目中,我必须编写一个Web服务API来从数据库返回数据。使用Redis来扩展Web服务

科技股是 - SQL服务器08 R2 - WCF

的数据是主要的键 - 值对,例如获得用户X最喜欢的颜色。

负载不是很大,但也不小 - 在高峰时约为1,000个请求/秒。

我最初的想法是使用Redis作为缓存,这意味着我们不会像往常一样击中SQL Server。然而,我一直在试图从这个配置中获得一些基准测试等,这并不是很好,这让我怀疑Redis是否真的会为我的问题提供任何好处!

建筑是 - 单独的数据库服务器 - WCF应用服务器 - IIS - Linux的服务器的Redis

当我的桌面上打转转,在20K〜OPS /秒​​Redis的基准。好东西。

但是,由于每次调用都将通过Web服务,所以当我放置WCF层时,我只能获得300次操作/秒。不是很好。无可否认,Web服务客户端,Web服务和数据库都位于同一台机器上,因此可能会导致结果偏差!另外,当移动到真实环境时,网络延迟将是一个主要因素。

我无法以任何方式对这些请求进行批处理。

所以 - 我的问题 - 我都是使用Redis作为缓存 - 我知道我应该在这种情况下使用缓存 - 但由于我无法将Redis与我的Web服务放在同一个盒子上那么会不会网络延迟杀死性能?

任何建议非常感谢!

邓肯

回答

0

我会尝试分别测试和调整您的图层。使用不涉及数据库的虚拟数据测试Web服务,但数据大小和并发连接类似。与数据库相同,使用合成数据(或真实的,如果可以的话)再次调整您的查询与实际负载和表大小,以匹配您的预期用户群的大小。将这两者一起测试,仔细测量,以便您可以验证您的更改如何影响整体性能以及瓶颈所在。最后,添加缓存层,再次测试效果。如果数据库是瓶颈,缓存可能会有所帮助,但如果Web服务层是问题,则缓存可能不会。如果您只使用Redis作为缓存,则可能更喜欢简单的memcached。

0

你也可以检查是否使用.NET 4,我认为你应该使用System.Runtime.Caching库。

一旦使用1台服务器,即可为您提供极大的灵活性。如果你需要一个网络农场,或者当事情比同步,失效,到期等更棘手时,意味着一些分布式缓存(我认为是内存),支持本地存储(通常是本地存储)和分布式存储。你也可以用AppFabric来使用这个命名空间来获得想要的缓存。

希望这对你有用。