sentinel

微服务保护方案有很多: 请求限流、线程隔离、服务熔断,技术使用较多的还是Sentinel

  1. 请求限流 : 限制接口访问的并发流量,避免并发太高而出现故障。
  2. 线程隔离 : 当一个业务接口响应时间长,而且并发高时,就可能耗尽服务器的线程资源,导致服务内的其它接口受到影响。 解决方法就是 :限定可用线程数量上限。
  3. 服务熔断:线程隔离虽然避免了雪崩问题,但故障服务(商品服务)依然会拖慢购物车服务(服务调用方)的接口响应速度。而且商品查询的故障依然会导致查询购物车功能出现故障,购物车业务也变的不可用了。
  • 编写服务降级逻辑:就是服务调用失败后的处理逻辑,根据业务场景,可以抛出异常,也可以返回友好提示或默认数据。
  • 异常统计和熔断:统计服务提供方的异常比例,当比例过高表明该接口会影响到其它服务,应该拒绝调用该接口,而是直接走降级逻辑。

线程隔离实现方式

  • 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果
  • 信号量隔离:不创建线程池,而是计数器模式,记录业务使用的线程数量,达到信号量上限时,禁止新的请求

限流算法

令牌桶算法
  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
  • 如果令牌桶中没有令牌,则请求等待或丢弃
    基于令牌桶算法,每秒产生的令牌数量基本就是QPS上限

Sentinel 使用

搭建控制台

下载jar包,并运行

bash 复制代码
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

不想每次运行都写代码,直接创建一个windows批处理文件即可

访问http://localhost:8090 ,即可打开控制台,默认账号和密码都是sentinel

微服务整合

1.导入依赖和配置yml

xml 复制代码
<!--sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
yml 复制代码
spring:
  cloud: 
    sentinel:
      transport:
        dashboard: localhost:8090
      http-method-specify: true # 开启请求方式前缀
相关推荐
snow@li1 天前
Sentinel:流量防卫兵/熔断降级
sentinel
LayZhangStrive2 天前
后端通识 - 远程服务调用RPC
网络·网络协议·rpc·sentinel·openfeign·远程服务调用
她说可以呀5 天前
Sentinel 授权规则
开发语言·sentinel
她说可以呀5 天前
Sentinel 流控规则 · 流控模式
sentinel
她说可以呀6 天前
Sentinel 热点规则
sentinel
智码看视界6 天前
Day 45 | Sentinel流量治理:从限流到熔断降级再到系统自适应保护
sentinel·高并发·熔断降级·流量控制·微服务治理·热点参数限流
cfm_29147 天前
了解Sentinel
分布式·架构·sentinel
Bruce18017 天前
Sentinel 限流熔断学习:配置策略、限流算法对比与适用场景
sentinel
成为你的宁宁7 天前
【Sentinel部署与流量防护】
sentinel
952368 天前
Sentinel
java·后端·spring·sentinel·springcloud