【Spring Cloud】之 Sentinel

一、Sentinel 简介


1、Sentinel 是什么

一句话解释就是我们之前用过的 Hystrix。由于 Hystrix 存在以下弊端:

  • 需要我们程序员自己手工搭建监控平台
  • 没有一套 web 界面可以给我们进行更加细粒度化的配置流控、速率控制、服务熔断、服务降级等

而 Sentinel 则解决以上问题:

  • 单独一个组件,可以独立出来
  • 直接界面化的细粒度统一配置

所以,项目一般选择 Sentinel 作为 Hystrix 的替代品。

2、Sentinel 解决的问题

在这里插入图片描述

主要解决服务中的一下问题:

  • 服务雪崩
  • 服务降级
  • 服务熔断
  • 服务限流

什么是熔断

A 服务调用 B 服务的某个功能,由于网络不稳定问题,或者 B 服务卡机,导致功能时间超长,如果这样子次数太多,我们就可以直接将 B 断路(A 不在请求 B 接口),凡是调用 B 的请求直接返回降级数据,不必等待 B 的超长执行,这样,B 的故障问题就不会级联影响到 A。

什么是降级

整个网站处于流量高峰期,服务器压力剧增,根据当前业务情况及流量,对一些服务和页面进行有策略的降级停止服务,所有的调用直接返回降级数据,以此缓解服务器资源的压力。这样既可以保证核心业务的正常运行,同时也保证了客户和大部分客户的请求能够得到正确的响应。

熔断和降级的异同点

相同点:

  • 为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我,保全大家;
  • 用户最终都是体验到某个功能不可用。

不同点:

  • 熔断是被调用方故障,触发的是系统的主动规则;
  • 降级是基于全局考虑,停止一些正常服务,释放资源。

限流

对打入服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压力。

更多介绍请参考官网文档:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D


二、Sentinel 应用


1、安装 Sentinel 控制台

Sentinel 组件由两部分构成:

  • 后台:核心库(Java客户端),不依赖任何框架/库,能够非运行于所有 Java 环境中,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 前台(8080端口):控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

安装步骤如下:

从官网中下载安装包:https://github.com/alibaba/Sentinel/releases

运行命令(注意要搭建好 Java8 环境并且 8080 端口不能被占用):

java -jar sentinel-dashboard-1.8.0.jar

运行成功之后就可以访问 Sentinel 管理界面:

  • 访问网址:http://localhost:8080
  • 登录账号密码均为 sentinel

2、项目整合 Sentinel

1)、引入依赖:

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

2)、配置 YML 文件:

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服务注册中心地址
    sentinel:
      transport:
        dashboard: localhost:8080   # 配置Sentinel dashboard地址
        port: 8719	# 默认 8719 端口,假如被占用会自动从 8719 开始依次 +1 扫描,直到找到未被占用的端口

3)、启动服务并后台查看 Sentinel 控制台

由于 Sentinel 的懒加载机制,刚启动的微服务并不会显示在 Sentinel 控制台上,只用执行依次服务访问后才会出现在 Sentinel 控制台上。


三、Sentinel 功能介绍


Sentinel 控制台中的每个监控服务都包含一下功能服务:

  • 实时监控
  • 簇点链路
  • 流控规则
  • 降级规则
  • 热点规则
  • 系统规则
  • 授权规则
  • 集群流控
  • 机器列表

1、流控规则

图片2

  • 资源名:唯一名称,默认请求路径
  • 针对来源:Sentinel 可以针对调用者进行限流,填写服务名,默认 default(不区分来源)
  • 阈值类型/单机阈值:
    • QPS(每秒钟请求数量):当调用该 api 的 QPS 达到阈值的时候,进行限流
    • 线程数:当调用该 api 的线程数达到阈值的时候,进行限流
  • 是否集群:不需要集群
  • 流控模式:
    • 直接:api 达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流自己
    • 链路:之记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值就进行限流)
  • 流控效果:
    • 快速失败:直接失败,抛异常
    • Warm Up:根据 codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的 QPS 阈值
    • 排队等候:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为 QPS,否则无效

流控效果的 Warm Up(预热)的应用场景如:秒杀系统在开启瞬间,会有很多流量上来,很可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。

更多流控规则文档可以参考官方文档:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值