saga+.net core 分佈式事務處理

Apache ServiceComb Saga 是一個微服務應用的數據最終一致性解決方案mysql

中文官方地址:https://github.com/apache/servicecomb-saga/blob/master/README_ZH.mdgit

特性

  • 高可用。支持集羣模式。
  • 高可靠。全部的事務事件都持久存儲在數據庫中。
  • 高性能。事務事件是經過gRPC來上報的,且事務的請求信息是經過Kyro進行序列化和反序列化的。
  • 低侵入。僅需2-3個註解和編寫對應的補償方法便可進行分佈式事務。
  • 部署簡單。可經過Docker快速部署。
  • 支持前向恢復(重試)及後向恢復(補償)。
  • 擴展簡單。基於Pack架構很容實現多種協調機制。

架構

Saga Pack 架構是由 alpha 和 omega組成,其中:github

  • alpha充當協調者的角色,主要負責對事務進行管理和協調。
  • omega是微服務中內嵌的一個agent,負責對網絡請求進行攔截並向alpha上報事務事件。

 

alpha能夠簡單理解是事務處理的服務端,spring

omega是須要進行事務處理的客戶端的SDK,在個人項目裏,就是.net core應用程序的sdk,sql

幸運的是官方提供了C#語言版本Omega 可參見 https://github.com/OpenSagas-csharp/servicecomb-saga-csharpdocker

數據庫官方目前提供了兩個:postpresql和mysql, 和alpha同樣均可以經過docker快速部署, 數據庫

部署服務端alpha-server

下面開始部署服務端alpha-server:apache

官方提供了用於快速部署的docker compose文件:網絡

version: '2' services: postgres: image: postgres container_name: postgres ports: - "5432:5432" environment: POSTGRES_USE: saga POSTGRES_USER: saga POSTGRES_PASSWORD: password networks: - saga alpha-server: image: djlnet/alpha-server:0.3.0-SNAPSHOT container_name: alpha-server ports: - "8080:8080" - "8090:8090" environment: JAVA_OPTS: -Dspring.profiles.active=prd -Dspring.datasource.url=jdbc:postgresql://postgres/saga?useSSL=false
 networks: - saga depends_on: - postgres networks: saga: driver: bridge

 

也就是說咱們的環境首先要安裝docker 和 docker-compose架構

安裝成功後,咱們運行docker-compose up -d命令 

經過docker ps 能夠看到容器已經啓動:

經過netstat -ntlp 能夠看到端口已經開啓:

接下來,咱們能夠Navicat 12 for PostgreSQL 查看數據庫是否正常

下載安裝地址:https://www.navicat.com/en/download/navicat-premium

安裝成功後,建立鏈接,測試鏈接:

 

alpha-server運行成功的標誌,目前尚未一個UI,只能經過端口號是否運行,來判斷了。

服務端的工做就已經完成了。

部署客戶端

下面是客戶端:能夠直接參考上面連接中的github項目,裏面提供了三個測試項目:

主要的工做以下:

  1. 設置對alpha-server的鏈接,註冊本身
  2. 在事務開始的方法的打上attribute:SagaStart
  3. 添加事務補償方法

代碼很是簡單:

每一個項目添加代碼:

 

在action方法上添加特性:SagaStart:

事務補償特性和補償方法:

 

部署完成後,就能夠測試了,接口跑通後,就能夠查看數據庫那三張表:

相關文章
相關標籤/搜索