# :-:
### 1、兩階段提交(2pc)
兩階段提交協議(Two Phase Commitment Protocol)中,涉及到兩種角色
一個事務協調者(coordinator):負責協調多個參與者進行事務投票及提交(回滾)多個事務參與者(participants):即本地事務執行者
總共處理步驟有兩個(1)投票階段(voting phase):協調者將通知事務參與者準備提交或取消事務,然后進入表決過程。參與者將告知協調者自己的決策:同意(事務參與者本地事務執行成功,但未提交)或取消(本地事務執行故障);(2)提交階段(commit phase):收到參與者的通知后,協調者再向參與者發出通知,根據反饋情況決定各參與者是否要提交還是回滾;
如果所示 1-2為第一階段,2-3為第二階段
如果任一資源管理器在第一階段返回準備失敗,那么事務管理器會要求所有資源管理器在第二階段執行回滾操作。通過事務管理器的兩階段協調,最終所有資源管理器要么全部提交,要么全部回滾,最終狀態都是一致的
### 2、TCC
#### 基本原理
TCC 將事務提交分為 Try - Confirm - Cancel 3個操作。其和兩階段提交有點類似,Try為第一階段,Confirm - Cancel為第二階段,是一種應用層面侵入業務的兩階段提交。
| 操作方法 | 含義 |
| --- | --- |
| Try | 預留業務資源/數據效驗 |
| Confirm | 確認執行業務操作,實際提交數據,不做任何業務檢查,try成功,confirm必定成功,需保證冪等 |
| Cancel | 取消執行業務操作,實際回滾數據,需保證冪等 |
3、事務消息
消息事務其實就是基于消息中間件的兩階段提交,將本地事務和發消息放在同一個事務里,保證本地操作和發送消息同時成功。下單扣庫存原理圖:
### 優缺點比較
| 事務方案 | 優點 | 缺點 |
| --- | --- | --- |
| 2PC | 實現簡單 | 1、需要數據庫(一般是XA支持) 2、鎖粒度大,性能差 |
| TCC | 鎖粒度小,性能好 | 需要侵入業務,實現較為復雜,復雜業務實現冪等有難度 |
| 消息事務 | 業務侵入小,無需編寫業務回滾補償邏輯 | 事務消息實現難度大,強依賴第三方中間件可靠性 |
##
- 項目介紹
- 項目聲明
- 項目簡介
- 架構設計
- 項目亮點功能介紹
- 技術棧介紹
- 核心功能
- 運行環境
- 項目更新日志
- 文檔更新日志
- F&Q
- 部署教程
- 環境準備
- JDK安裝
- JDK1.8,17共存
- maven
- 分布式緩存Redis
- 單機版
- 集群
- 注冊&配置中心alibaba/nacos
- 介紹
- Nacos安裝
- Nacos配置中心
- Nacos注冊發現
- Nacos生產部署方案
- 服務監控-BootAdmin
- 基本介紹
- 如何使用
- 整合Admin-Ui
- 客戶端配置
- 鏈路追蹤
- 基本介紹
- SkyWalking-1
- Skywalking-1
- 消息隊列
- Kafka
- docker安裝kafka
- Linux集群
- Maven私服
- nexus安裝部署
- nexus使用介紹
- 全文搜索elasticsearch
- windows集群搭建
- docker安裝es
- ElasticHD
- linux集群部署
- 統一日志解決方案
- 日志解決方案設計
- 介紹與相關資料
- ELK安裝部署
- elasticsearch 7.5
- logstash-7.5
- kibana-7.5
- filebeat
- 服務監控-Prometheus
- Prometheus安裝配置
- Prometheus介紹
- grafana
- 持續集成部署CICD
- 自動化部署Jenkins
- 安裝部署win
- 打包發布遠程執行
- 安裝部署linux
- jenkins+gitlab+docker容器化工程自動化部署
- Git
- CICD說明
- 阿里云效
- CentOS_MYSQL安裝
- docker
- 安裝
- Docker安裝Nginx
- Docker部署啟動springboot
- dockerCompose
- harbor
- Docker私有鏡像倉庫
- Portainer
- Docker遠程連接設置
- 打包工程
- 必要啟動模塊
- 核心模塊
- 登錄認證
- 緩存功能
- 日志模塊
- 分布式鎖
- 消息隊列
- 異常處理
- 系統接口
- 參數驗證
- es檢索
- 數據導出
- 系統設計
- 系統總體架構
- 擴展模塊(可選)
- 限流熔斷alibaba/sentinel
- 使用Sentinel實現gateway網關及服務接口限流
- Sentinel使用Nacos存儲規則及同步
- 服務調用Feign
- Feign基本介紹
- 如何使用
- 負載均衡
- 請求超時
- 請求攔截器
- 分布式任務調度
- XXL-JOB
- 分布式事務
- TX-LCN
- Seata
- Seata原理解析
- 數據庫分庫分表
- swagger文檔
- 分布式ID生成器解決方案
- 服務網關CloudGateway
- 基本介紹
- 使用網關
- 路由配置
- 全局過濾器
- 服務認證授權架構設計
- 認證服務流程
- 授權服務流程
- 系統冪等性設計與實踐
- 分布式日志鏈路跟蹤
- 實時搜索系統設計
- 應用性能
- 壓力測試工具
- Apache JMeter介紹和安裝
- ApacheJMeter使用
- JVM
- JVM性能調優
- 常見JVM內存錯誤及解決方案
- JVM 分析工具詳解
- Spring Cloud性能調優
- Linux運維
- Linux 常用命令
- Linux開啟端口