请求通过多个缓存层,每一层都更靠近用户,速度更快但容量较小。这个想法是尽可能地从外部(靠近客户端)响应,只有当上游没有任何层可以提供响应时才回退到源。
这些层,从外到内
text
Browser → CDN → Reverse proxy → App/object cache → OPcache → Database
(closest to user, fastest) (closest to data)
请求通过多个缓存层,每一层都更靠近用户,速度更快但容量较小。这个想法是尽可能地从外部(靠近客户端)响应,只有当上游没有任何层可以提供响应时才回退到源。
Browser → CDN → Reverse proxy → App/object cache → OPcache → Database
(closest to user, fastest) (closest to data)
Cache-Control/ETag 控制;资源通常获得很长的 TTL(天–年),并使用哈希文件名。for each layer outward → inward:
if layer has fresh copy → return it (stop here) // a hit; cheapest possible
else → ask the next layer in // a miss; falls through
origin (app + DB) → does the real work, fills caches on the way back out
每一层都在新鲜度和速度之间权衡:外层最快但最可能过时,所以对真正的静态内容放长 TTL + 内容哈希,对动态内容放短 TTL + 失效。
网络堆栈中的大部分延迟和负载减少来自于在正确的层进行缓存。了解每一层保存的内容及其典型 TTL 让你能够在真正有帮助的地方放置缓存、避免提供陈旧数据、以及推理为什么某项更改没有出现(哪一层仍在提供旧副本)。