Sentinel的简单配置

简介: Sentinel的简单配置

正文


一、Sentinel是什么


随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。


说到这下面几个名词需要知道


服务降级:在高并发的情况下,有的程序会处于等待状态, 防止用户一直等待,采用限流/熔断方法,使用服务降级的方式返回一个友好的提示给客户端,不会执行业务逻辑请求,直接走本地的falback的方法。


服务限流:服务限流目的是为了更好的保护我们的服务,在高并发的情况下,如果客户端请求的数量达到一定极限(后台可以配置阈值),请求的数量超出了设置的阈值,开启自我的保护,直接调用我们的服务降级的方法,不会执行业务逻辑操作,直接走本地falback的方法,返回一个友好的提示。


服务的雪崩效应: tomcat只有一个线程池处理所有的接口,高并发的情况下,所有的请求堆积到一个接口(所有的线程都处理这个 接口,没有空闲的线程处理别的接口)导致其他接口发生等待。


二、Sentinel与Hystrix


111.png


三、Linux搭建Sentinel环境


首先去官网下载相应的jar包,或者下载源码自己打包https://github.com/alibaba/Sentinel/releases


将下载好的jar包上传到服务器以下是脚本,加入开机启动

Sentinel 配置开机启动
进入目录
[root@localhost sentinel]# cd /etc/rc.d/init.d/
启动脚本
#!/bin/bash
#
# chkconfig: 2345 10 90
# 
# description:auto_run
#程序名
RUN_NAME="sentinel-dashboard-1.8.1.jar"
#资源位置 自己创建文件
JAVA_OPTS=/opt/sentinel/sentinel-dashboard-1.8.1.jar
#日志位置
LOG_DIR=/opt/sentinel/logs/
LOG_FILE=$LOG_DIR/sentinel-dashboard.log
LOG_OPTS=/opt/sentinel/sentinel_temp.log
#开始方法
start() {
        source /etc/profile; nohup java -Xms256M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=256M -Dcsp.sentinel.log.dir=$LOG_DIR -Dlogging.file=$LOG_FILE -Dserver.port=8849  -Dcsp.sentinel.dashboard.server=127.0.0.1:8849 -Dproject.name=Sentinel基本控制台 -jar $JAVA_OPTS >$LOG_OPTS 2>&1 &
        echo "$RUN_NAME started success."
}
#结束方法
stop() {
        echo "stopping $RUN_NAME ..."
        kill -9 `ps -ef|grep $JAVA_OPTS|grep -v grep|grep -v stop|awk '{print $2}'`
}
case "$1" in
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            stop
            start
            ;;
        *)
                echo "Userage: $0 {start|stop|restart}"
                exit 1
esac
#授权为可执行文件
chmod +x sentinel 
chmod +x /opt/sentinel/sentinel-dashboard-1.8.1.jar 
#添加至系统服务
[root@localhost init.d]# chkconfig --add sentinel 
#开机启动
[root@localhost init.d]# chkconfig sentinel on
#查看列表
[root@localhost init.d]# chkconfig --list


四、项目配置


spring:
  application:
    ###服务的名称
    name: xiaojie-order
  cloud:
    nacos:
      discovery:
        ###nacos注册地址
        server-addr: 127.0.0.1:8848
    sentinel:
      transport:
        #sentinel的地址
        dashboard: ip:8849
      eager: true
      datasource:
        ds:
          nacos:
            ### nacos连接地址
            server-addr: localhost:8848
            ## nacos连接的分组
            group-id: DEFAULT_GROUP
            ###路由存储规则
            rule-type: flow
            ### 读取配置文件的 data-id对应下图的nacos的DATA-ID
            data-id: xiaojie-order-sentinel
            ###  读取培置文件类型为json
            data-type: json
server:
  port: 8090
  tomcat:
    max-threads: 20


接口对应的代码


   /*
    * 
    * fallback 服务降级后执行的办法
    * blockHandler 限流/熔断出现异常执行的方法
    * value 指定我们的资源的名称(配置的资源名)
    * @author xiaojie 
    * @date 2021/6/17 9:36 
    * @return java.lang.String
    */
    @SentinelResource(value = GETORDER_KEY, blockHandler = "getOrderQpsException")
    @RequestMapping("/orderToMemberSentinelResource")
    public String orderToMemberSentinelResource() {
        return "orderToMemberSentinelResource";
    }
    /*
     * @param e 
     * @限流后返回的提示
     * @author xiaojie 
     * @date 2021/6/17 9:38 
     * @return java.lang.String
     */
    public String getOrderQpsException(BlockException e) {
        e.printStackTrace();
        return "该接口已经被限流啦!";
    }


555.jpg


面的资源名对应的是接口中@SentinelResource的value值,如果使用注解,则对应的是value值,若没有注解,对应的是相应的url值。


五、将配置信息持久化到nacos


持久化可以使用Apollo、Consul、数据库、Nacos、Redis、Zookeeper,我是用的是nacos


555.jpg


具体内容如下


[
    {
        "resource":"orderToMember", 资源名称
        "limitApp":"default",来源
        "grade":1,阈值类型0--线程数1-QPS
        "count":1,阈值
        "strategy":0,流控模式 0-直接;1-关联,2-链路
        "controlBehavior":0,流控效果 0-快速失败;1-WarmUp;2-排队等候
        "clusterMode":false
    },
    {
        "resource":"/orderToMember",
        "limitApp":"default",
        "grade":1,
        "count":1,
        "strategy":0,
        "controlBehavior":0,
        "clusterMode":false
    }
]


然后访问对应接口,即出现效果。


完整代码demo:https://gitee.com/whisperofjune/spring-cloud-sentine.git


参考:


https://blog.csdn.net/weixin_44187730/article/details/109121401


https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D


相关文章
|
存储 JSON SpringCloudAlibaba
Sentinel使用及规则配置
Sentinel使用及规则配置
1790 0
Sentinel使用及规则配置
|
5月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
6月前
|
Java Nacos Maven
Sentinel1.8.6更改配置同步到nacos(项目是Gateway)
Sentinel1.8.6 nacos springcloud springcloud-alibaba gateway
280 0
|
7月前
|
Prometheus Cloud Native 调度
Sentinel 新版本发布,提升配置灵活性以及可观测配套
Sentinel 新版本发布,提升配置灵活性以及可观测配套
1012 13
|
消息中间件 监控 算法
springcloud整合Sentinel配置实战
springcloud整合Sentinel配置实战
|
监控 NoSQL Java
Redis-19Redis哨兵Sentinel模式-Centos6.5上3台主机1主2从3哨兵的配置及通过代码访问哨兵
Redis-19Redis哨兵Sentinel模式-Centos6.5上3台主机1主2从3哨兵的配置及通过代码访问哨兵
138 0
|
存储 开发框架 Nacos
SpringCloud微服务实战——搭建企业级开发框架(十七):Sentinel+Nacos配置持久化
Sentinel Dashboard中添加的规则是存储在内存中的,我们的微服务或者Sentinel一重启规则就丢失了,现在我们将Sentinel规则持久化配置到Nacos中,在Nacos中添加规则,然后同步到Sentinel Dashboard服务中。Sentinel 支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。具体可查看官网 Sentinel 规则
422 57
SpringCloud微服务实战——搭建企业级开发框架(十七):Sentinel+Nacos配置持久化
|
NoSQL Nacos Redis
RedisTemplateConfig sentinel(哨兵模式)/ cluster(集群模式) 常用配置 以及如何 一键配置切换
RedisTemplateConfig sentinel(哨兵模式)/ cluster(集群模式) 常用配置 以及如何 一键配置切换
RedisTemplateConfig sentinel(哨兵模式)/ cluster(集群模式) 常用配置 以及如何 一键配置切换
|
前端开发 Java 中间件
Sentinel Dashboard支持规则配置持久化至Nacos
目录 前言 一、Push模式原理 二、Sentinel控制台改造支持配置持久化至Nacos 1、拉取最新代码 2、开始搬运代码 (1) 调整点之修改NacosConfig类 (2) 调整点之新增NacosConfigProperties类 (3) 调整点之修改NacosConfigUtil类 (4) DynamicRuleProvider和DynamicRulePublisher实现优化 1) AbstractNacosProvider类 2) AbstractNacosPublisher类 3) FlowRuleNacosProvider类 4) FlowRuleNacosPublisher
Sentinel Dashboard支持规则配置持久化至Nacos
|
Sentinel
redisTemplete config sentinel(哨兵)模式 常用配置
redisTemplete config sentinel(哨兵)模式 常用配置
下一篇
无影云桌面