【问题标题】:Is Memcached interchangeable with ASP.NET State Server?Memcached 可以与 ASP.NET 状态服务器互换吗?
【发布时间】:2010-09-22 09:38:54
【问题描述】:

我在负载平衡的 Web 服务器环境中使用 ASP.NET 和 WCF 服务,在服务层使用 Memcached。

我还想用 Memcached 替换使用 ASP.NET 状态服务器(用于会话状态)。 现在恐怕这不是一件好事,因为据我了解, Memcached 是缓存服务器而不是状态服务器,是这样吗?

如果我理解正确,Memcached 不会将数据分发到 Memcached 场中的其他节点。 相反,使用一种特殊的散列算法来确定场中的哪个节点包含所请求密钥的数据, 而 ASP.NET 状态服务器在添加数据后会尽快分发数据,以防止单点故障。

换句话说,Memcached 应该只用于性能原因,存储在其中的数据应该始终是可重新创建的, 如果该项目已被移除以腾出空间来容纳新对象,或者如果实际存储数据的单台机器出现故障。

所以我不能只依赖 Memcached 来存储会话状态数据吗? 如果我不能,那么我不明白 Memcached 是如何经常被比较并被视为 使用 ScaleOut StateServer 和 ASP.NET State Server 的替代方法, 因为这些是真正的状态服务器,这是另一回事,对吧?

我现在有点不确定在 Web 服务器场中实现高性能分布式会话状态的最佳方法是什么。

谢谢

【问题讨论】:

  • 我不相信您归因于 ASP.NET 状态服务器的故障转移属性存在。至少据我所知,没有现成的方法可以做到这一点。这是单点故障。

标签: .net asp.net memcached


【解决方案1】:

Memcached 目前不支持数据镜像,它只提供将条目拆分到多台服务器的能力,以防止其中一台被淹没。这可以通过使用服务器地址对您的密钥进行哈希处理,或者使用一致的哈希算法 (libketama) 来实现。

不过,一般来说,Memcached 不应被视为持久存储层,而且在几乎所有情况下,缓存中的数据都应该与数据库中的数据相同。如果您正在更改用户的会话数据并想要缓存它,请在 Memcached 中更新它,然后立即在数据库中更新它。如果您想非常小心,您可以实现一个简单的日志系统,以确保在系统发生故障时这些数据保持一致。

Memcached 肯定被用于缓存会话,创建者在 Jinux Journal 文章中也这么说。它实际上只是为了优化读取操作,归根结底,您关心的任何数据都应该存储在数据库中。

【讨论】:

    【解决方案2】:

    在理想情况下,会话数据只是单个值,即用户 ID 的内部数字表示。说明用户提供了正确的密码,成功通过了登录页面。

    但是其他人喜欢呢,以stackoverflow为例,页面上的动态数据取决于用户:用户的昵称,信誉数,获得的徽章,发表评论的权限。它们通常是跨多个数据库表的多个 JOIN 的结果。

    如果你不使用 memcached,这些查询几乎总是从磁盘读取数据,这是一个非常慢且不可扩展的操作。数据库里面的缓存?你认为命中率会考虑到数据库除了管理会话数据之外的其他事情吗?为什么必须从磁盘读取,而可以从内存读取?

    当然,任何对相关用户信息的写入都应该使 memcached 中的相应会话失效。

    【讨论】:

    • 谁说过数据库?问题是 Memcached 作为状态服务器是否可以直接与 ASP.NET 状态服务器互换,考虑到 Memcached 缓存不同步,因此如果一个节点出现故障,数据可能会丢失。
    • 我使用 memcached 作为数据库连接的缓存,它有冗余数据。因此,只要您不将新信息仅写入 memcached,单点故障就无关紧要。纯粹形式的信息总是在主数据库中。
    【解决方案3】:

    http://www.codeplex.com/memcachedproviders 有一个用于将值存储在 memcached 中的 asp.net 会话状态提供程序。它提供了将会话数据备份到 ' SQL 服务器。正如 yogman 所说,会话数据存储为一个值。 如果发生驱逐,该用户的整个会话将丢失,用户将被引导到登录屏幕。 Memcached 不会在过期之前驱逐任何数据,除非它的空间不足来容纳新数据。

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 2011-08-23
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多