快取的好處通常是廣為人知的。 這項技術的運作方式是暫時將經常存取的數據從後端數據存放區複製到靠近應用程式的 快速記憶體 。 快取通常會在...
- 數據會保持相對靜態。
- 數據存取的速度很慢,尤其是和高速緩存相比。
- 數據受限於高層級的爭用。
為什麼?
如 Microsoft快取指引中所述,快取可以提升個別微服務和整個系統的效能、延展性和可用性。 它可減少處理大量併發請求至資料存儲系統的延遲和爭用。 隨著數據量和用戶數目增加,快取的優點就越大。
當用戶端重複讀取不可變或不常變更的數據時,快取最有效。 範例包括參考資訊,例如產品和定價資訊,或成本高昂的共用靜態資源。
雖然微服務應該是無狀態的,但分散式快取可支持絕對必要時並行存取會話狀態數據。
也請考慮快取以避免重複的計算。 如果作業轉換數據或執行複雜的計算,請快取後續要求的結果。
快取結構
雲端原生應用程式通常會實作分散式快取架構。 快取裝載為雲端式 後端服務,與微服務分開。 圖 5-15 顯示架構。
圖 5-15:雲端原生應用程式中的快取
在上圖中,請注意快取是獨立於微服務並由微服務共用的。 在此情境下,API 閘道會呼叫快取。 如第 4 章所述,閘道可作為所有傳入要求的前端。 分散式快取會盡可能傳回快取的數據來增加系統回應性。 此外,將快取與服務分開,使快取可以獨立擴展或擴充,以符合增加的流量需求。
上圖呈現稱為「另行快取」模式的常見快 取模式。 針對接收到的請求,您首先查詢快取,以取得回應(步驟 #1)。 如果找到,則會立即傳回數據。 如果快取中沒有數據(稱為 快取遺漏),則會從下游服務中的本機資料庫擷取數據(步驟 2)。 然後,資料會被寫入快取以便未來的請求(步驟 #3),並回傳給呼叫者。 務必定期小心清除快取的數據,確保系統保持及時且一致。
隨著共用快取的成長,分區其數據到多個節點可能會帶來益處。 這樣做有助於將爭用降至最低,並改善延展性。 許多快取服務都支援動態新增和移除節點,以及跨分割區重新平衡數據的能力。 這種方法通常牽涉到叢集。 叢集將聯合節點群組呈現為無縫的單一快取。 不過,在內部,數據會分散到節點,並遵循預先定義的散發策略,以平均平衡負載。
Azure Cache for Redis(Azure Redis 緩存)
Azure Cache for Redis 是安全的數據快取和傳訊代理程序服務,完全由Microsoft管理。 它作為平臺即服務 (PaaS) 供應專案取用,可提供高輸送量和低延遲的數據存取。 服務可供 Azure 內外的任何應用程式存取。
Azure Cache for Redis 服務會管理跨 Azure 資料中心裝載之開放原始碼 Redis 伺服器的存取權。 此服務可作為門面,提供管理、存取控制和安全性。 服務原生支援一組豐富的數據結構,包括字串、哈希、清單和集合。 如果您的應用程式已經使用 Redis,它將會與 Azure Cache for Redis 兼容 as-is。
Azure Cache for Redis 不僅僅是簡單的快取伺服器。 它可以支援數個案例來增強微服務架構:
- 記憶體內部數據存放區
- 分散式非關係資料庫
- 訊息代理程式
- 組態或探索伺服器
針對進階情境,快取資料的副本可以持久保存到磁碟。 如果重大事件同時停用主要和復本快取,則會從最新的快照集重新建構快取。
Azure Redis 快取有多種預先定義的組態和定價層可供使用。 進階層提供許多企業級功能,例如叢集、數據持續性、異地復寫和虛擬網路隔離。