使用FlexyPool度量你的XA事務連線池合適大小 - Vlad Mihalcea

banq發表於2019-07-02

使用Bitronix事務管理器可以實現自己的XA事務的連線池解決方案。根據Bitronix連線池文件,我們需要使用以下設定:

  • minPoolSize:初始連線池大小
  • maxPoolSize:連線池可以增長到的最大大小
  • maxIdleTime:連線在被銷燬之前保持空閒的最長時間
  • acquisitionTimeout:連線請求在丟擲超時之前可以等待的最長時間。預設值30s對我們的QoS來說太過分了

FlexyPool附帶預設度量標準實現,構建於Dropwizard Metrics之上,並提供兩種報告機制:

企業系統必須使用中央監控工具,例如GangliaGraphite,並指示FlexyPool使用不同的報告機制相當容易。我們的示例將報告匯出為CSV檔案,這是您可以自定義預設指標設定的方法

FlexyPool初始設定:

我們只需要給出足夠大的maxOverflow和retryAttempts,並讓FlexyPool平衡地找到池的大小。

minPoolSize:0   //池的初始大小為0
maxPoolSize:  1  //池的最大大小為1
acquisitionTimeout: 1  //在放棄超時異常之前,連線請求將等待1秒
maxOverflow: 9 //該池最多可以增加10個連線(初始maxPoolSize + maxOverflow)
retryAttempts: 30  //如果達到10的最終maxPoolSize並且沒有可用的連線,請求將在放棄之前重試30次。

案例:

點選標題可進入更多圖示分析:

我們的應用程式是一個批處理器,我們將讓它處理大量資料,以便我們收集各種指標。在分析指標後,我們可以得出以下結論:

  • 最大池大小應為8
  • 對於此最大池大小,不會嘗試重試。
  • 在池已達到其最大大小後,連線獲取時間已穩定。
  • 峰值連線租約時間為50秒,導致池大小從7增加到8.降低連線時間可以減少池大小。

如果資料庫最大連線數為100,則最多可以執行12個併發應用程式。

結論

FlexyPool簡化了連線池大小調整,同時為初始假設不再支援的無法預料的情況提供故障轉移機制。

只要重試次數超過某個閾值,就可以觸發警報,這樣我們就可以儘快介入。

 

相關文章