<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>模組二案例正文 on Tarragon</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/</link><description>Recent content in 模組二案例正文 on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Thu, 07 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/backend/02-cache-redis/cases/index.xml" rel="self" type="application/rss+xml"/><item><title>2.C1 Meta：Cache Consistency 升級</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-cache-consistency-upgrade/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-cache-consistency-upgrade/</guid><description>&lt;p>這個案例的核心責任是說明快取轉換不只在容量與速度，還包括一致性治理能力。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Meta 指出快取在 promotion、shard move、故障恢復時容易引入不一致，單靠傳統 invalidation 很難在大規模系統維持穩定。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當快取已是核心路徑，資料新鮮度問題會直接變成服務正確性問題。這時候轉換重點是把一致性追蹤與異常定位制度化，改一個 TTL 解決不了結構問題。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>先定義 inconsistency 來源點與觀測點。&lt;/li>
&lt;li>將 mutation tracing 納入治理，而不是只看命中率。&lt;/li>
&lt;li>把一致性指標接到告警與回退條件。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>先回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2 cache aside&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/ttl-eviction/" data-link-title="2.3 TTL 與 eviction" data-link-desc="整理過期策略、容量控制與熱點資料">2.3 TTL/eviction&lt;/a>，再接 &lt;a href="https://tarrragon.github.io/blog/backend/04-observability/telemetry-data-quality/" data-link-title="4.17 Telemetry Data Quality" data-link-desc="把 missing signal、schema drift、sampling bias 與 timestamp skew 變成資料品質問題">4.17 telemetry data quality&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://engineering.fb.com/2022/06/08/core-infra/cache-made-consistent/">Cache made consistent&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是說明快取轉換不只在容量與速度，還包括一致性治理能力。</p>
<h2 id="觀察">觀察</h2>
<p>Meta 指出快取在 promotion、shard move、故障恢復時容易引入不一致，單靠傳統 invalidation 很難在大規模系統維持穩定。</p>
<h2 id="判讀">判讀</h2>
<p>當快取已是核心路徑，資料新鮮度問題會直接變成服務正確性問題。這時候轉換重點是把一致性追蹤與異常定位制度化，改一個 TTL 解決不了結構問題。</p>
<h2 id="策略">策略</h2>
<ol>
<li>先定義 inconsistency 來源點與觀測點。</li>
<li>將 mutation tracing 納入治理，而不是只看命中率。</li>
<li>把一致性指標接到告警與回退條件。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>先回 <a href="/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2 cache aside</a> 與 <a href="/blog/backend/02-cache-redis/ttl-eviction/" data-link-title="2.3 TTL 與 eviction" data-link-desc="整理過期策略、容量控制與熱點資料">2.3 TTL/eviction</a>，再接 <a href="/blog/backend/04-observability/telemetry-data-quality/" data-link-title="4.17 Telemetry Data Quality" data-link-desc="把 missing signal、schema drift、sampling bias 與 timestamp skew 變成資料品質問題">4.17 telemetry data quality</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://engineering.fb.com/2022/06/08/core-infra/cache-made-consistent/">Cache made consistent</a></li>
</ul>
]]></content:encoded></item><item><title>2.C2 Meta：mcrouter 與跨區快取路由</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-mcrouter-global-cache-routing/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-mcrouter-global-cache-routing/</guid><description>&lt;p>這個案例的核心責任是說明快取規模變大後，路由層本身會成為選型主題。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>mcrouter 被用來統一處理大量 memcached 流量與跨叢集路由，代表快取已從局部優化變成平台層能力。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當快取服務跨區、跨叢集且請求量極高時，應把路由策略、故障切換與運維一致性視為主議題。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>把 client 端散落邏輯收斂到路由層。&lt;/li>
&lt;li>把跨區路由與故障策略標準化。&lt;/li>
&lt;li>用可觀測訊號監控路由品質與新鮮度。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/high-concurrency-access/" data-link-title="2.1 高併發下的 Redis 讀寫邊界" data-link-desc="說明高併發服務如何共用 Redis client、控制 pipeline 與避免 cache stampede">2.1 高併發 Redis 邊界&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/05-deployment-platform/service-discovery/" data-link-title="5.4 service discovery" data-link-desc="整理 endpoint discovery 與 DNS">5.4 service discovery&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://engineering.fb.com/2014/09/15/web/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments/">Introducing mcrouter&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是說明快取規模變大後，路由層本身會成為選型主題。</p>
<h2 id="觀察">觀察</h2>
<p>mcrouter 被用來統一處理大量 memcached 流量與跨叢集路由，代表快取已從局部優化變成平台層能力。</p>
<h2 id="判讀">判讀</h2>
<p>當快取服務跨區、跨叢集且請求量極高時，應把路由策略、故障切換與運維一致性視為主議題。</p>
<h2 id="策略">策略</h2>
<ol>
<li>把 client 端散落邏輯收斂到路由層。</li>
<li>把跨區路由與故障策略標準化。</li>
<li>用可觀測訊號監控路由品質與新鮮度。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/high-concurrency-access/" data-link-title="2.1 高併發下的 Redis 讀寫邊界" data-link-desc="說明高併發服務如何共用 Redis client、控制 pipeline 與避免 cache stampede">2.1 高併發 Redis 邊界</a> 與 <a href="/blog/backend/05-deployment-platform/service-discovery/" data-link-title="5.4 service discovery" data-link-desc="整理 endpoint discovery 與 DNS">5.4 service discovery</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://engineering.fb.com/2014/09/15/web/introducing-mcrouter-a-memcached-protocol-router-for-scaling-memcached-deployments/">Introducing mcrouter</a></li>
</ul>
]]></content:encoded></item><item><title>2.C3 Shopify：快取序列化格式遷移</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/shopify-cache-serialization-migration/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/shopify-cache-serialization-migration/</guid><description>&lt;p>這個案例的核心責任是說明快取轉換常見的格式遷移如何安全落地。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Shopify 在快取編碼轉換過程使用雙軌策略，先允許新舊格式共存，再逐步收斂。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>快取格式轉換本質上是相容性遷移。若一次切換，回退與資料可讀性風險會放大。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>新格式可編碼就先寫新格式。&lt;/li>
&lt;li>編碼失敗回落舊格式，保留服務可用性。&lt;/li>
&lt;li>維持一段雙軌期，觀測命中率與錯誤率再收斂。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2 cache aside&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/06-reliability/migration-safety/" data-link-title="6.11 Migration Safety 與 DB Rollout" data-link-desc="把 schema migration 從一次性事件變成可逆、可漸進的 rollout 流程">6.11 migration safety&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://shopify.engineering/caching-without-marshal-part-two-messagepack">Caching Without Marshal Part 2&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是說明快取轉換常見的格式遷移如何安全落地。</p>
<h2 id="觀察">觀察</h2>
<p>Shopify 在快取編碼轉換過程使用雙軌策略，先允許新舊格式共存，再逐步收斂。</p>
<h2 id="判讀">判讀</h2>
<p>快取格式轉換本質上是相容性遷移。若一次切換，回退與資料可讀性風險會放大。</p>
<h2 id="策略">策略</h2>
<ol>
<li>新格式可編碼就先寫新格式。</li>
<li>編碼失敗回落舊格式，保留服務可用性。</li>
<li>維持一段雙軌期，觀測命中率與錯誤率再收斂。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2 cache aside</a> 與 <a href="/blog/backend/06-reliability/migration-safety/" data-link-title="6.11 Migration Safety 與 DB Rollout" data-link-desc="把 schema migration 從一次性事件變成可逆、可漸進的 rollout 流程">6.11 migration safety</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://shopify.engineering/caching-without-marshal-part-two-messagepack">Caching Without Marshal Part 2</a></li>
</ul>
]]></content:encoded></item><item><title>2.C4 Meta：CacheLib / Kangaroo 分層快取</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-cachelib-kangaroo-tiered-cache/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-cachelib-kangaroo-tiered-cache/</guid><description>&lt;p>這個案例的核心責任是說明快取容量壓力升高後，策略會從單層記憶體轉向分層管理。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Meta 透過 CacheLib 與 Kangaroo 把快取結構擴展到記憶體與快閃分層，改善容量與成本平衡。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當熱門資料集合超過 DRAM 經濟範圍時，單層快取會同時遇到成本與命中率瓶頸。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>定義不同資料熱度的落層策略。&lt;/li>
&lt;li>把 eviction 與回補延遲納入共同指標。&lt;/li>
&lt;li>驗證分層後 tail latency 與成本曲線。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/ttl-eviction/" data-link-title="2.3 TTL 與 eviction" data-link-desc="整理過期策略、容量控制與熱點資料">2.3 TTL/eviction&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/06-reliability/capacity-cost/" data-link-title="6.9 容量與成本邊界" data-link-desc="把容量規劃跟成本約束變成驗證輸入">6.9 capacity/cost&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://engineering.fb.com/2021/04/09/core-data/cachelib/">CacheLib and Kangaroo&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是說明快取容量壓力升高後，策略會從單層記憶體轉向分層管理。</p>
<h2 id="觀察">觀察</h2>
<p>Meta 透過 CacheLib 與 Kangaroo 把快取結構擴展到記憶體與快閃分層，改善容量與成本平衡。</p>
<h2 id="判讀">判讀</h2>
<p>當熱門資料集合超過 DRAM 經濟範圍時，單層快取會同時遇到成本與命中率瓶頸。</p>
<h2 id="策略">策略</h2>
<ol>
<li>定義不同資料熱度的落層策略。</li>
<li>把 eviction 與回補延遲納入共同指標。</li>
<li>驗證分層後 tail latency 與成本曲線。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/ttl-eviction/" data-link-title="2.3 TTL 與 eviction" data-link-desc="整理過期策略、容量控制與熱點資料">2.3 TTL/eviction</a> 與 <a href="/blog/backend/06-reliability/capacity-cost/" data-link-title="6.9 容量與成本邊界" data-link-desc="把容量規劃跟成本約束變成驗證輸入">6.9 capacity/cost</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://engineering.fb.com/2021/04/09/core-data/cachelib/">CacheLib and Kangaroo</a></li>
</ul>
]]></content:encoded></item><item><title>2.C5 Shopify：Write-through Cache 在高讀流量的實作</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/shopify-write-through-cache-at-scale/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/shopify-write-through-cache-at-scale/</guid><description>&lt;p>這個案例的核心責任是把快取從被動補貨模式，轉成資料寫入時即同步更新的模式。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Shopify 在高讀取路徑以 write-through 策略降低 miss 風險，改善熱門資料讀取穩定性。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當 cache miss 成本過高且資料更新可控時，write-through 能降低讀路徑抖動。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>把寫入流程與快取更新綁定。&lt;/li>
&lt;li>對失敗寫入設計補償與重試。&lt;/li>
&lt;li>用 hit rate 與 stale rate 檢驗策略收益。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2 cache aside&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/06-reliability/release-gate/" data-link-title="6.8 Release Gate 與變更節奏" data-link-desc="把驗證、migration、相容性納入放行判準">6.8 release gate&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://shopify.engineering/horizontally-scaling-the-rails-backend-of-shop-app-with-vitess">How Shop App uses write-through caching&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是把快取從被動補貨模式，轉成資料寫入時即同步更新的模式。</p>
<h2 id="觀察">觀察</h2>
<p>Shopify 在高讀取路徑以 write-through 策略降低 miss 風險，改善熱門資料讀取穩定性。</p>
<h2 id="判讀">判讀</h2>
<p>當 cache miss 成本過高且資料更新可控時，write-through 能降低讀路徑抖動。</p>
<h2 id="策略">策略</h2>
<ol>
<li>把寫入流程與快取更新綁定。</li>
<li>對失敗寫入設計補償與重試。</li>
<li>用 hit rate 與 stale rate 檢驗策略收益。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2 cache aside</a> 與 <a href="/blog/backend/06-reliability/release-gate/" data-link-title="6.8 Release Gate 與變更節奏" data-link-desc="把驗證、migration、相容性納入放行判準">6.8 release gate</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://shopify.engineering/horizontally-scaling-the-rails-backend-of-shop-app-with-vitess">How Shop App uses write-through caching</a></li>
</ul>
]]></content:encoded></item><item><title>2.C6 Netflix：EVCache 全域快取層</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/netflix-evcache-global-cache-layer/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/netflix-evcache-global-cache-layer/</guid><description>&lt;p>這個案例的核心責任是說明快取在全球服務下會變成平台能力。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Netflix 用 EVCache 支撐大規模低延遲讀取，把快取從單服務實作提升為共用基礎設施。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當讀取延遲目標很嚴格且區域分布廣，快取需要跨區一致性與故障容忍設計。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>平台化快取客戶端與治理規則。&lt;/li>
&lt;li>把失效策略與區域容錯納入同一模型。&lt;/li>
&lt;li>以可觀測指標評估命中率與恢復能力。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/high-concurrency-access/" data-link-title="2.1 高併發下的 Redis 讀寫邊界" data-link-desc="說明高併發服務如何共用 Redis client、控制 pipeline 與避免 cache stampede">2.1&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/00-service-selection/failure-observability-design/" data-link-title="0.7 錯誤定位、觀測訊號與備援切換設計" data-link-desc="從錯誤分類、定位線索、降級策略與 failover 設計服務可維護性">0.7&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://netflixtechblog.com/caching-for-a-global-netflix-7bcc457012f1">EVCache&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是說明快取在全球服務下會變成平台能力。</p>
<h2 id="觀察">觀察</h2>
<p>Netflix 用 EVCache 支撐大規模低延遲讀取，把快取從單服務實作提升為共用基礎設施。</p>
<h2 id="判讀">判讀</h2>
<p>當讀取延遲目標很嚴格且區域分布廣，快取需要跨區一致性與故障容忍設計。</p>
<h2 id="策略">策略</h2>
<ol>
<li>平台化快取客戶端與治理規則。</li>
<li>把失效策略與區域容錯納入同一模型。</li>
<li>以可觀測指標評估命中率與恢復能力。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/high-concurrency-access/" data-link-title="2.1 高併發下的 Redis 讀寫邊界" data-link-desc="說明高併發服務如何共用 Redis client、控制 pipeline 與避免 cache stampede">2.1</a> 與 <a href="/blog/backend/00-service-selection/failure-observability-design/" data-link-title="0.7 錯誤定位、觀測訊號與備援切換設計" data-link-desc="從錯誤分類、定位線索、降級策略與 failover 設計服務可維護性">0.7</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://netflixtechblog.com/caching-for-a-global-netflix-7bcc457012f1">EVCache</a></li>
</ul>
]]></content:encoded></item><item><title>2.C7 Cloudflare：Cache Reserve 分層儲存快取</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/cloudflare-cache-reserve-tiered-storage/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/cloudflare-cache-reserve-tiered-storage/</guid><description>&lt;p>這個案例的核心責任是把快取從短期命中策略擴展到長期容量策略。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Cloudflare Cache Reserve 透過分層儲存延長快取可用性，降低 origin 回源成本。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當熱門資料長尾明顯，僅靠 edge cache 會有命中率上限，需引入分層儲存。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>定義 edge 與 reserve 的資料分層規則。&lt;/li>
&lt;li>把回源成本納入快取策略評估。&lt;/li>
&lt;li>監控命中率、延遲與儲存成本三者平衡。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/ttl-eviction/" data-link-title="2.3 TTL 與 eviction" data-link-desc="整理過期策略、容量控制與熱點資料">2.3&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/06-reliability/capacity-cost/" data-link-title="6.9 容量與成本邊界" data-link-desc="把容量規劃跟成本約束變成驗證輸入">6.9&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://blog.cloudflare.com/introducing-cache-reserve/">Cloudflare Cache Reserve&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是把快取從短期命中策略擴展到長期容量策略。</p>
<h2 id="觀察">觀察</h2>
<p>Cloudflare Cache Reserve 透過分層儲存延長快取可用性，降低 origin 回源成本。</p>
<h2 id="判讀">判讀</h2>
<p>當熱門資料長尾明顯，僅靠 edge cache 會有命中率上限，需引入分層儲存。</p>
<h2 id="策略">策略</h2>
<ol>
<li>定義 edge 與 reserve 的資料分層規則。</li>
<li>把回源成本納入快取策略評估。</li>
<li>監控命中率、延遲與儲存成本三者平衡。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/ttl-eviction/" data-link-title="2.3 TTL 與 eviction" data-link-desc="整理過期策略、容量控制與熱點資料">2.3</a> 與 <a href="/blog/backend/06-reliability/capacity-cost/" data-link-title="6.9 容量與成本邊界" data-link-desc="把容量規劃跟成本約束變成驗證輸入">6.9</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://blog.cloudflare.com/introducing-cache-reserve/">Cloudflare Cache Reserve</a></li>
</ul>
]]></content:encoded></item><item><title>2.C8 Meta：TAO 社交圖快取演進</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-tao-social-graph-cache-evolution/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/meta-tao-social-graph-cache-evolution/</guid><description>&lt;p>這個案例的核心責任是說明快取在高關聯查詢場景會接近資料庫層角色。&lt;/p>
&lt;h2 id="觀察">觀察&lt;/h2>
&lt;p>Meta TAO 用於社交圖讀取，演進重點在一致性、可擴展性與資料關聯查詢效率。&lt;/p>
&lt;h2 id="判讀">判讀&lt;/h2>
&lt;p>當查詢負載是高度關聯圖資料，快取策略需從 key-value 轉向資料模型治理。&lt;/p>
&lt;h2 id="策略">策略&lt;/h2>
&lt;ol>
&lt;li>把資料關聯模型納入快取鍵設計。&lt;/li>
&lt;li>以一致性窗口設計更新策略。&lt;/li>
&lt;li>定期驗證讀取正確性與延遲目標。&lt;/li>
&lt;/ol>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/01-database/schema-design/" data-link-title="1.2 Schema Design 與資料建模" data-link-desc="整理 table、index、key、partition、denormalization 與命名規則">1.2&lt;/a>。&lt;/p>
&lt;h2 id="引用源">引用源&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://engineering.fb.com/2013/06/25/core-infra/tao-the-power-of-the-graph/">TAO: Facebook&amp;rsquo;s Distributed Data Store&lt;/a>&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個案例的核心責任是說明快取在高關聯查詢場景會接近資料庫層角色。</p>
<h2 id="觀察">觀察</h2>
<p>Meta TAO 用於社交圖讀取，演進重點在一致性、可擴展性與資料關聯查詢效率。</p>
<h2 id="判讀">判讀</h2>
<p>當查詢負載是高度關聯圖資料，快取策略需從 key-value 轉向資料模型治理。</p>
<h2 id="策略">策略</h2>
<ol>
<li>把資料關聯模型納入快取鍵設計。</li>
<li>以一致性窗口設計更新策略。</li>
<li>定期驗證讀取正確性與延遲目標。</li>
</ol>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2</a> 與 <a href="/blog/backend/01-database/schema-design/" data-link-title="1.2 Schema Design 與資料建模" data-link-desc="整理 table、index、key、partition、denormalization 與命名規則">1.2</a>。</p>
<h2 id="引用源">引用源</h2>
<ul>
<li><a href="https://engineering.fb.com/2013/06/25/core-infra/tao-the-power-of-the-graph/">TAO: Facebook&rsquo;s Distributed Data Store</a></li>
</ul>
]]></content:encoded></item><item><title>2.C9 反例：快取切換引發 Stampede 回歸</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/failure-cache-stampede-rollout-regression/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/failure-cache-stampede-rollout-regression/</guid><description>&lt;p>這個反例的核心責任是說明快取轉換最常失敗在回源保護不足。&lt;/p>
&lt;h2 id="事故長相">事故長相&lt;/h2>
&lt;p>一次看似低風險的 cache key 或 TTL 切換，會讓熱門資料同時 miss。使用者看到的是 API 變慢與錯誤率上升，資料庫看到的是原本被快取吸收的流量突然全部回源。&lt;/p>
&lt;h2 id="為什麼會擴大">為什麼會擴大&lt;/h2>
&lt;p>快取切換如果沒有 warmup、singleflight、節流與降級保護，miss 會引發重試，重試又會增加 origin 壓力。影響面是讀取路徑同時失去緩衝，單一 key 層級的思考抓不到全貌。&lt;/p>
&lt;h2 id="回退判讀">回退判讀&lt;/h2>
&lt;p>回退不應只把程式版本切回去。若新舊快取 key、TTL 或序列化格式已經混在一起，回退還要處理資料可讀性與回源壓力。實務上要先降載或恢復舊 key 讀取，再逐步清理新策略留下的快取狀態。&lt;/p>
&lt;h2 id="快取專屬告警條件">快取專屬告警條件&lt;/h2>
&lt;ul>
&lt;li>熱門 key miss 同步上升，且 origin QPS 快速超過平日基線&lt;/li>
&lt;li>response time 拉長並伴隨重試流量增加&lt;/li>
&lt;li>stale read 與 cache miss 同時惡化&lt;/li>
&lt;/ul>
&lt;h2 id="下一步路由">下一步路由&lt;/h2>
&lt;p>回 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2&lt;/a> 與 &lt;a href="https://tarrragon.github.io/blog/backend/06-reliability/rule-rollout-safety-gate/" data-link-title="6.24 規則推送安全閘門" data-link-desc="把規則、策略與控制面配置推送從部署步驟升級為可靠性 gate，避免小變更在秒級擴散成全網事故。">6.24&lt;/a>。&lt;/p></description><content:encoded><![CDATA[<p>這個反例的核心責任是說明快取轉換最常失敗在回源保護不足。</p>
<h2 id="事故長相">事故長相</h2>
<p>一次看似低風險的 cache key 或 TTL 切換，會讓熱門資料同時 miss。使用者看到的是 API 變慢與錯誤率上升，資料庫看到的是原本被快取吸收的流量突然全部回源。</p>
<h2 id="為什麼會擴大">為什麼會擴大</h2>
<p>快取切換如果沒有 warmup、singleflight、節流與降級保護，miss 會引發重試，重試又會增加 origin 壓力。影響面是讀取路徑同時失去緩衝，單一 key 層級的思考抓不到全貌。</p>
<h2 id="回退判讀">回退判讀</h2>
<p>回退不應只把程式版本切回去。若新舊快取 key、TTL 或序列化格式已經混在一起，回退還要處理資料可讀性與回源壓力。實務上要先降載或恢復舊 key 讀取，再逐步清理新策略留下的快取狀態。</p>
<h2 id="快取專屬告警條件">快取專屬告警條件</h2>
<ul>
<li>熱門 key miss 同步上升，且 origin QPS 快速超過平日基線</li>
<li>response time 拉長並伴隨重試流量增加</li>
<li>stale read 與 cache miss 同時惡化</li>
</ul>
<h2 id="下一步路由">下一步路由</h2>
<p>回 <a href="/blog/backend/02-cache-redis/cache-aside/" data-link-title="2.2 cache aside 與失效策略" data-link-desc="整理 read-through 思路、cache miss 與 invalidation">2.2</a> 與 <a href="/blog/backend/06-reliability/rule-rollout-safety-gate/" data-link-title="6.24 規則推送安全閘門" data-link-desc="把規則、策略與控制面配置推送從部署步驟升級為可靠性 gate，避免小變更在秒級擴散成全網事故。">6.24</a>。</p>
]]></content:encoded></item><item><title>2.C10 對照：規模差異下的快取策略</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/contrast-cache-strategy-by-scale/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/cases/contrast-cache-strategy-by-scale/</guid><description>&lt;p>這篇對照的核心責任是避免把單一快取做法視為通用解。&lt;/p>
&lt;h2 id="小型服務常見判讀">小型服務常見判讀&lt;/h2>
&lt;p>小型服務最常遇到的問題是切換時沒有先保護回源，快取架構本身夠用。用 cache-aside + TTL 完全可行，但如果沒有 warmup 與簡單限流，某次部署就可能讓熱門 key 全部 miss，直接打爆資料庫。&lt;/p>
&lt;h2 id="中型服務常見判讀">中型服務常見判讀&lt;/h2>
&lt;p>中型服務開始同時承受活動流量與版本切換壓力。這時失敗通常出在「切換順序」而不是策略名稱。先改 key 結構還是先改 TTL，會決定是否出現 stampede 連鎖反應。&lt;/p>
&lt;h2 id="大型服務常見判讀">大型服務常見判讀&lt;/h2>
&lt;p>大型服務下，快取已經是資料平面的一部分。跨區路由、分層儲存與一致性窗口會直接影響業務正確性。這個階段若只盯 hit rate，會漏掉最關鍵的資料一致性風險。&lt;/p>
&lt;h2 id="這個情境的專屬告警條件">這個情境的專屬告警條件&lt;/h2>
&lt;ul>
&lt;li>&lt;code>origin QPS&lt;/code> 在 5 分鐘內超過基線 2 倍且持續上升&lt;/li>
&lt;li>熱門 key miss 同步上升，並伴隨重試流量增加&lt;/li>
&lt;li>stale read 比例連續惡化&lt;/li>
&lt;/ul>
&lt;p>任何一條成立就先暫停切換，回退上一個策略狀態，優先保護回源與資料一致性。&lt;/p></description><content:encoded><![CDATA[<p>這篇對照的核心責任是避免把單一快取做法視為通用解。</p>
<h2 id="小型服務常見判讀">小型服務常見判讀</h2>
<p>小型服務最常遇到的問題是切換時沒有先保護回源，快取架構本身夠用。用 cache-aside + TTL 完全可行，但如果沒有 warmup 與簡單限流，某次部署就可能讓熱門 key 全部 miss，直接打爆資料庫。</p>
<h2 id="中型服務常見判讀">中型服務常見判讀</h2>
<p>中型服務開始同時承受活動流量與版本切換壓力。這時失敗通常出在「切換順序」而不是策略名稱。先改 key 結構還是先改 TTL，會決定是否出現 stampede 連鎖反應。</p>
<h2 id="大型服務常見判讀">大型服務常見判讀</h2>
<p>大型服務下，快取已經是資料平面的一部分。跨區路由、分層儲存與一致性窗口會直接影響業務正確性。這個階段若只盯 hit rate，會漏掉最關鍵的資料一致性風險。</p>
<h2 id="這個情境的專屬告警條件">這個情境的專屬告警條件</h2>
<ul>
<li><code>origin QPS</code> 在 5 分鐘內超過基線 2 倍且持續上升</li>
<li>熱門 key miss 同步上升，並伴隨重試流量增加</li>
<li>stale read 比例連續惡化</li>
</ul>
<p>任何一條成立就先暫停切換，回退上一個策略狀態，優先保護回源與資料一致性。</p>
]]></content:encoded></item></channel></rss>