技術和基礎架構→ Kesh層和數據存儲
Kesh層和數據存儲
1)為什麼需要多層kesh
Kesh是無需訪問「昂貴」子系統(DB,外部API,網絡)即可響應的捷徑。多層分配負載:瀏覽器→ CDN/ed → ge應用層→分布式kesh → DB/存儲。目標:降低P95/P99,卸載起源,更強大地承受峰值並降低字節成本。
2) kesha水平圖
1.Браузер: `Cache-Control`, `ETag`, `Last-Modified`, `stale-while-revalidate`.
2.CDN/Edge: TTL/ключ, Vary, Signed URLs, image-resize;tiered/shield.
3.Gateway/Service Mesh API:關於安全GET的簡短回程。
4.應用程序(in-process): LRU/LFU,用於熱鍵的近程緩存,毫秒。
5.分布式kesh (Redis/Memcached):用於揚聲器的主層。
6.緩存DB: Pg/Innodb緩沖區,PgBouncer multiplexing, materialized views.
7.磁盤/對象堆棧:precomputed snapshots, blob-kesh(例如S3+CDN)。
原則: "與用戶的距離越近-TTL越短,個性化就越少;數據越接近-一致性策略越豐富。"
3)腰帶模式
Cache-Aside (Lazy):我們從MISS上讀到來自源頭的貨物→儲存在kesh中的→。普羅斯特,給TTL控制。
Read-Through:應用程序通過kesh讀取,kesh本身是從源頭拉出的。集中策略很方便。
Write-Through:記錄立即進入kesh和源。更一致,但條目更昂貴。
Write-Back (Write-Behind):寫入kesh,源以異步方式更新(隊列)。速度快,需要交貨保證和等效性。
Refresh-Ahead:在「頂級」密鑰中,我們在TTL到期之前更新值。
其中:遊戲卡/目錄-cache-aside/read-through;計數器/排行榜-寫回+CRDT/聚合;貨幣/限額手冊-通過受控的TTL閱讀。
4)密鑰、分割和神經識別
Шаблон: `domain:entity:{id}:v{schema}|region={R}|currency={C}|lang={L}`.
僅將真正改變答案(區域,貨幣,語言,方案版本)的內容包含在密鑰中。
電路轉化:如果發生不兼容的變化,則在鍵中提高「vN」,從而避免大規模購買。
按產品/tenant進行命名:'tenant: {t}:'-對於多重類型至關重要。
「密鑰存在」的Bloom過濾器可以減少對源的訪問。
5)TTL,新鮮和殘疾
TTL矩陣:- 靜態(哈希文件):30-365天+「immutable」;
- 目錄/橫幅:5-60分鐘+「stale-wile-revalidate」;
- 領導層/報價:2-15秒;
- 目錄(貨幣/限額):1-10分鐘。
- 事件致殘:發布「產品」。updated '→禁用點鍵/前綴。
- 基於標簽的垃圾桶:按標簽分組清除(促銷/目錄版本)。
- Soft-Expiry: TTL到期後,我們以「stale」的形式放棄過時的版本,並行更新(SWR/SIE)。
- Versioned Keys> mass purge:更便宜、更安全。
6)Stampede,「熱門」鑰匙和競爭
Dogpile/Stampede保護:- 單次飛行(request coalescing):一個領導者更新密鑰,其他領導者等待。
- TTL擠壓:模糊到期,避免一次性崩潰。
- 本地SWR:我們給用戶一個過期的值,我們更新背景。
- Hot Keys:
將熱鍵復制到多個通過閱讀分布的「key#1..N」插槽;
過程內存中的近軸緩存;
預告片/refresh-ahead在高峰(比賽/比賽)之前。
重鍵的升級協變限制。
7)一致性和交叉層
Write-invalidate:寫入源時-同步禁用相應的密鑰(pub/sub)。
讀取修復:如果出現差異,請更新正確值的Kesh。
Eventual vs Strong:直接閱讀/短期TTL的關鍵現金交易;UI展示和統計-事件。
CRDT/聚合器:對於分布式計數器/評級-「merge-safe」結構(G-Counter,線程上的Top-K)。
級聯殘疾:「遊戲」更新使卡+清單+定制推薦緩存殘疾。
8)序列化、壓縮和格式
格式:protobuf/MessagePack比JSON快;CDN/瀏覽器-帶有Brotli的JSON。
在Redis中壓縮:對對象>1-2 KB有利,但要註意CPU。
按需部分響應/字段:少字節→少於TTFB和RAM。
9)驅逐政策和規模
LRU(默認)-安全;LFU更適合「流行」內容。
按鍵/值大小:保持控制(「avg value size」,「max」指標)。
namespace/tenant配額,以免單個產品被「吃掉」整個kesh。
10)安全和PII/PCI
個人/財務數據-不要在CDN/edge上和共享層中打結;使用令牌/投影。
通過client-side crypto在Redis中加密敏感值(註意TTL控制丟失)。
嚴格的ACL和網絡隔離;固定的NAT/IP,用於向提供商發送信息。
11)kesha的可觀察性和SLO
度量標準:- Hit Ratio(按圖層和前綴)、Origin Offload。
- TTFB/P95/P99 kesh之前/之後,Latency Redis。
- Evictions, OOM, keyspace hits/misses.
- Stampede rate(並行更新比例),refresh時間。
- Stale served % и Freshness lag.
- 遊戲目錄:Hit Ratio ≥ 85%,TTFB P95 ≤ 150毫秒(邊緣)。
- API參考:Revalidation-hit ≥ 60%, P95 ≤ 200毫秒。
- Redis:P99手術≤ 5毫秒,每小時不超過1%。
12)FinOps: 腰果成本
$/GB月RAM vs $/RPS起源:計算回報點。
Offload and egress: CDN+Redis減少了來自區域起源的出站流量。
Image/WebP/AVIF和非規範化可以節省最多的字節。
限制「昂貴的MISS」:分析「字節× MISS ×地區」。
13)示例(片段)
13.1 Cache-Aside with single-flight(偽代碼)
python def get(key, ttl, loader):
val = redis. get(key)
if val: return val with single_flight (key): # only one updates val = redis. get (key) # double check if val: return val data = loader () # request to source redis. setex(key, ttl_with_jitter(ttl), serialize(data))
return data
13.2根據事件發布殘疾
json
{
"event": "game. updated",
"game_id": "g123",
"affected": ["catalog:list:region=TR", "game:card:g123:"]
}
Consumer簽署了該頻道,並使「DEL」/「PUBLISH」與密鑰/標簽匹配。
13.3鍵與電路版本和位置
game:card:v2:id=g123 region=BR currency=BRL lang=pt-BR
14)實施支票
1.Kesha和TTL矩陣級別映射(靜態/半靜態/API)。
2.密鑰: 域,方案版本,地方/地區/貨幣,tenant.
3.選擇per-endpoint模式(aside/read-through/write-through/back)。
4.SWR/SIE,單次飛行和TTL推桿對陣踩踏。
5.事件障礙(pub/sub),團體標簽。
6.在峰會之前為「熱線」密鑰和prewarm提供近距離緩存。
7.格式和壓縮(protobuf/MsgPack,Brotli),尺寸控制。
8.LRU/LFU政策,namespace/tenant配額。
9.SLO/метрики: hit ratio, latency, evictions, stale %, freshness lag.
10.安全性:個人化、令牌化、網絡/ACL無商店。
15)反模式
「no-cache」「以防萬一」,TTL的豁免為零。
關鍵包括所有查詢/標題→基數爆炸。
每次發行時「整個CDN/Redis」的質量沖浪。
缺乏抗踩踏防護和「頂級鑰匙」一次性到期。
沒有配額/隔離的統一共享Redis;「熱」tenant吞噬了整個kesh。
對edge/CDN進行個人響應。
沒有新鮮遙測/進度→盲目控制。
16) iGaming/fintech上下文: 實用音符
排行榜/排名:TTL 2-10 s,aggregate流+CRDT,SWR發生故障。
遊戲/橫幅目錄:CDN+Redis;關鍵:區域/貨幣/語言;根據「promo: update」標簽進行殘疾。
支付狀態:寫入路徑上沒有緩存;閱讀-簡短的TTL (≤3 -5 c)或直接查詢。
KYC/AML回應:取消非PII衍生工具(狀態),不要將圖像/文檔存儲在Redis中。
VIP路徑:單獨的namespace/Redis池,優先服務。
底線
強大的kesh策略是層級體系結構,正確的更新模式,經過深思熟慮的TTL/殘疾,抗踩踏性,整潔的鍵和版本以及可觀察性和FinOps。按照這些原則,您將穩定P95/P99尾巴,減少源頭負荷並獲得可預測的毫秒成本-這對於產品和業務來說是最重要的。