服务容错之Sentinel

本文介绍了服务容错的背景,包括服务雪崩现象及其对分布式系统的影响。 Sentinel作为阿里巴巴提供的服务容错框架,用于解决这些问题。通过简单的配置步骤,Sentinel可以帮助设置超时、限流和熔断策略,实现服务的稳定性和性能优化。文中还详细阐述了限流的模式和效果,以及熔断器的工作原理。通过实例展示了如何在Sentinel控制台上配置规则,实现服务的隔离和故障隔离,以提升系统整体的健壮性。
摘要由CSDN通过智能技术生成

服务容错的背景

在分布式系统中,每一个服务都是独立的,它们之间通过网络协议进行通信,可是在这样的架构中,往往会因为一些问题导致服务访问量过载,或请求时间超时,或网络波动等因素导致服务宕机,停止工作,而因一台底层的服务,出现了宕机,导致调用者发起请求调用该服务时,得不到回应,处于一直等待中,而越来越多的请求堆积才此处,会导致资源消耗过大,也会导致调用者发生宕机,这种现象称之为服务雪崩(一个服务发生故障引起多个服务同时故障),随着服务量的增加,出现故障的概率就会提高,所以服务容错的需求就产生了。

服务容错的常见解决方案

阿里巴巴提供了一套名为sentinel的框架https://sentinelguard.io/zh-cn/,可以解决服务容错的问题

基本搭建注意:每次服务重启都会导致规则失效,需重新配置

  1. sentinel是基于spring boot构建的项目,下载最新的sentinel的jar包
  2. 通过cmd控制台运行
    java -Dserver.port=8840 -Dcsp.sentinel.dashboard.server=localhost:8840 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
    
    
    登录账户密码: sentinel/sentinel
  3. 访问本地地址http://localhost:8840/,进入Sentinel控制台
  4. 项目中,导入依赖
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
  5. 修改application.yml(application.properties)配置
    spring:
      application:
        name: sentinel
      cloud:
        sentinel:
          transport:
            dashboard: localhost:8840     #控制面板ip
            clientIp: localhost           #本应用的ip
            port: 8719                    #本应用的通信端口(默认)
          eager: true

  6. 写好接口后,启动项目,并调用容易出现故障的接口(因为sentinel是懒加载,必须先调用一次,才能在控制台中找到对应的服务)
  7. 在控制台中找到自己的服务,对接口进行规则设置

超时

服务调用者调用服务提供者时,设置一个最大响应时间,如果超过这个时间,服务提供者未作出反应,就断开请求,释放掉线程。

限流

服务提供者的接口,配置限制进入系统的流量,确保在系统的负载范围内,保证系统能够正常运转。

流控模式:

  • 直接 : 针对A的请求达到阈值,则对进入A的请求的流量进行限制
  • 关联 : A 关联B资源,对B发起请求,造成对A限流
  • 链路 : 当从某个接口过来的资源达到限流条件时,开启限流

流控效果:

  • 快速失败:达到阈值,直接拒绝后面的流量
  • warm up :  预热,冷启动。启动时QPS初始为=(预设QPS/冷加载因子(默认3))取整,然后在指定预热时间内逐渐上升到预设QPS
  • 排队 :  匀速通过,通过计算1秒内除以指定的QPS,达到匀速通过

  1. 找到接口,配置规则
  2. 配置每秒允许的请求数量,就可以达到限流的目的了。

仓壁模式(隔离)
将系统中的服务按照一定规则进行划分隔离,使其之间不具有依赖性,当某个服务出现故障时,能将问题与影响隔离在一个模块,不波及其他模块,这样就不会影响整体的系统服务。

熔断器
       在服务调用者这边进行控制,根据策略定义失败情况,失败数字达到阈值时打开熔断器,不再调用底层服务,熔断窗口(一段时间过后)达到时,释放一个请求进入底层,如果请求执行成功则关闭熔断器,正常调用,如果请求失败则继续保持熔断器打开直到下一个熔断窗口达到。

  1. 需要有两个服务,进行交互
  2. 调用一下顶层的接口,然后再sentinel控制台进行配置
  3. 如图,配置完成,立即生效

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值