應用實踐:如何在分散式快取中使用RT和WT?

趙鈺瑩發表於2018-06-06

  隨著應對大規模交易的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,而不是業務程式碼。

應用實踐:如何在分散式快取中使用RT和WT?
▲通讀式/直寫式快取架構

  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處理程式。

應用實踐:如何在分散式快取中使用RT和WT?

應用實踐:如何在分散式快取中使用RT和WT?

應用實踐:如何在分散式快取中使用RT和WT?

  Start()執行某些資源分配任務,例如建立到主資料來源的連線,而Stop()則意味著重置所有分配,Load是cache用於呼叫read-through物件的方法。

  開發Write-Through Handler

  當cache需要在更新快取時寫入資料庫時,將呼叫Write-Through Handler。 通常,應用程式透過新增,插入或刪除向cache釋出更新。

應用實踐:如何在分散式快取中使用RT和WT?

應用實踐:如何在分散式快取中使用RT和WT?

應用實踐:如何在分散式快取中使用RT和WT?

  Start()執行資源分配任務,例如建立到資料來源的連線,而Stop()意味著重置所有分配, Save是快取呼叫write-through物件的方法。

  從應用程式呼叫Read-Through和Write-Through

  以下示例程式碼展示瞭如何使用來自簡單Windows應用程式cache的read-through/write-through功能。

應用實踐:如何在分散式快取中使用RT和WT?

應用實踐:如何在分散式快取中使用RT和WT?

應用實踐:如何在分散式快取中使用RT和WT?

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2155746/,如需轉載,請註明出處,否則將追究法律責任。

相關文章