Sentinel安装与集成

简介: 介绍如何切换hmall-micro项目至dev_02分支并提交代码,强调多分支并行开发模式。随后讲解Sentinel服务保护框架的安装与配置,包括控制台部署、本地运行及项目集成,实现微服务熔断降级,并通过簇点链路监控接口。

1.2.2.1 切换分支

将hmall-micro代码环境切换到dev_02分支。

注意:切换分支前要提交原当前分支的代码。

每位学生在dev_02分支练习完成后提交代码并切换回dev_01分支继续未完成的任务

工作中也经常这样来回切换分支,因为不同需求在不同分支里,我们经常都是并行开发

大家入职后,也可能同时负责3-4个项目,所以尽早习惯【多线程并行的开发模式】

1.2.2.2 安装Sentinel

实现服务保护的工具有很多,Spring Cloud Alibaba技术栈中Sentinel是实现服务保护的中间件。

Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入Spring Cloud Alibaba中。官方网站:

https://sentinelguard.io/zh-cn/

https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

Sentinel 的使用可以分为两个部分:

  • 核心库(Jar包):不依赖任何框架/库,能够运行于Java8及以上的版本的运行时环境,同时对 Dubbo/Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。
  • 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。

为了方便监控微服务,我们先把Sentinel的控制台搭建出来。

课前提供的虚拟机已经安装了sentinel,如下图:

使用课前提供的虚拟机需要设置sentinel容器的时区,如下:

先启动sentinel

docker start sentinel-dashboard

登录sentinel容器并设置时区

  • 进入容器:docker exec -it sentinel-dashboard /bin/bash
  • 执行命令:ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezon

设置完成效果如下 :

如果未使用课前提供的虚拟机,需要参考下边的内容安装sentinel:

1)下载jar包

下载地址:https://github.com/alibaba/Sentinel/releases

也可以直接使用课前资料提供的版本:

2)运行

将jar包拷贝到 虚拟机/data/soft/sentinel目录下重命名为sentinel-dashboard.jar

创建Dockerfile文件

FROM openjdk:11-jdk
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezo
ARG SENTINEL_VERSION=1.8.6
# copy sentinel jar
ADD ./sentinel-dashboard.jar /home/sentinel-dashboard.jar
RUN chmod -R +x /home/sentinel-dashboard.jar
ENTRYPOINT ["sh","-c","java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar $JAVA_OPTS /home/sentinel-dashboard.jar"]

执行命令创建镜像:

docker build -t sentinel-dashboard .

创建并启动容器:

docker run  --name sentinel-dashboard -d -p 9090:8090 sentinel-dashboard:latest

其它启动时可配置参数可参考官方文档:官网文档链接

3)访问

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

需要输入账号和密码,默认都是:sentinel

登录后,即可看到控制台,默认会监控sentinel-dashboard服务本身:

本地运行sentinel

如果在测试时发现虚拟中的sentinel不能用,可以本地运行sentinel。

将sentinel的jar包放在任意非中文、不包含特殊字符的目录下,重命名为sentinel-dashboard.jar

然后运行如下命令启动控制台:

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

访问:http://localhost:8090/ 页面

1.2.2.3 项目集成Sentinel

在虚拟机启动sentinel【上面已经执行过,这里是再次提醒、确认一下】

docker start sentinel-dashboard

接下来,我们在项目中集成 sentinel,我们在哪个项目中集成 sentinel?

sentinel要完成熔断降级,熔断是在服务调用方,所以针对购物车服务请求商品服务实现熔断就需要在购物车服务集成 sentienl。

这里可能部分同学有疑问,问什么不是服务提供方呢?所以我们顺便推导一下,假设是提供方熔断:

(1)提供方是熔断了,但是上游调用方还是有大量请求,压力依然存在,只是加快了下游的响应速度,前提是牺牲了原有的业务逻辑实现,并不能保障整体微服务的可靠性

(2)调用方熔断,就是我根本不调用你下游(你此刻慢、报错多那我就先不调用你),而是返回一个默认逻辑,这个默认逻辑实现应该由接口提供方实现

我们在cart-service模块中整合sentinel,连接sentinel-dashboard控制台,步骤如下: 1)引入sentinel依赖

<!--sentinel-->
<dependency>
  <groupId>com.alibaba.cloud</groupId> 
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2)配置控制台

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

spring:
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.101.68:9090
        client-ip: 192.168.101.1
      http-method-specify: true # 开启请求方式前缀可根据http请求方法区分簇点链路

如果是在本机运行的sentinel要配置:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8090
      http-method-specify: true # 开启请求方式前缀可根据http请求方法区分簇点链路

3)访问cart-service的任意端点

重启cart-service、item-service,然后访问查询购物车接口:swagger链接

sentinel的客户端就会将服务访问的信息提交到sentinel-dashboard控制台。并展示出统计信息:

点击簇点链路菜单,会看到下面的页面:

所谓簇点链路,就是单机调用链路,是一次请求进入服务后经过的每一个被Sentinel监控的资源。默认情况下,Sentinel会监控SpringMVC的每一个Endpoint(接口)。

因此,我们看到/carts这个接口路径就是其中一个簇点,我们可以对其进行限流、熔断、降级、隔离等保护措施,稍后会详细讲解。

相关文章
|
10月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
1076 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
3天前
|
运维 Shell 应用服务中间件
【速查手册】Docker常用命令大全:这20%的命令解决了80%的问题
本文精炼总结 Docker 高频命令,按镜像管理、容器生命周期、排查调试、清理维护四大场景分类,详解常用参数与实战示例,附速查表,助你高效掌握核心操作,提升开发运维效率。
|
3天前
|
缓存 Java Docker
【Docker实战】如何写出“性感”的Dockerfile?从1GB瘦身到100MB的秘籍
本文介绍如何编写高效、安全的Dockerfile,以Java和Python为例,分享四大核心技巧:多阶段构建减小镜像体积,利用缓存加速构建,选用轻量基础镜像,配置.dockerignore忽略无用文件。助你打造小巧、快速、安全的容器镜像,提升部署效率与安全性。
|
3天前
|
SQL Java 关系型数据库
【并发实战】拒绝数据乱套!乐观锁与悲观锁的落地应用指南
在分布式场景下,Java锁无法解决数据并发问题。本文详解悲观锁(SELECT FOR UPDATE)与乐观锁(版本号机制),结合MySQL与MyBatis-Plus实战,助你应对秒杀超卖等高并发难题,提升系统一致性与性能。
|
3天前
|
SQL 关系型数据库 MySQL
【SQL优化】不再抓瞎!手把手教你读懂MySQL Explain执行计划
本文详解MySQL执行计划工具EXPLAIN,教你读懂其输出的“天书”表格。重点掌握四个核心指标:`type`(访问类型)、`key`(实际使用索引)、`Extra`(额外信息)和`rows`(扫描行数)。通过实战案例解析慢查询成因与优化方案,助你快速定位SQL性能瓶颈,写出高效数据库查询。
|
3天前
|
Java 数据库连接 调度
xxljob执行源码分析
包含中文注释的XXL-JOB源码包及分析流程,涵盖架构设计与核心源码解析。重点包括任务调度、线程池管理、心跳注册、失败重试与告警机制、日志清理及时间轮调度原理,全面剖析分布式任务调度系统实现细节。(238字)
|
3天前
|
存储 关系型数据库 MySQL
【数据库核心】MySQL架构解密:一文读懂InnoDB存储引擎
本文深入解析InnoDB存储引擎架构,对比MyISAM差异,涵盖事务、行锁、外键、缓冲池、Redo Log及聚集索引等核心机制,助你掌握MySQL高性能原理与调优关键。
|
3天前
|
存储 运维 Java
【Docker入门】5分钟彻底搞懂镜像、容器与仓库:Docker的核心三剑客
Docker 通过“镜像、容器、仓库”三大核心实现“一次构建,到处运行”。镜像如食谱,容器是做好的菜,仓库似超市货架。用生活化比喻秒懂其原理与协作流程。
|
3天前
|
JSON NoSQL 关系型数据库
【技术选型】MongoDB vs MySQL:一场没有输家的“双雄对决”
本文深入对比MySQL与MongoDB的核心差异,从理念、性能到实战场景。MySQL严谨规范,适合高一致性业务;MongoDB灵活高效,契合多变需求。通过电商案例解析,揭示两者互补而非替代的关系,帮助开发者按场景选型,实现技术价值最大化。
|
6月前
|
数据安全/隐私保护
贴吧自动发帖工具, 贴吧自动评论脚本,顶贴回复发帖插件
这个代码实现了贴吧自动发帖、自动回复、获取帖子列表等功能。主要使用了requests库进行网络请求