6 Sentinel
6.1 Sentinel 介绍和工作机制
6.1.1 微服务流量治理组件介绍
随着微服务的流行,服务和服务之间的调用导致服务的稳定性问题变得越来越重要。 雪崩问题: 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,即雪崩。 解决雪崩问题的常见方式有四种: 1.超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待 2.流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。 3.熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。 4.舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源, 因此也叫线程隔离。
6.1.2 Sentinel 介绍
https://sentinelguard.io/zh-cn/
6.1.3 Sentinel 基本概念
#资源 资源在java中的资源一般是接口方法。通常就是一个URL,比如:/hello/get #规则 围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
6.1.4 Sentinel 功能和设计理念
6.1.6 Sentinel 架构
6.1.7 Sentinel 的构成
Sentinel 的构成可以分为两个部分: 核心库(Java 客户端): 开发写代码调用sentinel的库 控制台(Dashboard): 运维部署控制台,Dashboard 主要负责管理推送规则、监控、管理机器信息等。
6.2 Sentinel 控制台
6.2.2.1 Java 二进制启动控制台
https://github.com/alibaba/Sentinel/releases #直接下二进制包如sentinel-dashboard-1.87.jar(jar命令直接跑), Source code为源码还要编译 使用如下命令启动控制台: java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar #-Dserver.port定义dashboard web界面端口(默认8858) #-Dcsp.sentinel.dashboard.server自己作为微服务注册到dashboard进行监控 -Dproject.name注册的项目名 #从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是 sentinel
范例: Java 包启动控制台
#安装JDK8或以上版本 [root@ubuntu2204 ~]#apt update && apt -y install openjdk-8-jdk [root@ubuntu2204 ~]#apt update && apt -y install openjdk-11-jdk [root@ubuntu2204 ~]#wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar [root@ubuntu2204 ~]#java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar #浏览器使用默认用户名和密码sentinel登录访问 http://10.0.0.151:8080/
docker网上有,但非官方版,很久没更新了,建议自己制作
sentinel控制台 #左侧簇点链路:生成key访问的路径,如: http://10.0.0.151:8080/version 流量控制控制/version路径 #可以在流量规则里加,但不够快,直接在簇点链路下在/version下点击流控 #QPS 单向阈值1表示每秒钟只能接受一个请求,超出就拒绝。点击添加会出现在流控规则中 此时访问http://10.0.0.151:8080/version,就能看到失败情况 #java程序可以调用sentinel,来控制流量 #java程序会在配置里标注sentinel的地址,如果不想用java配置里写的sentinel地址,可以在启动时参数修改 #如果临时修改sentinel地址信息,可以不用修改application.yml文件重新编译,直接添加下面选项再执行 [root@ubuntu2204 sentinel-sample]#java -Dspring.cloud.sentinel.transport.dashboard=10.0.0.100:8080 -jar target/sentinel-sample-0.0.1-SNAPSHOT.jar
7 Spring Cloud Gateway
7.1 Spring Cloud Gateway 介绍
7.1.1 什么是 API 网关
API网关作用就是把各个微服务对外提供的API汇聚起来,让外界看起来是一个统一的入口 同时还实现了微服务网关的额外功能, 包含:负载均衡、路由转发、身份认证、权限安全、请求限流、监控/指标等功能
7.1.3 API 网关核心功能
#一般都是开发写的调度规则 1.路由转发 转发后端服务去查nacos服务,如果有多个,配合nacos实现负载均衡,轮流发 2.过滤器 过滤器中默认提供了多种内置功能还支持额外的自定义功能。 比较常用的功能有网关的容错、限流以及请求及相应的额外处理。
7.2 Spring Cloud Gateway 核心概念
7.2.1 Spring Cloud Gateway 相关概念介绍
Route 称为路由,一个Gateway项目可以包含多个Route。 一个Route路由包含如下部分: 1.Route ID: 是自定的,路由的唯一标识 2.URI: 路由目的地,为一个地址, 支持 LB,http,websocket 3.predicates: 路由断言,判断请求是否匹配和符合转发规则的要求,如果符合则转发到路由目的地 4.filters: 路由过滤器,对请求或响应进行过滤处理, 比如: 身份认证和权限校验限流限速,此为可选项
示例: 路由配置
#微服务项目中的application.yml内容 server: port: 10010 #网关端口 spring: application: name: gateway #服务名称 cloud : nacos: server-addr: localhost:8848 # nacos地址 gateway: routes: #网关路由配置 (下面两个路由) - id: user-service #路由id,自定义值,必须唯一 uri: lb://userservice #路由的目标地址Lb表示负载均衡,后面跟Nacos中微服务名称 # uri: http://127.0.0.1:8081 #路由的目标地址,如果使用 http表示固定地址 predicates: #路由断言,判断请求是否符合路由规则的条件 - Path=/user/** #这个是按照路径匹配,只要以/user/开头就符合要求 - id: order-service uri: lb://orderservice/order predicates: - Path=/order/** filters: - StripPrefix=1 #从请求路径中删除第一个前缀/order,再转发给后端
7.2.2 路由断言工厂 Route Predicate Factory
#这些一般都是开发去调用,修改 路由断言工厂 RoutePredicateFactory 包含的主要实现类如图所示,包括 Datetime 、请求的远端地址、路由权重、请求头、Host 地址、请求方法、
请求路径和请求参数等类型的路由断言。
7.2.3 路由过滤器 Gateway Filter
Gateway Filter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理
7.2.4 过滤器工厂 GatewayFilterFactory
当前支持34类路由过滤器工厂,实现请求和响应的定制功能
7.3 Spring Cloud Gateway 开发
这是一个库,需要java写代码调用
标签:03,服务,请求,springcloudgateway,Sentinel,dashboard,sentinel,路由 From: https://www.cnblogs.com/ludingchao/p/18464840