【微服务】Sentinel(流量控制)

这篇具有很好参考价值的文章主要介绍了【微服务】Sentinel(流量控制)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.基本介绍

1.Sentinel是什么

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.Sentinel主要特性

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.Sentinel核心功能
1.流量控制

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.熔断降级

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.消息削峰填谷

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.Sentinel两个组成部分

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.Sentinel控制台显示

1.需求分析

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.下载

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.运行
1.进入cmd
2.输入java -jar sentinel-dashboard-1.8.0.jar

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.查看默认端口8080

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.访问
1.账号和密码都是sentinel

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.登录成功

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.退出就在cmd输入ctrl + c
5.切换端口
1.在启动时携带端口参数 --server.port=8081(端口最大65535)
2.演示

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.netstat -anb | more 查看端口监听情况(空格显示更多)

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.Sentinel监听指定微服务

1.示意图(在10004模块配置)

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.pom.xml引入Sentinel
        <!-- 引入sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
3.application.yml 配置sentinel与服务端通信
  • 注意这里与sentinel相关的就只有配置sentinel的部分
  • 这里开启的port是在本机上进行监听,作为客户端与sentinel的服务端进行通信,并且如果8719端口被占用,则会自动将端口号加一直到找到可用的端口
server:
  port: 10004 # 配置服务端口
spring:
  application:
    name: member-service-nacos-provider # 配置服务的名称,名字任意这里与项目
# 配置naocs
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 配置nacos的地址
# 配置sentinel
    sentinel:
      transport:
        dashboard: localhost:8080 # 配置sentinel的地址
        port: 8719 # 配置sentinel的端口,当端口冲突时,会自动+1,直到找到可用端口
# 暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: "*"
mybatis:
  mapper-locations: classpath:mapper/*.xml # 扫描所有Mapper.xml
  type-aliases-package: com.sun.springcloud.entity # 扫描所有实体类,可以直接使用类名来标识

4.测试
1.启动Nacos(启不启动都可以)和Sentinel

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.启动10004微服务

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.nacos查看注册情况

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.浏览器输入 http://localhost:10004/member/get/1

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.http://localhost:8080 查看Sentinel实时监控
  • 注意,这个实时监控只要一段时间不访问,数据就会暂时消失

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.QPS和Sentinel懒加载

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.Sentinel 流量控制介绍 + QPS实例

1.配置界面

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.基本介绍

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.流量控制实例-QPS
1.需求分析

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.找到/member/get/1的流量控制界面

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.选择QPS,单机阈值设置成1

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.可以查看流控规则

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.点击编辑即可修改

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.测试
1.步骤

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.浏览器快速访问http://localhost:10004/member/get/1,可以看到被限流了

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.流控规则实时生效原因

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

6.携带参数方式进行限流
1.方式一:修改/member/get/{id} 为/member/get,使用请求参数的形式获取值,限流规则修改为/member/get
1.代码:
    /**
     * 根据id来获取某个会员的信息
     *
     * @param id 使用请求参数的形式传入参数
     * @return 返回json格式的数据
     */
    @GetMapping("/member/get") // 这里修改成请求参数的形式
    public Result getMemberById(@RequestParam("id") Long id) {
        Member member = memberService.queryMemberById(id);

        if (member != null) {
            return Result.success("查询成功!member-service-nacos-provider-10004", member);
        } else {
            return Result.error("402", "ID= " + id + "不存在");
        }
    }
2.修改限流规则

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.测试,使用id=2也会被限流

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.方式二:使用URL资源清洗
1.基本介绍

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.com/sun/springcloud/controller/CustomerUrlCleaner.java 将URL进行资源清洗

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

  • 注意:这里的资源清洗只是表示返回给Sentinel的URL改变了
package com.sun.springcloud.controller;

import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

/**
 * Description: URL资源清洗
 *
 * @Author sun
 * @Create 2024/3/28 16:17
 * @Version 1.0
 */
@Component // 注入到spring容器中
public class CustomerUrlCleaner implements UrlCleaner {
    @Override
    public String clean(String originUrl) {
        // 判断是否为空
        if (StringUtils.isBlank(originUrl)) {
            return originUrl;
        }
        // 如果是/member/get开头的url,就将其清洗为/member/get/*
        if (originUrl.startsWith("/member/get")) {
            return "/member/get/*";
        }
        return originUrl;
    }
}

3.修改限流规则

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.访问测试,成功限流

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

7.注意事项:Sentinel的流控规则默认没有持久化,只要重启调用API所在模块就没了!

5.Sentinel 流量控制—线程数

1.需求分析
  • 一次请求就是一个线程

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.修改流控规则

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.浏览器输入http://localhost:10004/member/get/1 并快速刷新
  • 这里并没有被限流,原因是,第一次请求开启了一个工作线程,在第二次请求到达之前,上一个工作线程已经关闭

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.为了看到效果,让线程休眠一秒

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.重启10004模块(需要重新配置限流规则),快速发送请求
  • 成功限流

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

6.Sentinel 流量控制—关联

1.需求分析
  • 简单来说就是t1关联t2,当t2的QPS超过1,则t1被限流

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.com/sun/springcloud/controller/MemberController.java 添加两个接口为t1和t2
    // 编写两个测试的接口,路由分别为t1和t2
    @GetMapping("/t1")
    public String t1() {
        return "t1";
    }

    @GetMapping("/t2")
    public String t2() {
        return "t2";
    }
3.配置t1的限流规则为关联t2

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.postman模拟高并发测试
1.测试请求t2

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.点击save

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.New Collection

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.命名后创建

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.点击集合右边三个点,然后Run collection

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

6.选择迭代次数和间隔毫秒数,然后Run test

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

7.浏览器输入 http://localhost:10004/t1 ,发现被限流

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

7.Sentinel 流量控制—Warm up

1.基本介绍

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.需求分析
  • 简单来说假如最终要到达的QPS为90,设置的预热时间为3s,则在3s内,QPS只能为90/3=30,而在3s后QPS逐渐增加,直到为90

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.具体配置
1.启动Sentinel

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

2.启动Nacos

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.启动10004微服务,成功注册

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

4.浏览器先输入 http://localhost:10004/t2 然后查看Sentinel控制台

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

5.修改流控规则

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

6.测试
前三秒的QPS为9 / 3 = 3,三秒后的QPS为9

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

8.Sentinel 流量控制—排队等待

1.基本介绍

排队等待策略只有在超过了QPS的情况下才会生效,也就是假如设置的QPS为1,就表示1s只能处理一个请求,一旦1s内有两个请求,那么第二个请求就会进行排队等待,当第一个请求完成之后才会处理第二个请求。

关于设置的超时时间,表示等待的时间一旦超过了这个时间就会被限流

需要注意的是,如果想要启动排队等待的流控策略,则阈值类型就必须要是QPS

2.需求分析

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构

3.具体配置
  • 这样配置就表示1s内只能有一个请求,如果有第二个就会进行排队等待,直到第一个请求处理完,一旦等待时间超过1s就会被限流

【微服务】Sentinel(流量控制),微服务,微服务,sentinel,架构文章来源地址https://www.toymoban.com/news/detail-851277.html

到了这里,关于【微服务】Sentinel(流量控制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sentinel 流量控制框架

    1. Sentinel 是什么? Sentinel是由阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件。 2. 主要优势和特性 轻量级,核心库无多余依赖,性能损耗小。 方便接入,开源生态广泛。 丰富的流量控制场景。 易用的控制台,提供实时监控、机器发现、规则管理

    2024年02月09日
    浏览(72)
  • Sentinel流量控制与熔断降级

    📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。 💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。 💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者

    2024年02月10日
    浏览(33)
  • 流量控制与熔断利器:Sentinel介绍

    这是《百图解码支付系统设计与实现》专栏系列文章中的第(19)篇,也是流量控制系列的第(6)篇。点击上方关注,深入了解支付系统的方方面面。 本篇聊聊流量控制与熔断利器Sentinel,背后的原理,适用的场景及存在的不足。不涉及具体的配置,具体配置请参考官方文档

    2024年01月21日
    浏览(29)
  • 利用Sentinel解决雪崩问题(一)流量控制

    1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待; 舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离; 熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则

    2024年04月23日
    浏览(43)
  • 如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的两种限流模式,由于篇幅原因,后续文章将详细介绍Sentinel的其他三种。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页

    2024年02月05日
    浏览(22)
  • 实战:Springboot集成Sentinel实现流量控制、熔断降级、负载保护

    前面的文章我们学习了Hystrix并和springboot项目进行了集成,实现服务的熔断降级、隔离措施。但是Hystrix对流量的控制不是很好,仅仅信号量也只能对指定的接口进行限流,至于保护机制Hystrix也只是达到指标进行熔断。那么,有没有一种中间件可以在兼容熔断降级的同时精准实

    2024年02月16日
    浏览(35)
  • 05-微服务Sentinel流量哨兵

    分布式系统的流量防卫兵 :随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为切入点,在流量控制、断路、负载保护等多个领域开展工作,保障服务可靠性。 特点: 丰富的应用场景 :Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例

    2024年01月23日
    浏览(24)
  • 微服务05-Sentinel流量防卫兵

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以 流量 为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的

    2024年02月13日
    浏览(29)
  • 【RuoYi-Cloud-Plus】学习笔记 08 - Sentinel(三)流量控制知识整理

    打开 Sentinel 官方文档的介绍,概括性的一句话便是: Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 主

    2024年02月12日
    浏览(24)
  • Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包