思考与实现:更简洁的实现Sentinel-zookeeper持久化

目录

概述

背景

我的思考

git地址


概述

sentinel没有提供规则持久化的线上实现,只是提供了实现思路。

除了api方式外,其他方案都需要添加比较多的代码修改,包括dashboard源码和应用。

为避免如此繁琐的行为,我采用了‘API+PUSH’的实现方案。

背景

sentinel提供的线上持久化方案

前往官网文档

简述如下

API模式

PUSH模式

不足

使用API模式,应用服务器重启,规则即丢失。

使用PUSH模式,需要修改dashboard源码、添加应用端的自定义实现,个人认为比较繁琐。

我的思考

不希望规则丢失,不希望修改源码,不希望添加自定义实现。

基于这个目标,我采用API+PUSH混合方式实现sentinel zookeeper的持久化:

这种方式满足了"不希望规则丢失,不希望修改源码"。

对于“不希望添加自定义实现”,我采用spring autoconfig,将实现放到了单独的maven module中,这样以后就不用添加自定义实现,直接添加依赖即可。

实现原理

哪里实现PUSH

com.alibaba.csp.sentinel.property.SentinelProperty#addListener
com.alibaba.csp.sentinel.property.DynamicSentinelProperty#updateValue

规则变更变更后,由listeners进行处理,我提供了服务PUSH的自定义listener。

如何保证所有应用实例都获取到数据

  • API模式
  • 监听特定path,由zookeeper保证所有应用实例可获得到新数据。

如何避免规则被重复设置?

  • 引入lockpath
  • zookeeper保证,lockpath已存在则异常
  • 延迟删除lockpath

简洁使用

  • clone git地址的源码,mvn install
  • 添加依赖
        <dependency>
            <groupId>com.chl.sentinel</groupId>
            <artifactId>sentinel-zk-database</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  • 添加配置
sentinel:
  datasource:
    zk:
      remoteAddress: ip:port
      flowPath: /SENTINEL-RULE/projectName/FLOW-DATA
      degradePath: /SENTINEL-RULE/projectName/DEGRADE-DATA
      paramFlowPath: /SENTINEL-RULE/projectName/PARAMFLOW-DATA
      systemPath: /SENTINEL-RULE/projectName/SYSTEM-DATA
      authorityPath: /SENTINEL-RULE/projectName/AUTHORITY-DATA

git地址

sentienlzkdatabase by chlInGithub

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值