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


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

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

特性

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

架構

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

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

 

alpha可以簡單理解是事務處理的服務端,

omega是需要進行事務處理的客戶端的SDK,在我的項目里,就是.net core應用程序的sdk,

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

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

部署服務端alpha-server

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

官方提供了用於快速部署的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:

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

 

部署完成后,就可以測試了,接口跑通后,就可以查看數據庫那三張表:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM