BeetlSQL 3.2.0 發布,多庫和微服務事務支持

2020-12-25 開源中國

本次發布主提供多庫和微服務事務支持,使用了 BeetlSQL 的自帶的 Saga 實現

  • 新增多庫和微服務 Saga 實現
  • 修復代碼生成因為重構帶來的問題

Saga文檔

Maven

<dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.2.0-RELEASE</version></dependency>

Saga 初期是長事務的解決方案,微服務流行後也可以為微服務提供事務解決方案。不同於傳統的資料庫事務或者 2 階段提交,必須·依賴於資料庫系統實現 ACID 事務,Saga 不依賴於特定系統(實際上也不可能讓所有系統實現 ACID,比如 Redis,Mongdb),只要求特定系統能提供補償操作,在出錯的時候能執行補償操作即可。因此可以很方便用在現代的微服務架構中。

一個長事務的例子,如訂購電影票,分為選座位和支付倆個步驟。用戶可能會花好幾分鐘才能能完成。另一個例子是下單旅遊產品,需要酒店,飛機,旅行社各個系統協作。 關於Saga,我認為最好的文章是 https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga,因為他即告訴你什麼是Saga。也告訴你Saga不完美的地方。

因此 Saga 的核心是補償操作以及執行這些操作的任務的管理。下面列舉了一些目前我認為的現在一些 Saga 框架實現的缺點

  • 補償操作需要手動編寫,這工作量不小,而且容易寫錯,需要仔細審核代碼
  • 有些框架能自動根據 SQL 產生逆向 SQL,這有效減少了編寫補償的工作。但解析 SQL 和生成逆向 SQL 的難度非常大,會成為 Saga 框架的主要難點
  • 現在幾乎所有的 Saga 框架將要改變編寫微服務調用方式,因為 Saga 提倡通過消息調用來實現服務調用和補償操作。不符合編寫業務代碼習慣,還是期望能在編寫微服務的時候,像傳統事務編程模式那樣,微服務業務代碼嵌套在一個 Saga 事務開始,提交或者回滾即可
  • 幾乎所有的框架都要實現進行 Saga 編排,即 Saga 事務裡那些微服務調用必須事先編排(配置)。這非常不靈活,因為業務時刻在變化。非常有可能升級了業務代碼,卻忘記重新編碼。 程式設計師期望能像普通編寫業務代碼那樣而不需要實現編排配置

BeetlSQL 的 Saga 實現試圖解決上述問題。讓微服務編程變得跟簡單。

單系統多庫 Saga 事務

@Testpublic void simple(){ SagaContext sagaContext = SagaContext.sagaContextFactory.current(); UserMapper userMapper = sqlManager.getMapper(UserMapper.class); long count = sqlManager.allCount(User.class); try{ sagaContext.start() User user = new User(); user.setName("abc"); userMapper.insert(user); //根據名字hash入不同資料庫 User user2 = new User(); user2.setName("efg"); userMapper.insert(user2); if(1==1){ throw new RuntimeException("模擬異常"); } sagaContext.commit(); }catch(RuntimeException ex){ sagaContext.rollback(); } long afterCount = sqlManager.allCount(User.class); Assert.assertEquals(count,afterCount);}

微服務Saga事務,採用同樣的編程方式

SagaContext sagaContext = SagaContext.sagaContextFactory.current();try { sagaContext.start(gid); //模擬調用倆個微服務,訂單和用戶 rest.postForEntity(orderAddUrl, null,String.class, paras); rest.postForEntity(userBalanceUpdateUrl, null,String.class, paras); if (1 == 1) { throw new RuntimeException("模擬失敗,查詢saga-server 看效果"); }} catch (Exception e) { sagaContext.rollback(); return e.getMessage();}

BeetlSQL 的目標是提供開發高效,維護高效,運行高效的資料庫訪問框架,在一個系統多個庫的情況下,提供一致的編寫代碼方式。支持如下數據平臺

  • 傳統資料庫:MySQL,MariaDB,Oralce,Postgres,DB2,SQL Server,H2,SQLite,Derby,神通,達夢,華為高斯,人大金倉,PolarDB 等
  • 大數據:HBase,ClickHouse,Cassandar,Hive
  • 物聯網時序資料庫:Machbase,TD-Engine,IotDB
  • SQL查詢引擎:Drill,Presto,Druid
  • 內存資料庫:ignite,CouchBase

閱讀文檔 源碼和例子

相關焦點

  • BeetlSQL 3.0.0-M2 新增性能測試
    這次發布,主要是對性能進行第一輪測試,以驗證從2升級到3後,性能沒有顯著下降。
  • BeetlSQL 3.1.4 發布,Java 資料庫訪問工具
    本次修復了@Version和@LogicDelete 實現Bug 修復從2升級到3後@Version和@
  • BeetlSQL 2.10.5 發布,Java Dao 工具
    本次發布增強了Query功能#IHJI8 query 方法支持asc和desc方法
  • BeetlSQL 2.10.18 發布,Java Dao 工具
    本次發布增強了Query類的使用,同時修復了一個嚴重的錯誤#IIL6V,在使用updateBatch接口的時候,某些情況會導致連接用完
  • BeetlSQL 3.0.0-M1 第一個版本發布 - OSCHINA - 中文開源技術交流...
    經過8個月的重構,BeetlSQL3裡程碑1已經完成BeetlSQL是一款資料庫訪問工具庫,廣泛應用到企業應用,網際網路項目。相比於BeetlSQL2,新版支持更多數據來源,包括支持JDBC的傳統資料庫,大數據NOSQL,以及大數據SQL查詢引擎,在易用性何擴展性也做了大幅度修改。
  • BeetlSQL 2.11.1 發布,Java Dao 工具
    果然小數位是0的版本發布都會有問題,2.11.1 修復了上一個版本新增自定義註解功能的bug,建議更新到新的版本<dependency> <groupId
  • ...admin-cloud 2.3 發布,完美支持分布式事務 - OSCHINA - 中文...
    ; 2.8.2-release jjwt.version -> 0.9.1 hutool.version -> 5.3.1 支持 nacos-server 1.2.1 支持 seata-server 1.2.0 優化數據權限邏輯 同步項目中 nacos 和 seata 的腳本
  • Act-starter 1.8.25.0 發布 - 非苗條型 Java web 服務框架
    本次發布內容:核心框架更新到 1.8.25#1152 創建控制器實例發生空指針異常
  • Beetl 3.0.11 版本發布,Java 模板引擎
    本次發布增加按照社區要求增加了一些類似JSTL的標籤函數,內置如下html標籤TAG.html.include
  • Beetl 3.0.0.M1 版本發布,Java 模板引擎
    本次發布是3.0的第一個版本,3.0 版本相比於2.0,在文本處理和腳本引擎上做了增強* Beetl支持自定義模板的定界符和站位符,Beetl3 允許再定義一對「站位符和定界符」,比如定義了模板的定界符<%%>,站位符${},你可以定義一對,比如<!--: --> 和 #{} 如下是一段模板。
  • nutz-sqltpl 1.3.RELEASE 發布,「解決java拼接sql」
    簡單介紹    1、使用 xml 對 sql 片段進行管理,類似 mybatis
  • ...2.1 發布,租戶模式支持動態新增數據源 - OSCHINA - 中文開源...
    新增 租戶模式 支持多數據源模式:動態增減數據源,一個租戶一個庫一個數據源5. 多數據源模式相關代碼和配置,調整成一鍵切換模式6. 新增多數據源模式完美支持分布式事務(seata 1.0.0) 7. 新增刪除租戶時,刪除租戶數據和資料庫的接口,並刪除該租戶的數據源8.
  • MongoDB 4.0 正式發布,支持多文檔事務
    MongoDB 4.0 已正式發布,MongoDB 是一個開源文檔資料庫,提供高性能、高可用性和自動擴展。在 4.0 正式發布之前,我們已經報導了其相關更新信息,此次正式發布版本中我們可以看到一些特性得以保留,包括多文檔事務和聚合類型轉換等:下邊是此次更新涉及到的一些內容:Multi-Document
  • smart-doc 1.9.0 發布,新增 Open Api 3.0+ 支持
    支持Callable,Future,CompletableFuture等異步接口返回的推導。 支持JavaBean上的JSR303參數校驗規範,支持分組驗證。 對json請求參數的接口能夠自動生成模擬json參數。 對一些常用欄位定義能夠生成有效的模擬值。 支持生成json返回值示例。 支持從項目外部加載原始碼來生成欄位注釋(包括標準規範發布的jar包)。
  • 微服務 SpringCloud Alibaba Seata處理分布式事務
    二、Seata簡介1.是什麼Seata 是一款開源的分布式事務解決方案,致力於在微服務架構下提供高性能和簡單易用的分布式事務服務。官網地址:http://seata.io/zh-cn/2.主要功能一個典型的分布式事務過程分布式事務處理過程:一ID+三組件模型
  • Hprose for Go 2.0.0 發布,微服務首選引擎
    Hprose 2.0 for Golang 終於發布了。這是一個裡程碑版本,針對開發者進行了多項改進。
  • MongoDB 4.0 首個 RC 版發布,支持多文檔事務
    MongoDB 因其靈活的文檔模型、可擴展分布式設計廣受開發者喜愛,在此基礎上,MongoDB 4.0 推出了更強大的功能支持,目前 4.0 第一個 RC 版本已經發布。
  • SpringBoot 增強庫 yue-library 2.1.0 發布,提供更多特性支持
    Bean與環境配置項 快速構建SpringCloud項目,讓微服務變得更簡單收藏一波以表支持吧(≧▽≦)/!本次發布是一次歷時9個月的大版本發布,雖然yue-library一直在不斷的更新,但這次大版本的發布意味著yue-library看到了更遠也能走得更遠,為後續多租戶、國產化、數據脫敏等趨勢需求打下了堅定基礎。本次更新分離了響應式編程與阻塞式編程,對Auth認證模塊也做了相應的拆分與優化,同時從此版本開始對開發文檔進行了進一步支持,區分各大本版文檔說明,增加歷史文檔專區。
  • Hunt framework 2.1.0 發布,更適合 PHP 開發者
    核心庫Hunt改進Hunt模塊的劃分更加合理,API更豐富、友好和穩定,I/O性能及穩定性也得到進一步提高。其中,包括對hunt.concurrency、Locale、hunt.io和hunt.collection等模塊的改進。
  • zuihou-admin-cloud 1.8 發布,支持 Cloud Alibaba 2.2.0
    升級 Alibaba Cloud 2.2.0.RELEASE2. 修復 數據自動注入器 注入遠程調用的數據類型擦除的bug3. 新增 ribbon自定義負載均衡規則 實現簡單的灰度發布4. 完善父類控制器:BaseController2,新增模板方法:CRUD、導入、導出、預覽、分頁(排序) 5.