1

在我最新的项目中,我必须编写一个 Web 服务 API 来从数据库中返回数据。

技术是 - SQL Server 08 R2 - WCF

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

负载不是很大,但也不是小菜一碟——峰值约为 1,000 个请求/秒。

我最初的想法是使用 Redis 作为缓存,这意味着我们不会经常访问 SQL Server。但是我一直在尝试从这个配置中获得一些基准测试等,但效果并不好,这让我想知道 Redis 是否真的能为我的问题带来任何好处!

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

在我的桌面上玩时,Redis 的基准测试速度约为 20K ops / sec。好东西。

但是,考虑到每个调用都将通过一个 Web 服务,当我放置一个 WCF 层时,我只能获得 300 ops / sec。不是很好。诚然,Web 服务客户端、Web 服务和数据库都在同一台机器上,这样可能会导致结果出现偏差!

此外,当迁移到真实环境时,网络延迟将是一个主要因素。

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

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

任何建议都非常感谢!

邓肯

4

2 回答 2

0

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

于 2012-05-20T18:27:33.363 回答
0

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

只要您使用 1 个服务器,就可以为您提供极大的灵活性。如果您需要一个网络农场,或者当事情可能更棘手时,例如同步、失效、过期等,这意味着一些分布式缓存(我认为是内存),支持本地存储(通常在内存中,本地)和分布式存储。您也可以将此命名空间与 AppFabric 一起使用以获得所需的缓存。

希望这对你有用。

于 2012-05-21T06:46:57.317 回答