目录

一、Sentinel简介

官方给出的定义: Sentinel是分布式系统的流量防卫兵,可想而知,Sentinel对于分布式系统的重要性。

二、Hystrix VS Sentinel

三、Sentinel下载安装运行

四、Sentinel初始化监控

五、总结


一、Sentinel简介

官方给出的定义: Sentinel是分布式系统的流量防卫兵,可想而知,Sentinel对于分布式系统的重要性。

  • Sentinel 是什么?

Sentinel 是面向云原生微服务的高可用流控防护组件。随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。简单来说,就是之前学习过的 Hystrix的升级版。

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

  • Sentinel 的开源生态图

由上图可以看到,Sentinel 提供开箱即用的与其它开源框架/库的整合模块 。

Sentinel官网地址:https://github.com/alibaba/Sentinel

二、Hystrix VS Sentinel

Hystrix Sentinel
需要程序员手工搭建监控平台 单独一个组件、可以独立出来
没有一套Web界面可以给程序员进行更加细粒度化得配置,比如流控、速率控制、服务熔断、服务降级 直接界面化的细粒度统一配置

总的来说,Sentinel使用起来比较方便快捷,不需要程序员手动搭建监控平台,耦合度降低。

三、Sentinel下载安装运行

【a】下载地址:https://github.com/alibaba/Sentinel/releases

这里我们选择下载:sentinel-dashboard-1.7.0.jar作为本次演示所使用Sentinel版本。

【b】安装Sentinel控制台

Sentinel分为两个部分:

  • 核心库(Java客户端) 不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo/Spring Cloud等框架也有较好的支持。
  • 控制台(Dashboard) 基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

【c】运行命令

运行前提:需要最低Java8 JDK环境OK,8080端口不能被占用。我们都知道8080端口是 Tomcat 默认的端口,不知道为什么,Sentinel 选择了8080作为端口号。

在自己下载的 Sentinel Jar包目录中打开CMD命令行窗口,输入如下命令进行启动:

java -jar sentinel-dashboard-1.7.0.jar

启动完成后,可以看到Sentinel监听的端口是8080。

【d】访问Sentinel管理界面

启动成功之后,我们浏览器访问:http://localhost:8080/#/dashboard/home

我们使用默认的用户名和密码(都是sentinel)进行登录,登录成功之后,如下图所示:

如果能看到此界面,说明我们的Sentinel下载安装配置成功。

四、Sentinel初始化监控

接下来,我们通过一个示例介绍如何将我们微服务与Sentinel监控平台整合起来,实现对微服务应用的监控、限流等操作。

我们新建一个module【springcloudalibaba-sentinel-service8401】,注意需要结合nacos实现服务注册功能,如果没了解过nacos,可以前往https://blog.csdn.net/Weixiaohuai/article/details/108302673 进行学习。

【a】pom.xml添加sentinel依赖:spring-cloud-starter-alibaba-sentinel

<?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"><parent><artifactId>springcloud2020</artifactId><groupId>com.wsh.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloudalibaba-sentinel-service8401</artifactId><dependencies><!--SpringCloud ailibaba sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><dependency><groupId>com.wsh.springcloud</groupId><artifactId>springcloud-api-commons</artifactId><version>${project.version}</version></dependency><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- SpringBoot整合Web组件+actuator --><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-starter-test</artifactId><scope>test</scope></dependency></dependencies>
</project>

【b】aplication.yml:配置sentinel监控平台的地址

server:port: 8401
spring:application:name: springcloudalibaba-sentinel-servicecloud:nacos:discovery:server-addr: localhost:8848   #指定nacos服务器地址sentinel:transport:dashboard: localhost:8080   #指定sentinel控制台的地址tport: 8719  #sentinel api端口, 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
management:endpoints:web:exposure:include: '*'   #配置对外暴露端口

【c】启动类

package com.wsh.springcloud.alibaba;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class SentinelServiceApplicaiton8401 {public static void main(String[] args) {SpringApplication.run(SentinelServiceApplicaiton8401.class, args);}
}

【d】测试Controller

package com.wsh.springcloud.alibaba.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SentinelController {@GetMapping("/sentinel")public String sentinel() {return "hello, sentinel dashboard....";}}

【e】测试

Step1:启动 Nacos 服务器;

Step2:启动 Sentinel Dashboard 服务器;

Step3:运行【springcloudalibaba-sentinel-service8401】启动类,端口为8401;

Step4:然后访问http://localhost:8848/nacos,找到服务管理下的服务列表,能够看到一个服务名为 "springcloudalibaba-sentinel-service" 的应用程序注册至 Nacos 服务管理页面,如下图所示:

Step5:接着访问http://localhost:8080请求,切换到 Sentinel 登录页面进入到 Dashboard 首页。此时 Sentinel 控制台并没有监控任何微服务。

原因是 Sentinel 是采用了懒加载的机制,微服务【springcloudalibaba-sentinel-service8401】目前还没有流量信息可以监控,我们需要手动触发一个请求:http://localhost:8401/sentinel:

然后再次回到Sentinel Dashboard界面, 就可以看到【springcloudalibaba-sentinel-service8401】服务的监控流量信息等,如下图所示: 

通过实时监控,可以看到波峰流量的流动效果,绿线代表通过,蓝线代表拒绝 。

此时 Sentinel 控制台正在监控微服务 【springcloudalibaba-sentinel-service8401】,也就是说Sentinel Dashboard 代替了 Hystrix Dashboard 功能。

五、总结

本篇文章主要总结了Sentinel的主要特征以及通过示例介绍了如何将Sentinel作为我们微服务的流量监控、限流平台。总的来说,比起我们之前学习的Hystrix,简化了使用方式,至少不需要我们自己手动去搭建Hystrix Dashboard监控仪表盘。以上相关项目的代码我已经放在Gitee上,有需要的小伙伴可以去拉取进行学习:https://gitee.com/weixiaohuai/springcloud_Hoxton,由于笔者水平有限,如有不对之处,还请小伙伴们指正,相互学习,一起进步。

参考资料:

https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

https://sentinelguard.io/zh-cn/docs/quick-start.html

下面是笔者总结的关于Spring Cloud Alibaba教程系列文章目录,有需要的小伙伴可以前往学习:

1. Spring Cloud Alibaba入门简介

2. Spring Cloud Alibaba Nacos之服务注册中心

3. Spring Cloud Alibaba Nacos之服务配置中心

4. Spring Cloud Alibaba Nacos集群和持久化配置

5. Spring Cloud Alibaba Sentinel之入门篇

6. Spring Cloud Alibaba Sentinel之流控规则篇

7. Spring Cloud Alibaba Sentinel之服务降级篇

8. Spring Cloud Alibaba Sentinel之热点参数限流篇

9. Spring Cloud Alibaba @SentinelResource配置详解

10. Spring Cloud Alibaba Sentinel之服务熔断篇

11. Spring Cloud Alibaba Sentinel之持久化篇

12. Spring Cloud Alibaba Seata处理分布式事务及案例实战

13. Spring Cloud Alibaba Seata工作原理

Spring Cloud Alibaba Sentinel之入门篇相关推荐

  1. Spring Cloud Alibaba - Sentinel入门案例(四)(热点规则 )

    Spring Cloud Alibaba - Sentinel入门案例(四)(热点规则 ) 回溯 什么是Sentinel? 正文 环境准备 简单使用 复杂使用 注意事项 回溯 什么是Sentinel? ...

  2. Spring Cloud Alibaba | Sentinel: 服务限流高级篇

    Spring Cloud Alibaba | Sentinel: 服务限流高级篇 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明 ...

  3. Spring Cloud Alibaba —— Sentinel 详细使用

    导航 引言 一.Sentinel的两个基本概念 二.流控规则 2.1 基本选项 2.2 高级选项 三.熔断(降级)规则 四.热点规则 五.授权规则(了解) 六.系统规则(了解) 七.自定义异常返回 八 ...

  4. spring cloud Alibaba Sentinel中文文档

    spring cloud Alibaba Sentinel中文文档 github中的中文文档:https://github.com/alibaba/Sentinel/wiki/介绍

  5. 【SpringCloud】Spring cloud Alibaba Sentinel 降级规则

    文章目录 1.概述 2.服务降级 2.1 RT 2.2 异常比例 2.3 异常数 1.概述 本章是接着上一章讲解:[SpringCloud]Spring cloud Alibaba Sentinel ...

  6. 视频教程-①Spring Cloud 第一季(初级入门篇)-Java

    ①Spring Cloud 第一季(初级入门篇) 2011年毕业后在澳门 遊澳集团(UO Group)旗下某IT科技公司从事 android,php,j2ee开发工作,负责 国际短信发送系统.银联支付 ...

  7. spring cloud alibaba sentinel 学习

    sentinel 学习 介绍(官方文档) 流量控制设计理念 熔断降级 Hystrix Sentinel 系统自适应保护 spring cloud alibaba sentinel sentinel.d ...

  8. 【java_wxid项目】【第十六章】【Spring Cloud Alibaba Sentinel集成】

    主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结: 点击:[使用Spring Boot快速构建应用] 点击:[使用Spring Cloud O ...

  9. Spring Cloud Alibaba 新手小白入门

    一,什么是Spring Cloud Alibaba Spring Cloud Alibaba 是一种分布式的解决方案,不是框架,也不是架构,而是一种方案.方案的作用是用来解决分布式服务所遇到的问题. ...

  10. Spring Cloud Alibaba —— Sentinel 入门

    导航 一.什么是Sentinel 1.1 Sentinel 的优点 二.整合 Sentinel 演示 三.Sentinel控制台与微服务通信的原理 四.Sentinel 流控演示 一.什么是Senti ...

最新文章

  1. 简易航空订票系统_基于C++实现简易航空票务,飞机订票系统!
  2. java nep_Java 9 揭秘(1. 入门介绍)
  3. 在div中使用css让文字底部对齐的方法
  4. LeetCode 438. 找到字符串中所有字母异位词(双指针+滑动窗口)
  5. Air780E模块PPP应用开发指南
  6. python中除法运算定律_数学有哪几种简便运算方法?(除了加、乘法交换、结合律,减、除法的性质)...
  7. DirectX11学习笔记01
  8. 病毒周报(100927至101010)
  9. 解决:VideoWriter保存视频无法打开以及保存的视频仅有几KB
  10. 波特率、数据传输速率和带宽的关系(转)
  11. 抽象类和抽象方法的特点
  12. Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services
  13. 多线程处理容器ExecutorCompletionService使用
  14. Turf.js 地理空间分析库简介
  15. KENALLRYLLDKDD|359821-54-8
  16. jboss ejb 3
  17. 用供应链管理思路降低教培产品成本
  18. DC综合报错PG net
  19. 解决Android编译时出现的java.lang.UnsatisfiedLinkError问题!
  20. 【20200403】【每天一道算法题】从两个表中查询符合条件的学生名字,并按数学成绩降序排序

热门文章

  1. C/C++[codeup 1933,1993]图形输出
  2. ML for trading -cs7646-01
  3. Swift 5 Dictionary用法大全
  4. 判断数组中的元素是否连续
  5. linearlayout之margin和peddling
  6. android 标题名字,说说 Android 的 Material Design 设计(五)——可折叠式标题栏
  7. 分类战车SVM (第四话:拉格朗日对偶问题)
  8. Sitadel:一款功能强大的Web应用扫描器
  9. java出租车源码_基于WEB的JAVA出租车打车系统
  10. 连表查询 mysql实例_mysql中各种常见join连表查询实例总结