在我們的項目中,我們正在測試事務如何在分佈式環境中工作。作爲項目的一部分,我們正在測試GridGain 6.5.5的開源版本。GridGain事務問題
我們在下面的測試用例面臨很多問題:
- 我們沒有任何額外的規則測試緩存。
- 緩存存儲一個id-String作爲鍵,BigDecimal作爲一個值存儲。
- 我們正在對來自6,12和18個客戶端的第一個緩存的值進行基本操作(加法和減法)的測試。一個操作看起來像「從A中減去X,將X加到B中」。
- GridGain應用程序在WildFly中作爲.war文件進行部署。
- 客戶端使用HTTP通過部署的GridGain連接到WildFly併發送要執行的操作列表(我們正在測試具有1個操作,50,500,1000,5000操作的批處理)。
- 我們正在使用事務測試羣集多節點模式,我們已經使用的配置文件被進一步附加。
- 我們已經分別測試了悲觀和樂觀的交易。
- 如果結果值等於虛擬模式,我們稱結果值爲「一致」:一個客戶端,批次= 1,一個節點。我們有一個用於交叉檢查的虛擬程序(其在此模式下的結果總是等於本地模式下的GridGain)。
的問題是:
- 如果我們在做交易的,是(從一個密鑰值中減去,添加到另一個),我們面臨着兩個問題:死鎖和不一致的,如果我們沒有得到死鎖。不一致的值的數量很少,但我們無法避免它 - 每1000個鍵值約爲12。
- 如果我們改變我們的請求以便在每個客戶端按鍵排序(所以操作順序可能會改變),我們可以避免死鎖和不一致。但是,我們又遇到了另外一個問題:如果該批次至少有500個,那麼我們就會發生無法結束的交易失敗。如果批量很小,我們就會完全失敗GridGain(它不響應當前查詢)。
- 一切工作非常緩慢,我們幾乎沒有在同一時間的CPU負載(批次= 1000操作約6秒)。可以嗎?
我們的硬件:
8X戴爾M620刀片,256GB內存,2×8核至強E2650v2,萬兆以太網網絡。
附:
- GridGain樂觀的配置:https://gist.github.com/al-indigo/a2824aa62a3af8b18932
- GridGain悲觀配置:相同,但與
- GridGain日誌第二個問題:https://gist.github.com/al-indigo/233058772418fba8d341
只要我們注意到,僵局解決方案不起作用,當然我們開始避免以手動方式死鎖(如你所說)。儘管如此,在傳統的DBMS中使用了一些算法:http://en.wikipedia.org/wiki/Deadlock_provision。所以我們認爲它也可以在GridGain中。 但這不是主要觀點。 主要問題是相當少量的數據處理失敗(日誌附加到原始問題)和速度。 下面是我們使用的示例代碼(configgain for gridgain也在這個問題中):https://gist.github.com/al-indigo/438559003a7821c9779e – 2014-11-24 16:33:25
您可以添加測試用具代碼嗎?我們試圖以與您相同的方式重現它是至關重要的。 – Dmitriy 2014-11-24 20:31:08
我不確定我們可以因爲NDA。一般來說,我們使用Ansible和我們自己的劇本來部署所有內容並運行測試。自測試開始以來,除GridGain和Java客戶端應用程序之外,其他軟件層沒有任何影響。我可以(私下 - 請給我一個鏈接到你的電子郵件)我們的中間結果表,以證明一切工作沒有預期的那麼快。 – 2014-11-25 12:16:58