我们在哪里缓存数据?
数据缓存在任何地方,从前端到后端!
此图说明了我们在典型体系结构中缓存数据的位置。
沿流有多个层。
客户端应用:浏览器可以缓存 HTTP 响应。我们第一次通过 HTTP 请求数据,并在 HTTP 标头中返回带有过期策略的数据;我们再次请求数据,客户端应用首先尝试从浏览器缓存中检索数据。
CDN:CDN 缓存静态 Web 资源。客户端可以从附近的 CDN 节点检索数据。
负载均衡器:负载均衡器也可以缓存资源。
消息传递基础结构:消息代理首先将消息存储在磁盘上,然后使用者按照自己的节奏检索它们。根据保留策略,数据会在 Kafka 集群中缓存一段时间。
服务:服务中有多个缓存层。如果数据未缓存在 CPU 缓存中,则服务将尝试从内存中检索数据。有时,该服务具有第二级缓存,用于在磁盘上存储数据。
分布式缓存:像 Redis 这样的分布式缓存在内存中保存多个服务的键值对。它提供了比数据库更好的读/写性能。
全文搜索:我们有时需要使用全文搜索,如弹性搜索进行文档搜索或日志搜索。数据副本也会在搜索引擎中编入索引。
数据库:即使在数据库中,我们也有不同级别的缓存:
- WAL(Write-ahead Log):在构建 B 树索引之前,先将数据写入 WAL
- Bufferpool:分配给缓存查询结果的内存区域
- 物化视图:预先计算查询结果并存储在数据库表中,以提高查询性能
事务日志:记录所有事务和数据库更新
复制日志:用于记录数据库集群中的复制状态
交给您:由于数据缓存在如此多的级别,我们如何保证敏感的用户数据从系统中完全删除?