摘要
Sentinel Nacos分布式锁,它如同一把钥匙,为分布式系统打开了一扇门。它的出现,让我们的系统更加稳定,更加可靠。让我们一起欢呼吧!
正文
Spring Cloud Alibaba(11)—Sentinel Nacos分布式锁
Sentinel Nacos分布式锁
相关Sentinel以前有读过几篇
Spring Cloud Alibaba(9)—Sentinel简述
Spring Cloud Alibaba(10)—Sentinel控制面板构建 融合SpringCloudAlibaba
这篇blog关键讲 Sentinel Nacos分布式锁 相关Sentinel其他的知识要点我这边就没有讲了 自身去官方网站详尽看。
一、Sentinel 分布式锁基本原理
1、为何必须分布式锁
前边大家构建过Nacos Mysql分布式锁,由于Nacos默认设置是将配备数据信息写在运行内存中的,因此当Nacos一重新启动,全部配备信息内容都是会遗失。一样的缘故。Sentinel默认设置也是将标准消息推送至
手机客户端并立即升级到运行内存中,因此手机客户端一重新启动,标准即消退。在工作环境肯定是必须分布式锁配备它。
2、官方网配备分布式锁的方法
官方网文本文档 在工作环境中应用 Sentinel
官方网得出了二种方法: Pull方式
和 Push方式
1)、Pull方式
表明
pull 方式的数据库(如本地文件、RDBMS 等)一般是可载入的。 手机客户端积极向某一标准管理处(如本地文件、RDBMS 等)按时轮询获取标准。大家既能够在运用当地立即
改动文档来升级标准,还可以根据 Sentinel 控制面板消息推送标准。以本地文件数据库为例子,消息推送全过程如下图所显示:
最先 Sentinel 控制面板根据 API 将标准消息推送至手机客户端并升级到运行内存中,然后申请注册的写数据库会将新的标准储存到当地的文档中。应用 pull 方式的数据库时一般不用对 Sentinel
控制面板开展更新改造。
优势:简易,无一切依靠;标准分布式锁
缺陷:不确保一致性(没法确保同歩);实用性不确保(终究是轮询),获取过度经常也很有可能会出现特性难题。
2)、Push方式
标准管理中心统一推送,手机客户端根据申请注册窃听器的方法時刻监视转变,例如应用 Nacos、Zookeeper 等配置中心。这类方法有更强的实用性和一致性确保。
工作环境下一般选用 push 方式的数据库。
另外官方网也提议,消息推送的实际操作不可由 Sentinel 手机客户端开展,而应当经控制面板统一开展管理方法,立即开展消息推送,数据库仅承担获得配置中心消息推送的配备并升级到当地。因而消息推送标准恰当
作法应该是 配置中心控制面板/Sentinel 控制面板 → 配置中心 → Sentinel 数据库 → Sentinel,而不是经 Sentinel 数据库消息推送至配置中心。那样的步骤就十分清楚了:
优势:标准分布式锁;一致性;迅速
缺陷:引进第三方依靠
二、Sentinel Nacos分布式锁配备
1、pom.xml
以前相关Sentinel和Nacos有关jar包早已加上过 ,因此只加上必须Sentinel和Nacos融合的包。
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2、bootstrap.yml
# Spring
spring:
application: # 运用名字
name: mall-goods
profiles: # 自然环境配备
active: dev
cloud:
nacos:
discovery:
# 服务项目公司注册地址
server-addr: 127.0.0.1:8848
config:
# 配置中心详细地址
server-addr: 127.0.0.1:8848
# 配备格式文件
file-extension: yml
sentinel:
# 撤销控制面板懒加载
eager: true
transport:
# 控制面板详细地址
dashboard: 127.0.0.1:8282
# nacos配备分布式锁
datasource:
ds1:
nacos:
server-addr: 127.0.0.1:8848
dataId: ${spring.application.name}-SENTINEL.json
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
3、Naocs控制面板加上配备
由于上边配备的 dataId: ${spring.application.name}-SENTINEL.json,因此这儿在Nacos建立该 mall-goods-SENTINEL.json 配备集
随后在配备集中化加上配备
[
{
"resource": "/api/v1/sentinel/test-sentinel",
"limitApp": "default",
"grade": "1",
"count": "5",
"strategy": "0",
"controlBehavior": "0",
"clusterMode": false
}
]
有关特性表明
resource:資源名字
limitApp:来源于运用
grade:阈值种类,0:线程数,1:QPS
count:单机版阈值
strategy:流控方式,0:立即,1:关系,2:链接
controlBehavior:流控实际效果,0:迅速不成功,1:warmUp,2:排长队等候
clusterMode:是不是群集
4、查询Sentinel控制面板
之上都配备好后,大家运行Sentinel就可以见到 ,上边的这一过流保护标准早已在Sentinel控制面板了,因此我们在Nacos配备的过流保护标准,早已消息推送到Sentinel控制面板。由于大家
Naocs早已根据Mysql开展分布式锁因此配备的这一过流保护标准,会始终存有,不容易由于重新启动而遗失,那样就确保了标准的分布式锁。
5、填补
1)、实际上假如之上都配备好后,大家发觉如果我们在Sentinel控制面板配备一条过流保护标准,这一过流保护标准不容易积极消息推送到Nacos。因此大家每一次必须在Nacos配备标准随后会消息推送到
Sentinel。可是Nacos中的标准必须大家手动式加上,那样很不方便。大家期待保证自然是我们都是在Sentinel控制面板加上融断标准,全自动将融断标准消息推送到Nacos数据库。那样自然也是
能够的。那样的话修改的会多一点,这儿也不做演试了 实际能够在网上找找。
2)、这儿只演试了一个过流保护标准,假如你需要加上融断标准这些其他标准,一样也是能够的。
GitHub详细地址
nacos-feign-sentinel
少说话多做事,句句戳心都是会获得他人的高度重视;多讲少做,句句戳心都是会遭受他人的忽略。(10)
关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!
评论0