1.Nacos
文檔地址:https://nacos.io/zh-cn/docs/what-is-nacos.html
nacos支持dubbo和spring-cloud。主要常用的功能是承擔註冊中心和配置中心的功能
註冊中心:是微服務的必須的依靠
配置中心:可以把一些代碼yml或者其他配置文件的內容配置到nacos中保存,當nacos中的配置信息發生改變,nacos自帶動態刷新。不用重啓微服務就能使配置生效
各種註冊中心比較:
服務註冊框架 CAP模型 web控制檯 eureka AP 支持 zookeeper CP 不支持 consul CP 支持 nacos AP/CP(支持切換) 支持 C:Consistency(強一致性)
A:Availability(可用性)
P:Partition tolerance(分區容錯性)
當前微服務註冊中心都會支持分區容錯性
下載啓動後可以通過 http://localhost:8848/nacos 直接訪問 默認賬戶密碼都是nacos
Nacos默認自帶的是嵌入式數據庫derby ruguo 需要做更加安全 的持久化配置可以修改nacos\conf下的配置文件修改爲mysql連接信息
集羣搭建瞭解(以下爲官網架構圖)
首先在三臺nacos中配置好三臺各自的集羣信息,然後實際上就是通過nginx代理 負載均衡三臺nacos
在項目代碼中只需要向nginx地址註冊服務信息即可
2.Seata
文檔地址:http://seata.io/zh-cn/docs/overview/what-is-seata.html
seata是用於解決分佈式事務的數據一致性問題的框架。在我們的微服務中多個業務模塊微服務甚至多個數據庫的互相調用,如果發生異常則無法控制其他微服務的數據回滾。這個時候需要一個能統一控制微服務之間的調用事物協調的框架Seata。(單機版無分佈式事務問題)
主要組件
Transaction ID全局唯一的事務ID+TC、TM、RM三個組件
TC - 事務協調者:維護全局和分支事務的狀態,驅動全局事務提交或回滾。
TM - 事務管理器:定義全局事務的範圍:開始全局事務、提交或回滾全局事務。
RM - 資源管理器:管理分支事務處理的資源,與TC交談以註冊分支事務和報告分支事務的狀態,並驅動分支事務提交或回滾。
官網處理過程圖形
使用:通過官網文檔集成到項目中之後,只需要在service層方法上打一個註解 @GlobalTransactional
3.Sentinel
官網地址:https://github.com/alibaba/Sentinel
文檔地址:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
Sentinel: 分佈式系統的流量防衛兵
Sentinel 是什麼?
隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。(官網原話)
https://github.com/alibaba/Sentinel/releases 下載運行jar
java -jar sentinel-dashboard-1.7.1.jar 運行
訪問sentinel管理界面 http://localhost:8080 登錄賬戶密碼均爲 sentinel
web可視化界面
流量控制:
閾值類型:
可以通過新增某個接口的流量控制
QPS(每秒請求數量):當前調用api的QPS達到閾值進行限流
線程數:當前調用api的線程數達到閾值進行限流
流控模式:
直接:api自己到閾值條件,直接限流
關聯:當關聯資源達到閾值就限流自己
鏈路:指定調用鏈路上的流量達到閾值就限流
流控效果:
快速失敗:直接提示失敗
warm up: 根據codeFactor(冷加載因子,源碼中默認3),從閾值/codeFactor,經過預熱時長,才慢慢達到 閾值
排隊等待:字面意思排隊等待
直接通過web控制檯新增流控配置
降級熔斷:
熱點參數限流: 資源名使用@SentinalResource的屬性取名(注意所有的sentinal控制檯配置出錯都走這個註解)
系統自適應限流:
持久化:把限流配置保存在Nacos的配置中心中就可以做到持久化,當服務重啓,接口資源被重新調用過一次之後,就會出現在sentinal的控制檯限流規則中
使用一下maven和配置
<!-- SpringCloud ailibaba sentinel-datasource-nacos 持久化需要用到--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>
spring: cloud: sentinel: transport: #配置Sentin dashboard地址 dashboard: localhost:8080 # 默認8719端口,假如被佔用了會自動從8719端口+1進行掃描,直到找到未被佔用的 端口 port: 8719 datasource: ds1: nacos: server-addr: localhost:8848 dataId: sentinel-service groupId: DEFAULT_GROUP data-type: json rule-type: flow
- resource:資源名
- limitApp:流控針對的調用來源,default不區分來源
- grade:限流閾值類型(0-根據併發數量來限流 1-根據QPS來進行流量控制)
- count:限流閾值
- strategy:調用關係限流策略
- controlBehavior:流量控制效果(直接拒絕、WarmUP、勻速排隊)
- clusterMode:是否集羣模式
註解簡紹: