極端交易處理模式:Write-behind緩衝

來源:互聯網
上載者:User

介紹

應用程式通常使用資料緩衝來提高效能,尤其針對那些大量應用唯讀事務的應用程式更是如此。當資料發生變化時,這些應用程式會直接更新資料庫。問題在於隨著負載的增加,回應時間將隨著更新的增長而延長。資料庫並不擅於執行大量處理少量記錄的並發事務。相對而言,處理批量事務才是資料庫的強項。

實際上,隨著額外負載的增加,回應時間急劇攀升,資料庫就會耗用CPU或者磁碟。傳統方式下,記憶體中緩衝(in-memory caches)的儲存會被限制,以滿足JVM的空餘記憶體空間。一旦我們需要緩衝更多數量的資料,緩衝就會不停地釋放資料,從而為其他資料留出儲存空間。而且,所需的記錄必須被不停地讀取,從而使得快取無效判定,並將資料庫直接暴露給完整的讀操作負載。

目前已有多個可用的產品,包括IBM? WebSphere? eXtreme Scale,Oracle Coherence和Gigaspaces,它們均支援將一簇JVM的空閑記憶體作為緩衝,而不是單個的JVM。這就使得合并JVM越多,緩衝支援的規模就越大。如果這些JVM都是額外的具有CPU、儲存空間和網路的伺服器,那麼讀請求的服務就是可伸縮的。通過使用write-behind技術,這些產品還提供更新要求的可伸縮服務。write-behind緩衝的延展性使得它可以解決極端交易處理(extreme transaction processing, XTP)情境。Gartner將XTP定義為:“一種應用風格,目的在於支援對分散式交易處理應用程式的設計、開發、部署、管理和維護,其特點在於對效能、延展性、可用性、安全、可管理與可靠性的特別要求。”

本文將使用IBM WebSphere eXtreme Scale示範如何利用write-behind模式最佳化應用程式的效能。write-behind功能能夠根據使用者配置的間隔時間,非同步地對後端資料庫進行批次更新。這一方式具備的明顯優勢就是能夠減少資料庫調用,從而減少事務負載,更快地訪問網格(grid)中的對象。它比write-through 緩衝具有更快的回應時間,後者對緩衝的更新會導致對資料庫的及時更新。使用write-behind,不再要求事務等待資料庫的寫操作完成。此外,它能夠避免應用程式出現資料庫錯誤,因為write-behind緩衝通過記憶體複製單元來保持變化,直到它將其傳輸給資料庫。

定義和配置關鍵概念

什麼是“write-behind”緩衝

在write-behind緩衝中,資料的讀取和更新通過緩衝進行,與write-through緩衝不同,更新的資料並不會立即傳到資料庫。相反,在緩衝中一旦進行更新操作,緩衝就會跟蹤髒記錄列表,並定期將當前的髒記錄集重新整理到資料庫中。作為額外的效能改善,緩衝會合并這些髒記錄。合并意味著如果相同的記錄被更新,或者在緩衝區內被多次標記為髒資料,則只保證最後一次更新。對於那些值更新非常頻繁,例如金融市場中的股票價格等情境,這種方式能夠很大程度上改善效能。如果股票價格每秒鐘變化100次,則意味著在30秒內會發生30 x 100次更新。合并將其減少至只有一次。

在WebSphere eXtreme Scale中,髒記錄列表會被複製,以保證JVM退出時仍然存在,使用者可以通過設定同步和非同步複製的數字,指定複製層級。同步複製意味著JVM退出時,沒有資料丟失,但由於主進程必須等待獲得變更資訊的複製品,因此速度會慢一些。非同步複製更快,但如果JVM在複製之前就退出,就會導致最近事務發生的變化可能會丟失。髒記錄列表將使用大型的批事務寫入到資料來源中。如果資料來源不可用,則網格會繼續處理請求,之後再重新嘗試。網格能夠隨著規模的變化提供更短的回應時間,因為變化會單獨地提交到網格,即使資料庫被停止,事務仍然能夠提交。

Write-behind緩衝並不能放之四海而皆準。write-behind的本質註定使用者看到的變化,即使被提交也不會立即反映到資料庫中。這種時間延遲被稱為“緩衝寫延遲(cache write latency)”或“資料庫腐敗(database staleness)”;發生在資料庫變更與更新資料(或者使得資料無效)以反映其變更的緩衝之間的延遲則被稱為“緩衝讀延遲(cache read latency)”或“緩衝腐敗(cache staleness)”。如果系統的每部分在訪問資料時都通過緩衝(例如,通過公用介面),那麼,由於緩衝總是保持最新的正確記錄,採用write- behind技術就是值得的。可以預見,採用write-behind的系統,作出變更的唯一路徑就只能是緩衝。

不管是稀疏的緩衝還是完整的緩衝,都可以用於write-behind特性。稀疏緩衝僅儲存資料的子集,可以被延遲填充。它通常使用關鍵字進行訪問,因為緩衝中並非所有的資料都能夠使用,使用緩衝進行查詢可能無法執行。完整緩衝包含了所有的資料,但在首次載入的時候耗時更長。第三種可行之策則是兼取二者所長。首先在短時間內預裝載資料的子集,然後消極式載入其餘資料。預裝載的子集資料大約在總數的20%,但它能夠滿足80%的請求。

採用這一方式使用緩衝的應用程式適用的情境為:適用簡單CRUD(建立,讀取,更新和刪除)模式的分區資料模型。

配置write-behind功能

對於WebSphere eXtrem Scale而言,在objectgrid.xml配置中,通過將writeBehind屬性添加到backingMap元素,就啟用了write- behind功能,如下所示。參數的值使用文法“"[T(time)][;][C(count)]",用以指定資料庫更新發生的時間。當到達設定的時間,或者隊列集中的變化次數達到設定的count值,更新就會被寫入到持久儲存中。

列表1:write-behind配置的樣本

<objectGrid name="UserGrid">

<backingMap name="Map" pluginCollectionRef="User" lockStrategy="PESSIMISTIC" writeBehind="T180;C1000"  />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.