caching - 提供缓存即服务是个好主意吗?

标签 caching redis memcached scalability couchbase

我们有许多具有缓存需求的网络服务和网络应用程序应用程序,因此我们正在尝试提出缓存策略,以帮助所有团队,无论他们的技术选择如何。我们已经使用了在每个服务器节点上本地运行的 Memcached(未复制)和 Couchbase(多主),应用程序使用 Memcached 协议(protocol)在本地连接到它们,但 future 我们计划使用通过 REST API 公开的集中式缓存集群,它可以被使用在数据中心的不同服务器节点上运行的所有应用程序。以下是这一思考过程背后的原因:

  1. 轻松维护集群,无需担心应用服务器 节点。
  2. 用于访问缓存的单一协议(protocol)(HTTP)而无需担心 关于底层实现。(我们可能使用 Redis 或 Couchbase 或 Aerospike 集群)

但我们不确定这种策略,因为我们担心 HTTP 的网络开销会影响性能。

有人试过这个策略吗?将缓存作为集中式服务还是本地缓存是最好的选择?

最佳答案

虽然 HTTP 和网络确实会增加延迟,但通常您需要缓存,因为实际操作需要更长的时间。所以问题是:如果将缓存访问时间增加 1-2 毫秒,是否仍会显着缩短未缓存的操作时间?如果答案是肯定的,并且您遵循一些常见的最佳实践,那么拥有一个集中式缓存可能是个好主意。

您可能想要研究 HTTP 服务的低延迟、高吞吐量服务器端框架,例如 Node.js 或 Go。此外,您可能会受益于实现适当的 ETag在您的缓存 HTTP API 中支持。

另一种选择可能是集中缓存服务器而不将它们包装在 HTTP 层中。您提到的所有技术都有标准的缓存提供程序实现,可用于大多数现代 Web 框架。

关于caching - 提供缓存即服务是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29791632/

相关文章:

redis - Redis 是如何实现高吞吐量和性能的?

java - 如何加载 Couchbase Memcached 存储桶

javascript - 使用 RequireJS 缓存破坏特定模块

ASP.NET HttpModule RewritePath 虚拟目录缓存不刷新

Redis 未加载到 Codeship 中

node.js - 硬件和 Web 组件之间的实时通信协议(protocol)是什么?

php - Elasticsearch缓存/性能问题

java - Java中基于平面文件的内存读/写缓存

node.js - 使用带有 redis 的 Node 和套接字将数据从 C# 应用程序推送到 Web 界面

memcached - BlogEngine .Net 负载平衡两台服务器和一个数据库