动态

详情 返回 返回

【Spring開發】SpringCloud服務端高級框架第9篇:5.高可用,seata的部署和集成【附代碼文檔】 - 动态 详情

🏆🏆🏆教程全知識點簡介:微服務保護、服務異步通信、消息中間件部署、分佈式事務、搜索引擎、緩存、數據同步以及相關組件的安裝配置等技術要點。在微服務保護方面,介紹了 Sentinel 的基礎知識,包括雪崩問題、超時處理、艙壁模式、斷路器機制,以及不同服務保護技術的對比;講解了流量控制(簇點鏈路、流控模式、熱點參數限流)、隔離與降級(FeignClient 整合 Sentinel、線程隔離)、授權規則(自定義異常結果)及規則持久化(規則管理模式與 pull 模式),並演示了基於 Nacos 的規則持久化改造。服務異步通信部分探討了消息可靠性(生產者消息確認、Return 回調、ConfirmCallback)、死信交換機、TTL 隊列等高級應用。RabbitMQ 部署指南涵蓋了單機部署、DelayExchange 插件安裝、集羣部署、鏡像模式等內容。分佈式事務部分介紹了 CAP 定理、BASE 理論、常見解決方案,Seata 的基礎與部署(TC 服務部署、Nacos 配置、數據庫表創建)、多種事務模式(XA 模式及優缺點、四種模式對比)和高可用架構。分佈式搜索引擎章節講解了 Elasticsearch 的原理(ELK 技術棧、倒排索引)、索引庫與文檔操作、RestAPI 與 RestClient 的使用、排序與高亮、酒店搜索案例(分頁、競價排名、ad標記、算分函數)、自動補全、數據同步(同步調用、監聽 binlog)、集羣搭建與腦裂問題、分片存儲測試,以及單點 ES、Kibana、IK 分詞器安裝。緩存部分介紹了 Redis 持久化(RDB 與 AOF 對比)、單機安裝 Redis、Redis 集羣、多級緩存(JVM 進程緩存、Caffeine)、請求參數處理、Tomcat 查詢、HTTP 工具與 CJSON 工具類、Redis 緩存查詢。數據同步與網關部分包括 Canal 安裝(開啓 MySQL 主從、設置權限)、OpenResty 安裝(開發庫、目錄結構、環境變量配置)及運行流程。

<!-- start:bj1 -->

📚📚👉👉👉本站這篇博客:   https://segmentfault.com/a/1190000047225271    中查看

📚📚👉👉👉本站這篇博客:   https://segmentfault.com/a/1190000047225271    中查看

<!-- end:bj1 -->

✨ 本教程項目亮點

🧠 知識體系完整:覆蓋從基礎原理、核心方法到高階應用的全流程內容
💻 全技術鏈覆蓋:完整前後端技術棧,涵蓋開發必備技能
🚀 從零到實戰:適合 0 基礎入門到提升,循序漸進掌握核心能力
📚 豐富文檔與代碼示例:涵蓋多種場景,可運行、可複用
🛠 工作與學習雙參考:不僅適合系統化學習,更可作為日常開發中的查閲手冊
🧩 模塊化知識結構:按知識點分章節,便於快速定位和複習
📈 長期可用的技術積累:不止一次學習,而是能伴隨工作與項目長期參考

🎯🎯🎯全教程總章節


🚀🚀🚀本篇主要內容

5.高可用

Seata的TC服務作為分佈式事務核心,一定要保證集羣的高可用性。

5.1.高可用架構模型

搭建TC服務集羣非常簡單,啓動多個TC服務,註冊到nacos即可。

但集羣並不能確保100%安全,萬一集羣所在機房故障怎麼辦?所以如果要求較高,一般都會做異地多機房容災。

比如一個TC集羣在上海,另一個TC集羣在杭州:

微服務基於事務組(tx-service-group)與TC集羣的映射關係,來查找當前應該使用哪個TC集羣。當SH集羣故障時,只需要將vgroup-mapping中的映射關係改成HZ。則所有微服務就會切換到HZ的TC集羣了。

5.2.實現高可用

具體實現請參考課前資料提供的文檔《seata的部署和集成.md》:

第三章節:

seata的部署和集成

一、部署Seata的tc-server

1.下載

首先 要下載seata-server包,地址在http://seata.io/zh-cn/blog/download.html

當然,課前資料也準備好了:

2.解壓

在非中文目錄解壓縮這個zip包,其目錄結構如下:

3.修改配置

修改conf目錄下的registry.conf文件:

內容如下:

registry {
  # tc服務的註冊中心類,這裏選擇nacos,也可以是eureka、zookeeper等
  type = "nacos"

  nacos {
    # seata tc 服務註冊到 nacos的服務名稱,可以自定義
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "SH"
    username = "nacos"
    password = "nacos"
  }
}

config {
  # 讀取tc服務端的配置文件的方式,這裏是從nacos配置中心讀取,這樣如果tc是集羣,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}

4.在nacos添加配置

特別注意,為了讓tc服務的集羣可以共享配置, 選擇了nacos作為統一配置中心。因此服務端配置文件seataServer.properties文件需要在nacos中配好。

格式如下:

配置內容如下:

# 數據存儲方式,db代表數據庫
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事務、日誌等配置
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000

# 客户端與服務端傳輸方式
transport.serialization=seata
transport.compressor=none
# 關閉metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

==其中的數據庫地址、用户名、 都需要修改成你自己的數據庫信息。==

5.創建數據庫表

特別注意:tc服務在管理分佈式事務時,需要記錄事務相關數據到數據庫中,你需要提前創建好這些表。

新建一個名為seata的數據庫,運行課前資料提供的sql文件:

這些表主要記錄全局事務、分支事務、全局鎖信息:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- 分支事務表
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 

🚀✨ (未完待續)項目系列下一章

📚下一篇 將進入更精彩的環節!
🔔 記得收藏 & 關注,第一時間獲取更新!
🍅 一起見證整個系列逐步成型的全過程。

Add a new 评论

Some HTML is okay.