[译] 开发者都应该懂的缓存系统

218 阅读2分钟

cache.jpeg

从前端到后端的各个环节都有数据缓存!

上图说明了在典型架构中我们缓存数据的位置。 沿着架构流程有多个缓存层级。 🔹 1. 客户端:HTTP响应的内容可在浏览器中进行缓存。我们首次通过HTTP请求数据,并在HTTP头部返回一个过期策略;我们再次请求数据,客户端会首先从浏览器缓存中获取数据。 🔹 2. CDN:CDN缓存静态Web资源,客户端可以从附近的CDN节点获取数据。 🔹 3. 负载均衡器:负载均衡器也可以缓存资源。 🔹 4. 消息中间件:消息中间件首先将消息存储在磁盘上,然后消费者根据自己的策略从消息中间件中获取数据。根据保留策略,数据在Kafka集群中缓存一段时间。 🔹 5. 服务层:服务层中有多个缓存层。如果数据不在CPU中缓存,服务将尝试从内存中获取数据。有时,服务具有二级缓存来存储磁盘上的数据。 🔹 6. 分布式缓存:像Redis这样的分布式缓存可以将数据存储在内存中。它提供了比数据库更好的读写性能。 🔹 7. 全文搜索:我们有时需要使用全文搜索,如Elastic Search,进行文档搜索或日志搜索。同时,在搜索引擎中建立数据的副本索引。 🔹 8. 数据库:即使在数据库中,我们也有不同级别的缓存:

  • WAL(预写日志):在构建B树索引之前,数据首先写入WAL
  • Bufferpool:分配给查询结果缓存的内存区域
  • 物化视图:预先计算查询结果并将其存储在数据库表中以获得更好的查询性能
  • 事务日志:记录所有事务和数据库更新
  • Replication log:用于记录数据库集群中的复制状态

原文地址:twitter.com/alexxubyte/…

关注 Go学堂 ,获取《go常见错误100例及原理解析》pdf英文文档