c++ - Memcached 是还是不是? (c++)

标签 c++ database caching architecture memcached

我有一个 3 层结构,如下所示。 A(网络服务器)--> B(BizLib)--> C(数据库服务器)

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

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

如果我的B Server是运行的Thrift Server,访问我的BizLiz的用户有很多,但是不同的用户如何使用我在B的BizLib内存中预存的同一套数据呢?我可以将“缓存类”设为单例,以便每个人都共享相同的值吗?

如果数据 Map 增长太大,它会崩溃还是效率低下?

由于我是设计架构的新手,请多多指教。

谢谢。

最佳答案

不要在 BizLib 内部做任何缓存,保持简单。

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

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

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

既不要尝试缓存任何东西,也不要限制自己只缓存数据库请求。 MemcacheD 还非常擅长缓存整个 HTML 片段,因为生成这些片段的成本也非常高,而且只缓存这些片段而不是中间聚合非常简单。

在某个位置添加缓存之前,请务必彻底分析您的应用程序。还要确保不要混合用户特定 View 和通用数据,只要可以避免,因为这意味着您不能再从合并的地方为其他用户重用该数据,这必须确保在设计 Web 应用程序和 BizLib 之间的接口(interface)。

通过避免绕过 B 的弯路,您可以承担应用程序中最难扩展的部分的不必要负载,从而可以轻松添加额外的 Web 应用程序服务器和更多 MemcacheD 实例。您还可以获得优势,甚至可以在 B 和 C 完全不参与的情况下处理某些请求。

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

关于c++ - Memcached 是还是不是? (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282009/

相关文章:

c++ - 如何使用 CImg.h 库在另一张图片上显示一张图片?

mysql - 在另一列中使用组功能的最有效方法

javascript - MongoDB:find({...}).limit(#) 背后的真相

sql - Sql如何只返回所有重复的条目

python - Redis 示例给出 HTTP 400 : Bad request error

java - 缓存搜索结果实现

c++ - RGB 归一化给出黑色图像

c++ - 在 C 中返回堆栈数据;它是否正确取消分配?

c++ - 以局部变量为参数的 pthread_create

javascript - 将 CSS 和 JS 存储在具有 phonegap 之类的 webview 的 Android 应用程序中?