# 一、雪崩问题及解决方案
## 1)什么是雪崩效应
微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。
![](https://img.kancloud.cn/15/f1/15f17a4d262514e305dbf0614312354b_1892x726.png)
![](https://img.kancloud.cn/e5/0f/e50f34ca57cf73f998064eac069ebdff_2460x786.png)
![](https://img.kancloud.cn/aa/57/aa576f354ed7bf8c7918d3a1069fb2c8_2466x694.png)
## 2)雪崩原因
导致服务雪崩的原因有如下三种:
* 由于服务自身的原因,比如缓存击穿大量的请求,程序bug,硬件故障等导致服务不可用,导致雪崩
* 由于用户或者代码逻辑重试,加大了流量,导致服务雪崩
* 由于资源耗尽,导致服务调用者不可用,就是下面的雪崩效应的情况。
## 3)解决方案
解决雪崩问题的常见方式有四种:
### 1、超时处理:
设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
![](https://img.kancloud.cn/a5/29/a5298baff20f03aba5ae70d51ac2c4d0_1612x840.png)
### 2、舱壁模式:
限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。
![](https://img.kancloud.cn/81/6f/816fa09adc97c4fbbd98473379188c7b_1264x728.png)
### 3、熔断降级:
由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
![](https://img.kancloud.cn/fa/f9/faf9b89807a9fb3efe38112d0670b52a_2506x800.png)
###4、流量控制:
限制业务访问的QPS,避免服务因流量的突增而故障。
![](https://img.kancloud.cn/9a/d3/9ad34610fbcb5b85c912c260cda14070_2426x606.png)
# 二、服务保护技术对比
![](https://img.kancloud.cn/c6/e1/c6e175d7d79aa1115ed4fc17ac66ed91_1001x526.png)
# 三、Sentinel介绍和安装
## 1)认识Sentinel
Sentinel是阿里巴巴开源的一款微服务流量控制组件。
Sentinel 具有以下特征:
* 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
* 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
* 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
* 完善的 SPI 扩展
* 点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
## 2)安装Sentinel控制台
### 1、下载jar包
sentinel官方提供了UI控制台,方便我们对系统做限流设置。
```
java -jar sentinel-dashboard-1.8.1.jar
```
### 2、访问控制台页面
localhost:8080 即可看到控制台页面,默认的账户和密码都是sentinel
![](https://img.kancloud.cn/27/fc/27fc326b92bb88928c13d7114ba288bd_2560x1251.png)
### 3、修改配置
如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置:
![](https://img.kancloud.cn/0a/97/0a974996d509ea2746476f9542bd0f14_993x216.png)
例如:如果8080端口占用了,可用8090端口
~~~
java -jar sentinel-dashboard-1.8.1.jar -Dserver.port=8090
~~~
# 四、微服务整合Sentinel
我们在order-service中整合Sentinel,并且连接Sentinel的控制台,步骤如下:
## 1)引入sentinel依赖:
```
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
```
## 2)配置控制台地址:
```
cloud:
nacos:
server-addr: localhost:10086 #nacos地址
sentinel:
transport:
dashboard: localhost:8080 #sentinel 控制台地址
```
## 3)访问微服务的任意端点,触发sentinel监控
![](https://img.kancloud.cn/38/e7/38e788d4be529d1eb1f8db5b7071cd41_2836x1386.png)
- 开发语言
- java
- Java基础篇
- Java多线程篇
- 进程和线程的区别,进程间如何通信
- 什么是线程上下文切换
- 什么是死锁
- 死锁的必要条件
- Synchrpnized和lock的区别
- 什么是AQS锁
- 为什么AQS使用的双向链表
- 有哪些常见的AQS锁
- sleep()和wait()的区别
- yield()和join()区别
- Java线程池
- SpringBoot
- spring boot 项目开发常用目录结构
- Mybatis-Plus
- MyBatisPlus的CRUD操作
- Mybatis-Plus主键ID生成策略
- JVM
- JVM组成
- 字节码文件的组成
- 类的生命周期
- JVM、JRE和JDK
- arthas
- 使用阿里arthas不停机解决线上问题
- Java IO
- php
- 安装swoole
- composer部分
- windows安装composer
- composer PSR-4映射
- swoole部分
- swoole安装
- thrift部分
- linux下安装thrift
- PHP使用Thrift
- lnmp部分
- 架构的工作原理
- tp5框架生命周期
- zookeeper部分
- zookeeper安装
- sort
- TCP和UDP的区别
- 软件
- xdebug
- vscode+phpstudy+xdebug无法断点(踩坑记)
- Hyperf框架
- 注解
- 开发方案
- 抖音
- 抖音达人视频发布与统计
- 安全问题
- 微信
- 微信公众平台怎样实现用户点击链接向公众号发消息
- CDN加速OSS计费说明
- 程序设计
- 正则表达式
- 面向对象
- 设计模式
- 创建型模式
- 工厂模式
- 单例模式
- 结构型模式
- 适配器模式
- 行为型模式
- 策略模式
- 观察者模式
- 算法部分
- 位运算
- 排序算法
- 双指针
- 贪心算法
- 动态规划
- 二分查找
- 华为题库
- 技术栈
- mq
- MQ 的优势和劣势
- rabbitmq部分
- windows安装rabbitmq
- RabbitMQ 简介
- 工作模式
- 高级特性-消息可靠投递-confirm
- 高级特性-消息可靠投递-return
- 高级特性-Consumer Ack
- 高级特性-消费端限流
- 高级特性-TTL
- 高级特性-死信队列
- Centos7下安装rabbitmq
- 数据库
- MongoDB
- MongoDB 相关概念
- Mysql
- 索引总结
- MySQL架构图
- InnoDB和MyISAM的区别
- 索引设计与优化
- 悲观锁和乐观锁
- mysql如何解除死锁状态
- 查询慢
- 数据库主键的优缺点
- MySQL锁详解
- SQL语句分类
- 开查询账号
- 数据库迁移
- MySQL实战知识点
- mysql清理binlog日志
- 面试总结
- 事务隔离
- 聚集索引与非聚集索引
- B树和B+树
- docker
- docker-desktop安装的坑点
- docker在linux平台下安装
- Ubuntu安装Docker
- 常用命令
- 适用于 Linux 的 Windows 子系统没有已安装的分发版
- docker核心架构图
- docker安装lnmp环境
- docker安装redis
- dockerfile
- docker-compose
- linux
- Ubuntu 更换国内源
- centos
- 常用命令
- virtualbox
- 关于VirtualBox安装Ubuntu时界面显示不全,没有下一步选项
- linux复制当前目录到其子目录下
- 命令
- cat和>、>>
- crontab命令
- 查看当前目录的文件大小
- shell登录和非shell登录
- nginx
- 正向代理
- 反向代理
- 负载均衡
- 分割Nginx的access.log日志并保留30天一个月时长,自动删除多余的日志
- linux安装nginx
- git
- 生成秘钥
- 常用命令
- Linux中git保存用户名密码
- git清除账号密码
- 设置git store 存储账号密码
- git submodule 使用小结
- 微服务
- 微服务技术栈
- nacos
- Nacos服务分级存储模型
- Nacos配置管理-配置热更新
- Nacos集群搭建
- 微服务保护
- 初识Sentinel
- 隔离和降级
- es
- DSL查询语法-相关性算法
- DSL查询语法-FunctionScoreQuery
- DSL查询语法-BooleanQuery
- 搜索结果处理-排序
- es深度分页问题
- 自动补全
- elasticsearch 设置密码
- redis
- redis简介
- 安装redis扩展
- redis数据类型
- redis常见问题
- PHP 使用 Redis 实现分布式锁
- 缓存更新策略
- [ Redis ] AOF 和 RDB 的相关介绍以及相关配置
- 分布式锁的8大坑
- 分布式锁-Redisson
- 内存回收
- UV统计
- Redis主从集群
- redis哨兵
- Redis安装目录下常见文件
- 通讯原理概述
- linux安装redis
- windows
- Win系统端口被占用
- Windows10 WSL2限制cpu和内存
- jekins
- 持续集成
- centos卸载gitlab
- jenkins搭配gitlab的webhook实现自动化部署
- 大数据
- Linux集群分发脚本xsync
- hadoop
- hadoop安装
- hadoop配置文件
- clickhouse
- ClickHouse 安装部署
- flink
- 数据仓库
- zookeeper
- zookeeper分布式安装
- ZK集群启动停止脚本
- kafka
- kafka分布式安装
- kafka集群启动停止脚本
- flume
- flume分布式安装
- Flume配置
- Flume使用
- maxwell
- Maxwell简介
- Maxwell部署
- Maxwell使用
- MaxwellBootstrapUtility - Connections could not be acquired from the underlying database
- 线上事故