入門
Seataアリババオープンソース分散トランザクションミドルウェア、高性能マイクロサービスアーキテクチャの使いやすさと分散トランザクション溶液。
初心
ビジネス、非侵襲性:技術アーキテクチャに基づいてトランザクションサービスの分散マイクロ問題の減少は、ビジネスへの侵入をもたらします
高パフォーマンス:分散トランザクションソリューションを減らすには、パフォーマンスコストをもたらします
分散トランザクションの定義
分散トランザクションは、グローバル・トランザクション、枝のグループで構成トランザクション、分岐総務通常はローカルトランザクションです。
デザイン
Seataは2つの実装、ATおよびTCCがあり、トランザクションを配布しました。
AT
モデルは進化XAトランザクションに基づいているAT、コアビジネスは、非侵襲的で、改善提出後、データベースのサポートを必要とする二段です。
基本コンポーネント:
トランザクションコーディネータ(TC) :トランザクションコーディネータ、実行中のグローバル・トランザクションを維持するには、調整およびコミットまたはロールバックされたグローバル・トランザクションを駆動する責任があります。
マネージャーのトランザクション(TM) :ボーダーコントロールグローバル情勢は、グローバル・トランザクションを開くための責任があり、最終的にコミットまたはグローバルロールバックするグローバルな解像度を起動します。
リソース・マネージャ(RM) :制御総務支店、支店は、登録、ステータスレポートを担当し、命令の業務コーディネーターを受け取り、コミットやロールバック・ドライブ・ブランチ(ローカル)トランザクション。
プロセスフロー:
TM TCは、新しいグローバル・トランザクションを開始するために必要。TCは、XIDのグローバルトランザクションを生成します。
チェーン・サービスを呼び出すことで、XIDマイクロ伝播。
RMは、グローバル・トランザクションのTCの適切なブランチにローカルトランザクションXIDとして登録されます。
グローバル・トランザクションに対応するTMクレームTCはXIDをコミットまたはロールバックします。
TCのトランザクションがXIDのブランチにコミットやロールバックを完了するために、それぞれのグローバル・トランザクションのすべての支店を駆動します。
TCC
各インタフェースはSeataは、準備、コミット、ロールバックが必要です。
与 AT 模式一样,在运行时,该切面会拦截所有对 TCC 接口的调用。每调用一次 Try 接口,切面会先向 TC 注册一个分支事务,然后才去执行原来的 RPC 调用。当请求链路调用完成后,TC 通过分支事务的资源 ID 回调到正确的参与者去执行对应 TCC 资源的 Confirm 或 Cancel 方法。
初步操作 Try:完成所有业务检查,预留必须的业务资源。
确认操作 Confirm:真正执行的业务逻辑,不做任何业务检查,只使用 Try 阶段预留的业务资源。因此,只要 Try 操作成功,Confirm 必须能成功。另外,Confirm 操作需满足幂等性,保证一笔分布式事务能且只能成功一次。
取消操作 Cancel:释放 Try 阶段预留的业务资源。同样的,Cancel 操作也需要满足幂等性。
Seata Server安装
1.下载最新版本的 Seata Sever
https://github.com/seata/seata/releases
2. 解压并启动 Seata server
unzip seata-server-xxx.zip
cd distribution
sh ./bin/seata-server.sh 8091 file
示例
场景:
把数据库zeroa中proxy表的一条数据转移到数据库zerob中proxy表里面。
模块:
zero-discovery-server:注册中心
zero-gateway-server:服务网关
zero-consumer:服务消费者
zero-provider-a:服务提供者A
zero-provider-b:服务提供者B
架构及版本:
Spring-cloud:Finchley.BUILD-SNAPSHOT
spring-cloud-starter-netflix-eureka-server:2.0.4.BUILD-SNAPSHOT
spring-cloud-starter-netflix-eureka-client:2.0.4.BUILD-SNAPSHOT
spring-cloud-starter-gateway:2.0.4.BUILD-SNAPSHOT
春・クラウド・スタータopenfeign:2.0.0.RELEASE
春ブート:2.0.0.RELEASE
春・ブート・スターター・データ-JPA:2.0.0.RELEASE
春・クラウドアリババ - seata:0.9.1.BUILD-SNAPSHOT
seata-すべて:0.6.1
MySQLのコネクタ-javaの:8.0.11
ドルイドスプリング・ブート・スターター:1.1.18
mysqlの:5.7
seata-サーバ0.6.1
実装:
ゼロゲートウェイサーバ
設定application.yml
ゼロ・プロバイダ:
設定application.yml
File.conf
メインの構成アプリケーションの名前とアドレスseataサーバー
vgroup_mapping。$ {} spring.application.name -fescarサービス・グループ= "デフォルト"
default.grouplist = "127.0.0.1:8091"
Registry.conf
書かれたエンティティ
書かれたリポジトリ
サービスを書きます
コードのコントローラーを書きます
情報源
ゼロ・プロバイダー-B
ゼロ・プロバイダー・プロジェクトでの設定は、対応するビジネス・ロジックを記述します。
ビジネスに対処する上で追加、例外がスローされます。
ゼロ消費者
ゼロ・プロバイダー・プロジェクトでの設定は、対応するビジネス・ロジックを記述します。
feignClient
feignclient
サービス
コントローラ
テスト
Seata Serverを起動
MySQLを起動し、初期化(各バンクをundo_logテーブルを作成します)
DROP SCHEMA IF EXISTS zeroa;
CREATE SCHEMA zeroa;
USE zeroa;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
DROP SCHEMA IF EXISTS zerob;
CREATE SCHEMA zerob;
USE zerob;
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
スタート
ゼロの発見 - サーバー
ゼロゲートウェイサーバ
ゼロ・プロバイダー-A
ゼロ・プロバイダー-B
ゼロ消費者
データを追加します
取引の通常の実行
あなたは、2つの表に(データを追加するために、ライブラリB、データid = 2を削除するには、データベース)のデータを表示することができます。
トランザクションのロールバックを実行します
データベースのデータ(変更なし)を確認してください。