微服务03 微服务sentinel, springcloudgateway

news/2024/10/14 19:35:28

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-serviceuri: lb://orderservice/orderpredicates: - 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写代码调用

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71573.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Web刷题之polarctf靶场(3)

1. 干正则 打开靶场发现是简单的php代码审计, 先构造id=a[0]=www.polarctf.com, 由于要ping两次, 所以先构造cmd=|ls <?php error_reporting(0); if (empty($_GET[id])) {show_source(__FILE__);die(); } else {include flag.php;$a = "www.baidu.com";$result =…

题解:P2315 [HNOI2005] 数三角形

Problem Link [HNOI2005] 数三角形 题意 输入一个大三角形的各个边存在情况,输出里面有多少个正三角形。 Solution 简单暴力即可,用 \(4\) 个数组维护每条边能延伸的最大长度,然后逐个判断三角形是否可行即可。如图,l_upper 维护左端点向上(即 $\ell_{BA} $),l_lower 维…

梳理好本职工作之项目管理

项目整个里程碑,每个阶段应该输出什么

微服务01 ZooKeeper, Kafka

1.4 微服务 1.4.6 Spring Cloud JAVA 微服务技术 Dubbo是2014年之前阿里退出的分布式系统的技术(不属于微服务)。现在主流是 Spring Cloud Spring Cloud官网地址: https://spring.io/projects/spring-cloud 官网上实现方法有很多种,目前主流是阿里巴巴实现的方法Spring Boot…

Swarm 框架登场:OpenAI 第 3 阶段「敲门砖」;马斯克的 Teslabot 实际有人远程操控丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

[2024领航杯] Pwn方向题解 babyheap

[2024领航杯] Pwn方向题解 babyheap 前言: 当然这个比赛我没有参加,是江苏省的一个比赛,附件是XiDP师傅在比赛结束之后发给我的,最近事情有点多,当时搁置了一天,昨天下午想起来这个事情,才开始看题目,XiDP师傅说是2.35版本的libc,确实高版本libc的却棘手,我经验太浅了…

高级语言程序设计第三次个人作业

班级网址:https://edu.cnblogs.com/campus/fzu/2024C 作业网址:https://edu.cnblogs.com/campus/fzu/2024C/homework/13284 姓名:袁湘湘 学号:102400109 一,第四章编程练习: 1,4.8.2问题:忘记怎么算名字的宽度 解决:翻阅书本,使用strlen()函数 2,4.8.3问题:无法运行…

智媒AI写作助手轻松写作热点文章,为你提升流量!

在信息爆炸的时代,内容创作成为了吸引用户、提升流量的关键。然而,对于许多创作者来说,持续产出高质量的热点文章是一项挑战。正是在这样的背景下,智媒AI写作助手应运而生,它不仅能够帮助创作者轻松捕捉热点,还能提升文章的质量,从而有效提升流量。以下是智媒AI写作助手…