應用實踐:如何在分散式快取中使用RT和WT?
隨著應對大規模交易的Web應用程式、SOA和其他伺服器應用程式的爆炸式增長,資料儲存無法跟上應用增長速度,因為資料儲存無法繼續新增更多伺服器以擴充套件,這與可擴充套件性極高的應用架構不同。
在這種情況下,記憶體分散式快取為資料儲存瓶頸提供了極好的解決方案。它跨越多個伺服器(稱為叢集)將記憶體集中在一起,並保持所有伺服器之間的快取記憶體同步,並且可以像應用程式伺服器一樣不斷增長快取記憶體叢集,這減少了資料儲存的壓力,使其不再是可擴充套件性的瓶頸。
分散式快取主要有兩種使用方式:
·Cache:這是應用程式負責讀取和寫入資料庫的地方,Cache不與資料庫互動。Cache“kept aside”為更快,更具可擴充套件性的記憶體資料儲存。應用程式在從資料庫讀取任何內容之前需要檢查Cache。並且,應用程式在對資料庫進行更新後會自動更新Cache,保證應用程式可以確保Cache與資料庫內資料的同步。
·read-through/write-through(RT / WT):這是應用程式將Cache視為主資料儲存並從中讀取資料向其寫入資料的位置。快取負責將這些資料讀寫到資料庫,從而減輕應用負擔。Read-Through,業務程式碼首先呼叫Cache,如果Cache不命中由Cache回源到SoR,而不是業務程式碼(即由Cache讀SoR)。Write-Through,稱之為穿透寫模式/直寫模式,業務程式碼首先呼叫Cache寫(新增/修改)資料,然後由Cache負責寫快取和寫SoR,而不是業務程式碼。
▲通讀式/直寫式快取架構
Cache-aside是一種非常強大的技術,即業務程式碼圍繞Cache寫,是由業務程式碼直接維護快取,可以讓使用者進行復雜的資料庫查詢,包括連線和巢狀查詢,並以任何使用者想要的方式處理資料。儘管如此,Read-through / Write-through與Cache相比具有各種優勢,如下所述:
·簡化應用程式程式碼:在Cache-aside方法中,如果多個應用程式處理相同的資料,則應用程式程式碼將繼續具有複雜性並直接依賴於資料庫,甚至會重複執行程式碼。Read-through / Write-through將部分資料訪問程式碼從應用程式移至Cache層,極大地簡化了應用程式並更加清晰地提取資料。
·通過Read-through更好地實現可伸縮性:在許多情況下,快取項到期並且多個並行使用者執行緒最終觸發資料庫,將其與數以百萬計的快取項和數以千計的並行使用者請求相乘,資料庫負載明顯變高。但是,當從資料庫獲取最新副本時,“Read-through”將cache-item儲存至快取中,同時從資料庫中獲取最新副本。最終結果是應用程式永遠不會去資料庫獲取這些cache-items ,並且資料庫負載保持最小。
·使用Write-behind獲取更好得寫入效能:在cache-aside中,應用程式直接同步更新資料庫。Write-behind可讓應用程式快速更新快取並返回。然後,讓cache在後臺更新資料庫。
·使用Write-behind更好地實現資料庫可伸縮性:使用Write-behind,使用者可以指定限制條件,因此資料庫寫入速度不會像快取更新那樣快,因此資料庫壓力不會太大。此外,使用者可安排資料庫寫入在非高峰時段進行,再次將壓力降至最低。
·到期自動重新整理快取:使用Read-through ,Cache可自動從資料庫重新載入物件。這意味著應用程式不必在繁忙時間點選資料庫,因為最新的資料總是在Cache中。
·資料庫更改時自動重新整理Cache:當資料庫中相應的資料發生更改時,Read-through 允許Cache自動從資料庫中重新載入物件。 這意味著快取總是最新的,並且應用程式不必在繁忙時間點選資料庫,因為最新的資料總是在Cache中。
“讀取/寫入”(RT/WT)不適用於應用程式中的所有資料訪問,最適合從資料庫讀取單個行或讀取可直接對映到單個快取項資料的情況。即使資料週期性變化,頻繁讀取也是在Cache中實現。
開發Read-Through Handler
Read-Through Handler向cache伺服器註冊,並允許cache直接從資料庫讀取資料。 NCache伺服器提供了一個 Read-through handler介面。 這使NCache能夠呼叫Read-through處理程式。
Start()執行某些資源分配任務,例如建立到主資料來源的連線,而Stop()則意味著重置所有分配,Load是cache用於呼叫read-through物件的方法。
開發Write-Through Handler
當cache需要在更新快取時寫入資料庫時,將呼叫Write-Through Handler。 通常,應用程式通過新增,插入或刪除向cache釋出更新。
Start()執行資源分配任務,例如建立到資料來源的連線,而Stop()意味著重置所有分配, Save是快取呼叫write-through物件的方法。
從應用程式呼叫Read-Through和Write-Through
以下示例程式碼展示瞭如何使用來自簡單Windows應用程式cache的read-through/write-through功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2155746/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WEB 應用快取解析以及使用 Redis 實現分散式快取Web快取Redis分散式
- 如何在SPRING中同時管理本地快取和分散式快取? - techblogSpring快取分散式
- 聊聊本地快取和分散式快取快取分散式
- 讀《深入分散式快取 - 從原理到實踐》分散式快取
- 大型分散式網站架構:快取在分散式系統中的應用分散式網站架構快取
- 分散式快取NCache使用分散式快取
- Alluxio在多級分散式快取系統中的應用UX分散式快取
- 實戰併發-使用分散式快取和有限狀態機分散式快取
- Springboot應用快取實踐之:Ehcache加持Spring Boot快取
- 用Java寫一個分散式快取——快取管理Java分散式快取
- 分散式快取分散式快取
- Guava Cache本地快取在 Spring Boot應用中的實踐Guava快取Spring Boot
- redis→分散式快取Redis分散式快取
- 分散式快取方案分散式快取
- 聊聊分散式快取分散式快取
- 淺談分散式 ID 的實踐與應用分散式
- Android快應用實踐Android
- Gitlab Runner的分散式快取實戰Gitlab分散式快取
- 應對分散式快取當機的方案分散式快取
- 用Java寫一個分散式快取——快取淘汰演算法Java分散式快取演算法
- 分散式快取Redis Cluster在華泰證券的探索與實踐分散式快取Redis
- Java併發:分散式應用限流 Redis + Lua 實踐Java分散式Redis
- 蘇寧citus分散式資料庫應用實踐分散式資料庫
- 讀構建可擴充套件分散式系統:方法與實踐05分散式快取套件分散式快取
- SmartSql Redis 分散式快取SQLRedis分散式快取
- 分散式快取擊穿分散式快取
- 在Kubernetes上使用Spring Boot實現Hazelcast分散式快取 – PiotrSpring BootAST分散式快取
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- Redis——快取穿透、快取擊穿、快取雪崩、分散式鎖Redis快取穿透分散式
- 分散式中灰度方案實踐分散式
- 結合Hazelcast和Spring的分散式快取 - reflectoringASTSpring分散式快取
- 用程式碼來實踐Web快取Web快取
- 系統效能提升優先法寶|快取應用實踐快取
- 分散式之快取擊穿分散式快取
- k04_分散式快取分散式快取
- 分散式快取 - 概念解釋分散式快取
- 分散式快取基礎教程分散式快取
- 雲上的分散式快取分散式快取