Memcached to be or not to be? (c++)

Memcached to be or not to be? (c++)

本文关键字:to be c++ not or Memcached      更新时间:2023-10-16

我有一个3层结构,如下所示。A(web服务器)-->B(BizLib)-->C(DB服务器)

我想使用连接到B服务器末端的memcached,但我有点犹豫,因为它也通过网络,所以延迟降低并不明显。

我的计划是将一些常用的数据作为Map从DBServer预存储到BizLib中。

如果我的B服务器是一台正在运行的Thrift服务器,并且有很多用户使用访问我的BizLiz,但不同的用户如何使用我在B的BizLib内存中预先存储的同一组数据?我能把那个"缓存类"作为singleton,这样每个人都可以共享相同的值吗?

如果数据映射变得太大,它会崩溃还是效率低下?

请给我建议,因为我是建筑设计的新手。

谢谢。

不要在BizLib中进行任何缓存,保持简单。

Memcached处理您内部担心的所有任务,特别是在映射中存储项目,管理未使用的缓存项的驱逐,甚至在映射超过本地内存时将其分发到多个物理服务器上。

直接从web应用程序访问MemcacheD服务器(分别为服务器池),不要绕过服务器B。

每当您的web应用程序在MemcacheD中找不到一组数据时,让它将请求一直传递到数据库,并让web应用程序将结果存储在MemcacheD中。

既不要尝试缓存任何内容,也不要将自己限制为只缓存数据库请求。MemcacheD在缓存整个HTML片段方面也很出色,因为生成这些片段的成本也很高,而且只缓存这些片段而不是中间聚合非常简单。

在某个位置添加缓存之前,请确保对应用程序进行彻底的评测。此外,只要可以避免,请确保不要将特定于用户的视图和通用数据混合在一起,因为这意味着从合并的角度来看,您不能再为其他用户重用这些数据,在设计web应用程序和BizLib之间的接口时,必须确保这一点。

通过避免经由B的迂回,您可以对应用程序中最难扩展的一部分承担不必要的负载,从而可以轻松地添加额外的web应用程序服务器和更多的MemcacheD实例。您还可以获得这样的优势:甚至可以在没有B和C参与的情况下提供一些请求。

对于初学者来说,您甚至可以让MemcacheD与web应用程序在同一台物理机器上运行,因为web应用程序很可能会占用大量CPU,而MemcacheD只需要RAM。这样,您就可以完全避免网络延迟,即使这只适用于只有一个web服务器的情况。

听起来像是在尝试多层缓存。您正在数据映射、memcached和(可能)数据库层进行缓存。

这可能太过分了。特别是如果您正在考虑将memcached放在一台单独的机器中。

确保不要过早引入缓存。在引入缓存体系结构之前,先了解一下实际执行缓慢的部分。

看看您的数据库查找是否真的花费了比应该花费的更长的时间。大多数DBMS服务器都有一个用于经常加载的表和索引的缓存。

如果你决定要缓存,不要同时在memcached和BizLib中缓存。我个人会把它放在memcached中,它与您的BizLib一起在本地运行。这消除了网络延迟,但您仍然可以明确地调整缓存大小,并利用LRU算法等优势。

如果您后来决定在BizLib的多个实例之间共享缓存将比消除网络延迟受益更多,那么您可以随时整合(甚至联合缓存)。