06 微服务技术——微服务保护-Sentinel(概念篇)


前言

        本文主要讲的是微服务保护策略的概念

一、微服务问题---雪崩

1.1 雪崩问题

图一

微服务链路中的某个服务故障引整个链路中的所有微服务都不可用,就是雪崩;类似于级联异常;

1.2 解决方案

超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待。缓解了问题,但是并没有彻底解决问题,当同时异常请求过多时,还是会出现服务故障。

舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。

舱壁模式

        解决了问题,但是浪费资源,因为空闲业务依旧占用线程。

熔断降级:由断路器统计业务执行的异常比例,如果超出阀值则会熔断该业务,拦截访问该业务的一切请求。有效解决了问题,也是常用的策略。

流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。能够降低雪崩的概率,并不能彻底解决问题。

1.3服务保护技术对比

       springCloud当中支持多种微服务保护技术

 注意: 线程池隔离存在几个问题:

        1.线程池隔离使用会导致cpu上下文切换、内存增大等问题

        2.从tomcat线程转交任务到新的线程会导致threadlocal中存放的数据丢失

二、Sentinel安装使用

2.1 下载

        sentinel官方提供了UI控制台,方便我们对系统做限流设置。我们可以在GitHub下载。

也可以通过下面的链接下载。

2.2 运行

启动: 将jar包放到任意非中文目录,在dos窗口执行命令:java -jar sentinel-dashboard-1.8.1.jar

配置项默认值说明
server.port8080服务端口
sentinel.dashboard.auth.usernamesentinel默认用户名
sentinel.dashboard.auth.passwordsentinel默认密码

修改配置:可以通过dos命令或者配置文件的方式修改。

        1. dos命令修改端口:java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar

        2. 配置文件修改用户名和密码:

在同级目录下添加application.properties或者yml文件均可

用户名密码通过

  • -Dsentinel.dashboard.auth.username=sentinel //用于指定控制台的登录用户名为 sentinel

  • -Dsentinel.dashboard.auth.password=123456 //用于指定控制台的登录密码为 123456

访问: 

访问http://localhost:8080页面,就可以看到sentinel的控制台了:

账号和密码,默认都是:sentinel

2.3 微服务整合Sentinel

我们在order-service模块中整合sentinel,并连接sentinel的控制台,步骤如下:

1)在模块的POM文件中引入sentinel依赖

        <!--sentinel-->
        <dependency>
                <groupId>com.alibaba.cloud</groupId> 
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

2)配置控制台

server:
  port:
8088
spring:
  cloud: 
    sentinel:
      transport:
        dashboard: localhost:
8080

3)访问项目的任意请求路径

例如在本项目中,打开浏览器,访问http://localhost:8088/order/101,这样才能触发sentinel的监控。

三、流量控制

雪崩问题虽然有四种方案,但是限流是避免服务因突发的流量而发生故障,是对微服务雪崩问题的预防。

3.1、簇点链路

概念 : 当请求进入微服务时,首先会访问DispatcherServlet,然后进入Controller、Service、Mapper,这样的一个调用链就叫做簇点链路。簇点链路中被监控的每一个接口就是一个资源

默认情况下sentinel会监控SpringMVC的每一个端点(也就是controller中的方法),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

流控、熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击对应资源后面的按钮来设置规则:

  • 流控:流量控制

  • 降级:降级熔断

  • 热点:热点参数限流,是限流的一种

  • 授权:请求的权限控制

3.2 、流控模式

        在sentinel中添加限流规则时,点击高级选项,可以选择三种流控模式: 直接、关联、链路。

    3.2.1、直接模式

         统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式。 

    3.2.2、关联模式       

        概念:统计关联资源的流量,当关联资源的流量触发阈值时,对当前资源限流。高优先级资源触发阈值,对低优先级资源限流。

         使用场景:

有两个查询接口 普通查询和VIP查询

        如果VIP查询达到某个阈值(比如500,证明VIP查询人数很多),就限制普通查询的流量 : 普通人给VIP让路,因为两者要访问同一个数据库

    3.2.3. 链路模式

        概念:阈值统计时,只统计从指定资源进入当前资源的请求,是对请求来源的限流

        使用场景:

有查询订单和创建订单业务,两者都需要查询商品。

从查询订单进入到查询商品的请求统计,并设置限流。

3.3、流控效果

        概念:流控效果是指请求达到流控阈值时应该采取的措施,包括三种:快速失败,warm up,排队等待。

  • 1、快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。

  • 2、warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。是应对服务冷启动的一种方案 ,防止刚冷启动请求量就达到QPS从而故障。

                 预热时长的单位是秒

  • 3、排队等待:让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

1和2适合秒杀模式下,3适合用于常规模式下使用,应对突然变多;

3.4 热点参数限流

对热点数据进行资源倾斜,并且其他资源还正常使用;

3.5 熔断降级

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值