您好,登錄后才能下訂單哦!
隨著應對大規模交易的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功能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。