注冊中心:
*作用: 服務管理
Eureka(不推薦)[讀音: 優瑞卡]
Nacos(推薦)
Zookeeper [讀音: 如k波]
Consul [讀音:康壽]
**注冊中心的核心功能原理(nacos)**
服務注冊: 當服務啟動時,會通過rest接口請求的方式向Nacos注冊自己的服務
服務心跳: NacosClient 會維護一個定時心跳持續通知NacosServer,默認5秒一次,超過15秒,會將服務健康狀態設置為false(拉去時會忽略),超過30秒會剔除
服務發現: nacosClient定時任務,實時去拉去健康服務
服務終止: NacosClient會主動通過Rest請求NacosService,
負載均衡:
* 作用: 客戶端的負載均衡
ribbon [讀音: 瑞本]
LodaBalancer(推薦)
服務調用
*作用: 能像調用本地方法一樣優雅
Feign(不推薦)
OpenFeign(推薦)
Dubbo
配置中心
SpringCloud config
NacosConfig(推薦)
服務熔斷:
*防止服務雪崩,防止流量激增打垮冷系統
Hystrix
sentinel(推薦) [讀音: 申特鬧 ]
分布式事務
Seata
有四種模式: AT、TCC、SAGA 和XA Seata實現原理:
兩個階段,三個角色
TC: 事務協調者,獨立運行seata-server,用于接受事務注冊,提交和回滾
TM: 事務管理者(發起者),告訴TC全局事務提交回滾
RM: 事務資源,每一個RM都會作為一個分支事務注冊在TCAT模式:
第一階段:
TM(事務發起者)向TC申請開啟一個全局事務,事務創建并生成一個全局唯一的XID
XID在微服務調用鏈路的上下文中傳播
① seata會攔截"業務sql",解析sql語句
②查詢 “業務SQL” 要更新的業務數據,在業務數據被更新前,將其保存成 “before image”
③執行 “業務SQL” ,更新業務數據
④查詢更新后的數據,將其保存成 “after image”
⑤將 before image 和 after image 保存至 Undo Log 表中
生成行鎖
以上操作全部在一個數據庫事務內完成,這樣保證了一階段操作的原子性。
提交前RM(事務資源)會向TC(事務協調者)注冊分支;
TM(事務發起者)向TC(事務協調者)發起針對XID的全局提交或回滾,將本地事務提交結果上報給TC第二階段:
提交: 因為 “業務SQL” 在一階段已經提交至數據庫,所以 Seata 框架只需將一階段保存的快照數據(Undo Log )和行鎖刪掉,完成數據清理即可。
回滾: 校驗當前數據和 after image 數據,數據一致說明沒臟寫,可以還原數據,臟寫了就要轉人工處理;
用before image 還原數據,刪除undolog數據和行鎖
服務網關
*作用: 一些本身跟業務無關的公共邏輯,鑒權,日志,限流,跨域
zuul
SpringCloudGateway(推薦)
linkred
Kong
業務網關: 降級/熔斷,負載均衡,鑒權,業務規則,參數校驗
流量網關: 安全策略,流量分發,跨域實現
鏈路追蹤
*作用: 追蹤服務健康狀況
Skywalking(推薦)
Zipkin