微服务保护-初识Sentinel


个人名片:

博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。

本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

  • 一、初识Sentinel
    • [1. 雪崩问题及解决方案](#1. 雪崩问题及解决方案)
    • [2. 服务保护技术对比](#2. 服务保护技术对比)
    • [3. Sentinel介绍和安装](#3. Sentinel介绍和安装)
    • [4. 微服务整合Sentinel](#4. 微服务整合Sentinel)

一、初识Sentinel

1. 雪崩问题及解决方案

  1. 雪崩问题

微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。
雪崩: 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。

  1. 解决方式
  • 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
  • 仓壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。
  • 熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
  • 流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

总结

什么是雪崩问题?

微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。
如何避免因瞬间高并发流量而导致服务故障?

流量控制
如何避免因服务故障引起的雪崩问题?

超时处理

线程隔离

降级熔断

2. 服务保护技术对比

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

  • Netfix Hystrix
  • Sentinel
  • Resilience4J
    早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架,这里我们做下对比:
Sentinel Hystrix
隔离策略 信号量隔离 线程池隔离/信号量隔离
熔断降级策略 基于慢调用比例或异常比例 基于失败比率
实时指标实现 滑动窗口 滑动窗口(基于 RxJava)
规则配置 支持多种数据源 支持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的支持 支持 支持
限流 基于 QPS,支持基于调用关系的限流 有限的支持
流量整形 支持慢启动、匀速排队模式 不支持
系统自适应保护 支持 不支持
控制台 开箱即用,可配置规则、查看秒级监控、机器发现等 不完善
常见框架的适配 Servlet、Spring Cloud、Dubbo、gRPC 等 Servlet、Spring Cloud Netflix

3. Sentinel介绍和安装

  1. 初识Sentinel

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

  1. 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  2. 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  3. 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  4. 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
  1. 安装Sentinel

1)下载

sentinel官方提供了UI控制台,方便我们对系统做限流设置。
我是从GitHub中下载的1.8.6

2)运行

将jar包放到任意非中文目录,执行命令:

sh 复制代码
java -jar sentinel-dashboard-1.8.6.jar

如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置:

配置项 默认值 说明
server.port 8080 服务端口
sentinel.dashboard.auth.username sentinel 默认用户名
sentinel.dashboard.auth.password sentinel 默认密码

3)访问

访问http://localhost:8080页面,就可以看到sentinel的控制台了:

初始用户和密码默认都是:sentinel

因为我们还没有与微服务整合。所有登录后,是一片空白,什么都没有:

4. 微服务整合Sentinel

在order-service中整合sentinel,并连接sentinel的控制台。

1)导入资料中的cloud-demo项目到idea并且启动nacos
项目

启动nacos

2)引入sentinel依赖

在order-service中的pom.xml中加入依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

3)配置控制台

修改application.yaml文件,添加下面内容:

yaml 复制代码
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080

同时修改order-service和user-service模块中的application.yml中的mysql配置中的password,同时确定需要连接的数据库中是否存在相应的表cloud_order和cloud_user(没有在之前的学习中找)

4)启动项目
使用service启动

5)访问order-service的任意端点

访问前先确定电脑的MySQL服务是开启的。
打开浏览器,访问http://localhost:8088/order/101,这样才能触发sentinel的监控。

然后再访问sentinel的控制台,查看效果:

相关推荐
运维行者_17 分钟前
如何查看每个IP的带宽使用情况?NetFlow 技术实战指南
开发语言·网络·分布式·后端·架构·带宽
杨充1 小时前
4.接口而非实现编程
java·后端·架构
2601_954526751 小时前
【硬核架构】打破 IT 与 OT 的数据孤岛!基于 Rust 异步协程的工业 IoT 网关重构,兼谈顶级自动化智能仪表厂家选型指南
物联网·架构·rust
郑州光合科技余经理1 小时前
家政O2O平台解析:从0搭建上门预约小程序解决方案
android·java·开发语言·前端·小程序·架构·php
李福春2 小时前
SpecCoding + Harness:把 Vibe Coding 从「灵感」钉成「可交付」
架构
kisshyshy2 小时前
《川剧变脸 × React 状态管理?我在浏览器里跑了个端侧大模型》
前端·react.js·架构
小小猪的春天2 小时前
AI Code Review 例外决策框架:手动忽略警告之前,先回答4个问题
后端·架构
码云骑士2 小时前
71-Agent记忆系统-短期记忆-长期记忆-向量知识库三层架构
python·架构
后端优选官2 小时前
上海Agent开发公司:企业级智能体软件的技术架构与落地评估
数据库·人工智能·架构·软件开发·开发经验·上海
极光技术熊2 小时前
AI应用开发中的流式输出:从协议原理到工程实战的完整指南
后端·架构