微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装

admin2024-09-11  32

文章目录

  • 1 Sentinel
    • 1.1 雪崩问题及解决方案
      • 1.1.1 雪崩问题
      • 1.1.2 超时处理
      • 1.1.3 仓壁模式(线程隔离)
      • 1.1.4 断路器
      • 1.1.5 流量控制
    • 1.2 服务保护技术对比
    • 1.3 Sentinel介绍和安装
      • 1.3.1 Sentinel介绍
      • 1.3.2 Sentinel安装
      • 1.3.3 微服务整合Sentinel

1 Sentinel

1.1 雪崩问题及解决方案

1.1.1 雪崩问题

在微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。如下图,当前应用的运行依赖于服务A、H、I、P这4个微服务:

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第1张

如果此时服务I发生了故障,当前应用的部分业务因为依赖于服务I,因此会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响:

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第2张

但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则服务器的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞:

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第3张

服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。

随着时间的推移,依赖于当前服务的其它服务最终也都会变的不可用,形成级联失败,雪崩就发生了。

解决雪崩问题,主要有以下四种方式:超时处理、仓壁模式(线程隔离)、断路器、流量控制。

1.1.2 超时处理

超时处理即设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待。

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第4张

1.1.3 仓壁模式(线程隔离)

仓壁模式来源于船舱的设计:船舱都会被隔板分离为多个独立空间,当船体破损时,海水只会进入部分空间,将故障控制在一定范围内,避免整个船体都被淹没。

与此类似,仓壁模式是限定每个微服务能使用的线程数,避免耗尽整个服务器的资源,因此也叫线程隔离。

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第5张

1.1.4 断路器

断路器模式是指由断路器统计访问某个服务的请求数量和异常比例,如果异常比例超出阈值则会熔断该业务,拦截访问该业务的一切请求。

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第6张

1.1.5 流量控制

流量控制即限制业务访问的QPS,避免服务因流量的突增而故障。

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第7张

总的来说,雪崩问题就是微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。

超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩,是一种补救措施。

流量控制是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩,是一种预防措施。

1.2 服务保护技术对比

在SpringCloud中支持多种服务保护技术:

  • Netfix Hystrix
  • Sentinel
  • Resilience4J

早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第8张

1.3 Sentinel介绍和安装

1.3.1 Sentinel介绍

Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址:https://sentinelguard.io/zh-cn/index.html

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第9张

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第10张

1.3.2 Sentinel安装

  • 1)下载

Sentinel官方提供了UI控制台,方便用户对系统做限流设置。可以在GitHub上下载。

  • 2)将下载的sentinel-dashboard-1.8.1.jar上传至服务器,并运行
java -jar sentinel-dashboard-1.8.1.jar

Sentinel的默认端口、账户、密码如下:

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第11张

如果要修改默认配置,可以通过添加参数的方式,例如修改端口:

java -Dserver.port=8090 -jar sentinel-dashboard-1.8.1.jar
  • 3)在浏览器访问http://192.168.245.130:8080,输入账号密码,进入Sentinel控制台

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第12张

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第13张

登录后,发现一片空白,什么都没有,这是因为还没有与微服务整合,但Sentinel已经安装完成了。

1.3.3 微服务整合Sentinel

  • 1)搭建一个SpringCloud项目,搭建过程可参考:SpringCloud学习笔记

项目启动后,eureka中注册了一个sd-user-service微服务:

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第14张

  • 2)sd-user-service微服务引入Sentinel依赖
<!--sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 3)修改sd-user-service微服务的配置文件application.yml,配置Sentinel控制台
spring:
  cloud:
    sentinel:
      transport:
        dashboard: http://192.168.245.130:8080/
  • 4)任意调用sd-user-service微服务的API,激活Sentinel的监控。 再访问Sentinel的控制台,则可以看到sd-user-service微服务:

微服务保护学习笔记(一)雪崩问题及解决方案、Sentinel介绍与安装,第15张

本节完,更多内容请查阅分类专栏:微服务学习笔记

感兴趣的读者还可以查阅我的另外几个专栏:

  • SpringBoot源码解读与原理分析
  • MyBatis3源码深度解析
  • Redis从入门到精通
  • MyBatisPlus详解
  • SpringCloud学习笔记
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!