¡La limitación de corriente de Sentinel es tan simple!

Sentinel es el fusible limitador de corriente de código abierto de Alibaba con una interfaz de operación visual.

En el desarrollo diario, la función de limitación de corriente se usa a menudo para limitar el fusible de corriente de ciertas interfaces, como limitar el número de accesos a la interfaz por unidad de tiempo; o realizar la limitación de corriente según ciertas reglas, como limitar la cantidad de accesos IP por unidad de tiempo, etc. .

Ya hemos hablado del ratelimter, la clase de herramienta de limitación de corriente de interfaz, que puede realizar la limitación de corriente del cubo de tokens. Obviamente, la función de centinela es más completa y completa. Eche un vistazo al perfil de centinela:

https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Sentinel

Introducción al centinela

Con la popularidad de los microservicios, la estabilidad entre servicios y servicios se vuelve cada vez más importante. Sentinel utiliza el tráfico como punto de entrada para proteger la estabilidad de los servicios desde múltiples dimensiones, como el control de flujo, la degradación de los fusibles y la protección de la carga del sistema.

Sentinel tiene las siguientes características:

  • Escenarios de aplicación enriquecidos : Sentinel ha llevado a cabo los escenarios centrales de la promoción de tráfico doble once principal de Alibaba en los últimos 10 años, como picos (es decir, control de tráfico de ráfagas dentro del rango de la capacidad del sistema), reducción de picos de mensajes y llenado de valles, y fusibles en tiempo real aguas abajo Aplicaciones no disponibles, etc.

  • Supervisión completa en tiempo real : Sentinel también proporciona funciones de supervisión en tiempo real. Puede ver los datos de segundo nivel de una sola máquina conectada a la aplicación en la consola, e incluso el estado de funcionamiento resumido de un clúster de menos de 500 unidades.

  • Amplia ecología de código abierto : Sentinel proporciona módulos de integración listos para usar con otros marcos / bibliotecas de código abierto, como la integración con Spring Cloud, Dubbo y gRPC. Solo necesita introducir las dependencias correspondientes y realizar una configuración simple para acceder rápidamente a Sentinel.

Punto de extensión SPI completo: Sentinel proporciona puntos de extensión SPI completos y fáciles de usar. Puede personalizar rápidamente la lógica implementando puntos de extensión. Por ejemplo, gestión de reglas personalizadas, adaptación de fuentes de datos, etc.

Simplemente usemos Sentinel.

Sentinel incluye un servidor y un cliente. El servidor tiene una interfaz visual. Después de que el cliente necesita importar el jar, puede comunicarse con el servidor y completar la función de limitación actual.

Inicie el jar del servidor

https://github.com/alibaba/Sentinel/releases En esta dirección, descargue el tarro de lanzamiento e inícielo.

Este jar es una aplicación Springboot estándar, que se puede pasar

java -jar sentinel-dashboard-1.6.0.jar para comenzar, esta es la configuración predeterminada, comience en el puerto 8080. También puede agregar algunas configuraciones personalizadas para comenzar

java -Dserver.port = 8080 -Dcsp.sentinel.dashboard.server = localhost: 8080 -Dproject.name = sentinel-dashboard -jar sentinel-dashboard.jar. Para obtener una explicación de la configuración específica, puede ir a GitHub para ver el documento.

Aquí usamos directamente el java -jar sentinel-dashboard-1.6.0.jar predeterminado para comenzar, y luego visitamos localhost: 8080. Puedes ver la interfaz:
1.png

Ingrese la contraseña de la cuenta centinela e ingrese a la interfaz principal
2.png

Debido a que no iniciamos el cliente en este momento, la interfaz está vacía.

Iniciar el cliente

Cree un nuevo proyecto Springboot, pom es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.maimeng.baobanq</groupId>
    <artifactId>baobanserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>baobanserver</name>
    <description>Demo project for Spring Boot</description>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>
 
    <dependencies>
       
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
       
        <!--sentinel-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--sentinel end-->
       
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <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>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

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

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

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

spring:
 application:
   name: baobanserver
 cloud:
  sentinel:
    transport:
      dashboard: localhost:8080
    #eager: true

另外由于8080端口已被占用,自行设置一个端口,如8888.

做完这些,新建一个controller,

@RestController
public class TestController {
 
    @GetMapping(value = "/hello")
    public String hello() {
        return "Hello Sentinel";
    }
}

就是一个普通的controller接口。

之后启动该项目。启动后回到server的控制台界面
3.png

发现并没有什么变化。然后我们调用一下hello接口。之后再次刷新server控制台。

4.png

界面已经出现了我们的项目,并且有一堆规则。
5.png

因为Sentinel采用延迟加载,只有在主动发起一次请求后,才会被拦截并发送给服务端。如果想关闭这个延迟,就在上面的yml里把eager的注释放掉。

然后在簇点链路里hello接口的流控那里设置限流规则,将单机阈值设为1.就代表一秒内最多只能通过1次请求到达该hello接口。
6.png

之后再次连续访问hello接口。
7.png

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

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

最后

感谢大家看到这里,文章有不足,欢迎大家指出;如果你觉得写得不错,那就给我一个赞吧。


Supongo que te gusta

Origin blog.51cto.com/14849432/2540526
Recomendado
Clasificación