聊聊數據庫事務內嵌TCP連接

最近再看項目代碼,發現很多的service裏面,喜歡在事務內部再去調用HTTP請求,簡單分析下此種方式的利弊與解決策略。

概述

在數據庫內部嵌套TCP連接(一般是HTTP調用或是RPC遠程調用)。

@Transactional(rollbackFor = Exception.class)
public Boolean inviteUser(..){
    // service 調用
    userService.add(..);
	// HTTP調用
    httpClient.post(..,20)
}

優點:

  1. 保障兩個操作間的原子性、隔離性。
  2. 事務控制: 建立TCP連接可以使數據庫管理系統更好地控制和監視事務。它可以跟蹤連接的狀態和事務的執行進度,從而更容易實現事務管理和恢復。
  3. 性能優化: 內部TCP連接可以針對特定的事務進行性能優化。例如,可以爲事務分配更多的系統資源,以提高其執行速度。
  4. 安全性: 內部TCP連接可以通過加密和認證來增強安全性,確保只有授權的用戶或應用程序能夠訪問數據庫

弊端:

  1. TCP連接可能會超時,導致事務變成長事務。
  2. 網絡抖動出現異常,可能會導致前一個正常的操作回滾。
  3. 資源消耗: 每個TCP連接都需要消耗系統資源,包括內存和處理能力。在高負載情況下,內部建立TCP連接可能導致資源耗盡,影響其他事務的執行。
  4. 連接維護開銷: 維護大量的TCP連接可能會增加數據庫管理系統的開銷。每個連接都需要管理、維護和監視,這可能會導致性能下降。
  5. 複雜性: 內部TCP連接引入了更復雜的架構,需要更多的管理和維護工作。這可能需要更多的開發和管理工作,並增加了系統的複雜性。
  6. 連接延遲: 建立和維護TCP連接需要時間,這可能會導致事務的啓動延遲。對於需要快速響應的事務,這可能是一個不利因素。

解決方案

評估審視多個操作調用之間是否有強一致性。

  1. 有強一致性

必須手動開啓事務,根據HTTP調用的返回碼進行手動事務提交或回滾。事務傳播級別,儘量使用當前事務。

  1. 無強一致性

手動開啓事務,或是使用自動事務註解,但最後可以通過事件監聽器回調事務接口的afterCommit方法,再進行HTTP調用。事務傳播級別,儘量使用當前事務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章