Seata/Fescar 的發(fā)展歷程
????阿里是國(guó)內(nèi)最早一批進(jìn)行應(yīng)用分布式(微服務(wù)化)改造的企業(yè),所以很早就遇到微服務(wù)架構(gòu)下的分布式事務(wù)問題饥臂。
2014 年,阿里中間件團(tuán)隊(duì)發(fā)布 TXC(Taobao Transaction Constructor)似踱,為集團(tuán)內(nèi)應(yīng)用提供分布式事務(wù)服務(wù)隅熙。
2016 年,TXC 經(jīng)過產(chǎn)品化改造核芽,以 GTS(Global Transaction Service) 的身份登陸阿里云囚戚,成為當(dāng)時(shí)業(yè)界唯一一款云上分布式事務(wù)產(chǎn)品,在阿云里的公有云轧简、專有云解決方案中驰坊,開始服務(wù)于眾多外部客戶。
2019 年起哮独,基于 TXC 和 GTS 的技術(shù)積累拳芙,阿里中間件團(tuán)隊(duì)發(fā)起了開源項(xiàng)目 Fescar(Fast & EaSy Commit And Rollback, FESCAR)察藐,和社區(qū)一起建設(shè)這個(gè)分布式事務(wù)解決方案。
TXC/GTS/Fescar 一脈相承舟扎,為解決微服務(wù)架構(gòu)下的分布式事務(wù)問題交出了一份與眾不同的答卷分飞。
SETA? 中間件解決什么問題?
????對(duì)業(yè)務(wù)無侵入: 這里的 侵入 是指浆竭,因?yàn)榉植际绞聞?wù)這個(gè)技術(shù)問題的制約浸须,要求應(yīng)用在業(yè)務(wù)層面進(jìn)行設(shè)計(jì)和改造。這種設(shè)計(jì)和改造往往會(huì)給應(yīng)用帶來很高的研發(fā)和維護(hù)成本邦泄。我們希望把分布式事務(wù)問題在 中間件 這個(gè)層次解決掉删窒,不要求應(yīng)用在業(yè)務(wù)層面做額外的工作。
高性能: 引入分布式事務(wù)的保障顺囊,必然會(huì)有額外的開銷肌索,引起性能的下降。我們希望把分布式事務(wù)引入的性能損耗降到非常低的水平特碳,讓應(yīng)用不因?yàn)榉植际绞聞?wù)的引入導(dǎo)致業(yè)務(wù)的可用性受影響诚亚。
更詳細(xì)的請(qǐng)往這摟吧:https://github.com/seata/seata/wiki/%E6%A6%82%E8%A7%88
來吧安裝吧
centos MySQL 安裝 http://www.reibang.com/p/55acbfe66ec2
cd /usr/local
wget https://github.com/seata/seata/releases/download/v1.1.0/seata-server-1.1.0.tar.gz
tar -xvf seata-server-1.1.0.tar.gz
創(chuàng)建MYSQL SEATA庫(kù),執(zhí)行如下腳本創(chuàng)建全局事物等表
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
? ? `xid`? ? ? ? ? ? ? ? ? ? ? VARCHAR(128) NOT NULL,
? ? `transaction_id`? ? ? ? ? ? BIGINT,
? ? `status`? ? ? ? ? ? ? ? ? ? TINYINT? ? ? NOT NULL,
? ? `application_id`? ? ? ? ? ? VARCHAR(32),
? ? `transaction_service_group` VARCHAR(32),
? ? `transaction_name`? ? ? ? ? VARCHAR(128),
? ? `timeout`? ? ? ? ? ? ? ? ? INT,
? ? `begin_time`? ? ? ? ? ? ? ? BIGINT,
? ? `application_data`? ? ? ? ? VARCHAR(2000),
? ? `gmt_create`? ? ? ? ? ? ? ? DATETIME,
? ? `gmt_modified`? ? ? ? ? ? ? DATETIME,
? ? PRIMARY KEY (`xid`),
? ? KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
? ? KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
? DEFAULT CHARSET = utf8;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
? ? `branch_id`? ? ? ? BIGINT? ? ? NOT NULL,
? ? `xid`? ? ? ? ? ? ? VARCHAR(128) NOT NULL,
? ? `transaction_id`? ? BIGINT,
? ? `resource_group_id` VARCHAR(32),
? ? `resource_id`? ? ? VARCHAR(256),
? ? `branch_type`? ? ? VARCHAR(8),
? ? `status`? ? ? ? ? ? TINYINT,
? ? `client_id`? ? ? ? VARCHAR(64),
? ? `application_data`? VARCHAR(2000),
? ? `gmt_create`? ? ? ? DATETIME,
? ? `gmt_modified`? ? ? DATETIME,
? ? PRIMARY KEY (`branch_id`),
? ? KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
? DEFAULT CHARSET = utf8;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
? ? `row_key`? ? ? ? VARCHAR(128) NOT NULL,
? ? `xid`? ? ? ? ? ? VARCHAR(96),
? ? `transaction_id` BIGINT,
? ? `branch_id`? ? ? BIGINT? ? ? NOT NULL,
? ? `resource_id`? ? VARCHAR(256),
? ? `table_name`? ? VARCHAR(32),
? ? `pk`? ? ? ? ? ? VARCHAR(36),
? ? `gmt_create`? ? DATETIME,
? ? `gmt_modified`? DATETIME,
? ? PRIMARY KEY (`row_key`),
? ? KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
? DEFAULT CHARSET = utf8;
cd /opt/seata
vim /opt/seata/conf/file.conf
啟動(dòng)服務(wù)(DB/FILE模式自己選擇)
sh seata-server.sh -p 8091 -h 127.0.0.1 -m file &
GIT
project:https://github.com/seata/seata
seata-samples
https://github.com/seata/seata-samples
下載DEMO修改相關(guān)代碼中的resouce 配置午乓≌咀冢基本上就是DB連接啊,SEATA SERVER啊益愈。
記得在DEMO下面有對(duì)應(yīng)的SQL腳本要先執(zhí)行一下梢灭。