微服务03 微服务sentinel, springcloudgateway

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写代码调用

 

posted @ 2024-10-14 19:30  战斗小人  阅读(75)  评论(0编辑  收藏  举报