zoukankan      html  css  js  c++  java
  • Sentinel实现限流

      Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。

      sentinel的简介:
      https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Sentinel

      Sentinel 介绍

      随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

    Sentinel 具有以下特征:

    1. 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
    2. 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
    3. 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
    4. 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

    Sentinel包括服务端和客户端,服务端有可视化界面,客户端需引入jar后即可和服务端通信并完成限流功能。

    启动服务端的jar
    https://github.com/alibaba/Sentinel/releases 在这个地址,下载release的jar,然后启动即可。

    这个jar是个标准的Springboot应用,可以通过java -jar sentinel-dashboard-1.8.2.jar来启动,这样就是默认的设置,启动在8080端口。也可以加上一些自定义配置来启动

    java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar。具体配置的解释,可以到GitHub上看一下文档。这里我们直接使用默认java -jar sentinel-dashboard-1.8.2.jar来启动,之后访问localhost:8080。可以看到界面:

      

    输入账号密码sentinel后进入主界面,因为我已经配置过了,如果没有配置过 这里是空的

     启动客户端

    新建一个springBoot项目引入jar

    <dependency>
    	<groupId>org.springframework.cloud</groupId>
    	<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    

      声明依赖

    <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    <dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>${spring-cloud.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
    				<version>0.2.2.RELEASE</version>
    				<type>pom</type>
    			<scope>import</scope>
    		</dependency>
    	</dependencies>
    </dependencyManagement>
    

      

    需要注意引用的SpringCloud-alibaba的版本是0.2.2,当前的最新版,如果是Springboot2.x的项目,需要引0.2.x的。Springboot1.x的引0.1.x的。

    Sentinel的客户端依赖也很简单,spring-cloud-starter-alibaba-sentinel加这一个引用即可。

    之后在application.yml里添加server的地址配置:

     cloud:
        sentinel:
          transport:
            dashboard: localhost:8080
    

     

      由于8080端口被sentinel服务端占用项目需要换一个端口,做完这些新建一个controller之后启动该项目。启动后回到server的控制台界面,刷新页面需要注意的是在没有调用接口之前刷新页面server控制台是不会有变化的,因此需要先调用一下接口然后在刷新server控制台。界面已经出现了我们的项目,并且有一堆规则。

    然后在簇点链路里(或者流控规则里添加资源)/user/login接口的流控那里设置限流规则,将单机阈值设为1.就代表一秒内最多只能通过1次请求到达该/user/login接口。

     

     

     ip限流只需要将针对来源设置为需要限流的ip即可

     之后再次连续访问/user/login接口。

    发现已经被拦截了,限流已经生效。

     

     这样就完成了一次简单的限流操作,并且能看到各接口的QPS的统计。

     

     

  • 相关阅读:
    Nginx负载均衡+代理+ssl+压力测试
    Nginx配置文件详解
    HDU ACM 1690 Bus System (SPFA)
    HDU ACM 1224 Free DIY Tour (SPFA)
    HDU ACM 1869 六度分离(Floyd)
    HDU ACM 2066 一个人的旅行
    HDU ACM 3790 最短路径问题
    HDU ACM 1879 继续畅通工程
    HDU ACM 1856 More is better(并查集)
    HDU ACM 1325 / POJ 1308 Is It A Tree?
  • 原文地址:https://www.cnblogs.com/wangjinyu/p/15628561.html
Copyright © 2011-2022 走看看