5

我们有 22 个 HTTP 服务器,每个服务器都运行自己的 ASP.NET 缓存。他们从只读数据库中读取,该数据库仅在非高峰时间更新。

我们使用文件依赖项来使缓存无效,从而提示服务器“新建”它们的缓存……如果在高峰时段意外这样做,由于打开连接的突然泛滥,可能会导致我们的数据库集群崩溃。

有没有人以这种分布式形式将 memcached 与 ASP.NET 一起使用?在我看来,这将提供一个巨大的优势,即只需构建一个缓存(并减少 21 次访问 DB),而 memcached 将处理在每个盒子上分发它。

如果你有,你是把它和 HTTP 盒子放在同一个盒子上,还是运行一个单独的缓存层?它的扩展性如何,我们可以期望它需要强大的服务器吗?我们的工作数据集并不大(我们将它放入每个 HTTP 框的 4 gigs 内存中就可以了)。

你如何处理失效?

寻找经验和战争故事。

编辑:Win2k3、IIS6、64 位服务器...每盒 4 个演出(我相信,当我们更改为 64 位服务器时,我们可能已经将其提高到 16 个演出)。

4

5 回答 5

5

“memcached 将处理在每个盒子上分发它”

memcached 不会将缓存分发或复制到 memcached 场中的每个盒子。memcached 客户端基本上对密钥进行散列,并根据该散列选择缓存服务器。当其中一个 memcached 服务器发生故障时,您将丢失该服务器上存在的所有缓存项,但是,客户端将识别故障并开始将值写入另一台服务器。在这种情况下,您的代码需要考虑缓存中丢失的项目并在必要时重置它们。

本文更详细地讨论了 memcached 架构:memcached 的工作原理

于 2009-02-21T01:19:35.567 回答
2

最佳实践(根据 memcached 站点)是在与您的 Web 服务器应用程序相同的机器上运行 memcached,否则您正在进行 http 调用(这不是那么糟糕,但它不是最佳的)。如果您正在运行 64 位应用程序服务器(如果您要运行 memcached,您可能应该这样做),那么您可以为每个服务器加载大量内存,并且它可用于 memcached。memcached 使用 CPU 资源的方式并不多,因此如果您当前的应用服务器不是很重,它将保持这种状态。

于 2009-02-20T21:51:21.730 回答
1

没有一起使用它们,但我已经在单独的项目中使用它们。

最后我看到文档明确说与网络服务器共享是可以的。

Memcache 真的只需要 RAM,如果你将你的 asp.net 缓存排除在等式之外,你的 Web 服务器实际使用了多少 RAM?应该不多吧。它不会与您的 Web 服务器竞争 CPU,而且它根本不需要磁盘。您可能会考虑从传入的 Web 请求中分割出网络流量(如果您还没有的话)。

它工作得很好而且速度很快,我没有任何问题。

哦,失效在我使用它的项目上是明确的。不知道还有什么其他模式。

于 2009-02-20T21:48:02.597 回答
1

如果您想在您的 memcached 服务器上进行复制,那么可能值得一看repcached。这是处理复制部分的 memcached 补丁。

于 2009-03-09T16:56:38.100 回答
0

值得一试Velocity,这是 Microsoft 提供的分布式缓存。我不能给你一个与 memcached 的逐点比较,但 Velocity 与 ASP.NET 集成,并将继续得到更多的开发和集成。

于 2009-03-06T17:26:26.803 回答