Sentinel的简单配置

目录

 

一、Sentinel是什么

二、Sentinel与Hystrix

三、Linux搭建Sentinel环境

三、项目配置

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


一、Sentinel是什么

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

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

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

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

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

二、Sentinel与Hystrix

三、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 "该接口已经被限流啦!";
    }

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

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

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

具体内容如下

[
    {
        "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

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是Sentinel的持久化配置方法: 1. Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。 2. 在生产环境中使用Sentinel,需要做一些自适应的改变,具体详细细节可以参考官方的一篇文章《在生产环境中使用 Sentinel》。 3. Sentinel持久化有两种方法:本地和nacos。其中,本地持久化需要在启动时指定规则文件路径,而nacos持久化需要在配置文件中指定nacos的地址和命名空间。 4. Sentinel规则持久化到Nacos的具体实现方法如下: - 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>x.y.z</version> </dependency> ``` - 在application.properties或application.yml文件中添加以下配置: ```yaml # Nacos server address spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # Nacos namespace, if not set, use public namespace spring.cloud.nacos.config.namespace=your-namespace # Nacos config group spring.cloud.nacos.config.group=DEFAULT_GROUP # Nacos config data ID spring.cloud.nacos.config.data-id=sentinel-${spring.profiles.active}.json # Enable Nacos config spring.cloud.nacos.config.enabled=true # Enable Nacos discovery spring.cloud.nacos.discovery.enabled=true ``` - 在Nacos控制台中创建对应的配置文件,例如sentinel-dev.json,内容如下: ```json [ { "resource": "test", "limitApp": "default", "grade": 1, "count": 10, "strategy": 0, "controlBehavior": 0, "clusterMode": false } ] ``` - 在启动类中添加@EnableNacosConfig注解,启用Nacos配置中心。 5. 以上是Sentinel持久化配置简单介绍,更多详细信息可以参考Sentinel官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熟透的蜗牛

永远满怀热爱,永远热泪盈眶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值