Alibaba Sentinel 一 :Sentinel初识

一: Sentinel简介

Sentinel是Alibaba Spring Cloud中的重要一员,它是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。

Sentinel有以下几大优势:

  • 丰富的应用场景,出身于阿里巴巴,已经历过千锤百炼。

  • 易于使用,快速接入。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

  • 多样化的流量控制手段。

  • 可视化的监控和规则管理,完备的实时监控,Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

额外提一下在我所经历的项目中,遇到的限流方式还有其它两种,大家可以了解一下。一种是使用Guava中的Ratelimiter类进行限流,算法是令牌桶。还有一种是使用lua编程,在nginx中进行限流,这种方式需要很大的开发量。

 

二: Sentinel下载使用

Sentinel 的使用可以分为两个部分:

  1. 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  2. 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。

下载Sentinel Dashboard  https://github.com/alibaba/Sentinel/releases

下载夏下来的是一个jar,有java环境的可以直接运行:java -jar sentinel-dashboard.jar

启动完成后,访问http://localhost:8080,需要注意,sentinel的默认端口是8080。用户名和密码默认是sentinel。

到此,sentinel的控制台启动完毕。

三:Sentinel初始化监控

新建一个项目先体验一下sentinel的功能。

在本专栏中的文章,由于是alibaba spring cloud系列,所以涉及到的项目,一般都需要注册到nacos中。同样,sentinel也不例外,虽然本示例不需要注册,但是为了系列文章的连贯性,我还是注册到nacos中了。需要先启动一个单机版的nacos。

1. 创建一个module

2. 修改pom

<dependencies>
    <!-- SpringCloud ailibaba nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- SpringCloud ailibaba sentinel-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--监控-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--热部署-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

3. 在resources目录下新建application.yml文件

server:
  port: 8400

spring:
  application:
    name: sentinal-service
  cloud:
    nacos:
      discovery:
        #Nacos服务注册中心地址
        server-addr: localhost:8848
    sentinel:
      transport:
        #配置Sentin dashboard地址
        dashboard: localhost:8080
        # 默认8719端口,假如被占用了会自动从8719端口+1进行扫描,直到找到未被占用的 端口
        port: 8719

management:
  endpoints:
    web:
      exposure:
        include: '*'

4. 创建启动类

package com.xhc.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class SentinelMain {

    public static void main(String[] args) {
        SpringApplication.run(SentinelMain.class,args);
    }
}

5. 创建一个测试业务类

package com.xhc.cloud.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class FlowLimitController {

    @GetMapping("/testLimit")
    public String testLimit() {
        return "----testLimit";
    }
}

6. 启动项目,在nacos的服务列表中会发现sentinel已经注册进去了。打开sentinel,发现什么都没有,这是正常的。sentinel需要一个触发。


访问:http://localhost:8400/testLimit

然后再一次刷新sentinel,这时就会发现已经有数据显示了。

可以尝试着在浏览器中多刷新几次,sentinel控制台就会更加明显的显示访问的信息。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章