【SpringCloud】使用SpringCloud Alibaba之Sentinel实现微服务的限流、降级、熔断

Sentinel架构篇 - 熔断降级 本文解析Sentinel的熔断降级。 阅读详情

一、Sentinel 介绍

1.1 什么是 Sentinel

  • Sentinel 对开发者的大概印象应该是阿里开源的一个SpringCloud 组件,用来做微服务的限流、降级和熔断。这也是本文从概念和实战上主要的展开点。
  • 官方点的话说就是: Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。

在这里插入图片描述

1.2 Sentinel 特性

官方总结了 Sentinel 组件的4大特性,概括了 Sentinel 组件提供的能力:

  • 丰富的应用场景:阿里巴巴 10 年双十一积累的丰富流量场景,包括秒杀、双十一零点持续洪峰、热点商品探测、预热、消息队列削峰填谷等多样化的场景;
  • 易于使用,快速接入:简单易用,开源生态广泛,针对 Dubbo、Spring Cloud、gRPC、Zuul、Reactor、Quarkus 等框架只需要引入适配模块即可快速接入;
  • 多样化的流量控制:资源粒度、调用关系、指标类型、控制效果等多维度的流量控制;
  • 可视化的监控和规则管理:简单易用的 Sentinel 控制台;

Sentinel特性概览

1.3 限流、降级与熔断的区别

  • 限流是在流量进入到系统内之前,先进行一个统计计算,如果已经超过设定的阈值,则直接拒绝当前的请求,那么当前流量不会进入服务的内部;
  • 降级指的是如果在执行一个请求的调用时,如果发生了异常,那么请求就会继续执行指定的降级逻辑。此时,请求已经进入到了服务内部;
  • 熔断是对一个时间窗口内处理的请求的结果进行统计后,如果这批请求的错误率达到了阈值(或者慢接口比例达到了阈值),则会触发一个指定时间段长度的熔断;
    服务的限流、降级、熔断这三板斧的结合在很大程度上抑制了服务雪崩的发生。

二、实战演示

2.1 下载启动 Sentinel 控制台

我们到 Sentinel 官方的 Github 上下载 sentinel-dashboard 服务的 Jar 包,Sentinel 服务的限流、熔断等规则的下发就是通过 sentinel-dashboard 来进行的,下载链接。当前的最新版本是1.8.7。

在这里插入图片描述
sentinel-dashboard 的 Jar 包下载完毕后,把它放在合适的目录,使用如下命令启动Jar包:

java -Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.7.jar

然后在浏览器的地址框内输入 http://localhost:8888/ 会进入 Sentinel 控制台的登陆界面:

在这里插入图片描述

默认的用户名和密码都是 sentinel,输入后即可进入 Sentinel 控制台主界面:

在这里插入图片描述

2.2 后端微服务接入 Sentinel 控制台

2.2.1 引入 Sentinel 依赖

在我们需要使用 Sentinel 组件的后端微服务中先引入 Sentinel 的依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2.2.2 添加 Sentinel 连接配置

如果要想将后端微服务对接到 Sentinel 控制台,除了要添加 Sentinel 依赖以外,还需要在配置文件中添加上 Sentinel 控制台相关的配置信息,主要是为了配置Sentinel 控制台的访问地址,此处配置的本地访问端口号为8888。

spring:
  cloud:
    sentinel:
      transport:
        # sentinel 的默认端口号为 8719
        port: 8719
        # dashboard地址
        dashboard: localhost:8888

2.3 使用 Sentinel 进行流控(含限流)

2.3.1 对接口添加 Sentinel 资源标记

对于 Sentinel 组件来说,一切的 API 接口都是资源,Sentinel 的职责就是在流量到来时,根据这些 Sentinel 资源的负载情况对流量进行管理。所以,我们需要先对代码中定义的 API 接口打上 Sentinel 资源的标记。Sentinel 是通过 @SentinelResource 注解对 API 接口打标记的。下面以2个获取商品的接口为例演示下用法。

	@GetMapping("/getGoods")
    @SentinelResource(value = "getGoods")
    public CoinGoodsInfo getGoods(@RequestParam("id") Long id){
        log.info("Get goods, id={}", id);
        return coinGoodsService.getGoodsInfo(id);
    }

    // 批量获取
    @GetMapping("/getBatch")
    @SentinelResource(value = "getGoodsInBatch")
    public Map<Long, CoinGoodsInfo> getGoodsInBatch(@RequestParam("ids") Collection<Long> ids) {
        log.info("getGoodsInBatch: {}", JSON.toJSONString(ids));
        return coinGoodsService.getGoodsInfoMap(ids);
    }
2.3.2 Sentinel 的流控模式

在使用 Sentinel 演示具体的流控之前,先简单的介绍下 Sentinel 的流控。Sentinel 的进行流量控制时分为3种模式:直接流控,关联流控,链路流控。

  • 直接流控:进行流量管理时直接作用于目标 Sentinel 资源,如果当前的访问压力大于预先设定的阈值,直接拦截当前的请求;
  • 关联流控:在关联流控中,Sentinel 资源中存在一个优先级的概念,同时他们会共享某个资源,比如都依赖某个接口或者共享一个数据库连接池。当高优先级的 Sentinel 资源的访问流量达到了设定阈值时,会对低优先级的 Sentinel 资源接口进行限流。
  • 链路流控:当指定链路上的访问量大于某个阈值时,对当前资源进行限流。
2.3.3 Sentinel 的流控效果

Sentinel 目前提供了 3 种流控效果,分别是:快速失败,Warm-up,排队等待。

  • 快速失败:当某个 Sentinel 资源的访问流量超过了设定的阈值, 后面的请求会直接被拦截住;
  • Warm-up:该模式下系统承载的流量有一个缓慢拉高的过程,而不是一开始就将系统承载的流量设置为最高可承受的流量。假设我们设置的系统QPS阈值是100,预热时间为5秒,那么 Sentinel 会在 5 秒内逐渐的将限流阈值从33 拉高到 100。因为 Sentinel 内部有一个冷加载因子,取值为3。100/3=33。因此初始的限流阈值为33。
  • 排队等待:如果当前的流量已经超过了接口设定的阈值,超出部分的请求会被放到队列中,等到系统的请求量下来,再将请求交给系统处理。同时,注意被放入到队列的请求有一个超时等待时间,如果被放入到队列的请求在队列中滞留的时间过长,该请求会被丢弃。
2.3.4 直接流控演示

首先,我们需要在代码中先指定请求被限流时,要执行的限流逻辑。该限流部分的逻辑指定,需要我们先定义对应的降级方法,然后在 @SentinelResource 注解中的 blockHandler 属性绑定降级方法的方法名即可。

	@GetMapping("/getGoods")
    @SentinelResource(value = "getGoods", blockHandler = "getGoods_block")
    public CoinGoodsInfo getGoods(@RequestParam("id") Long id){
        log.info("Get goods, id={}", id);
        return coinGoodsService.getGoodsInfo(id);
    }
    
	public CoinGoodsInfo getGoods_block(Long id){
        log.info("Calling limited, id={}", id);
        return null;
    }

    // 批量获取
    @GetMapping("/getBatch")
    @SentinelResource(value = "getGoodsInBatch",
            fallback = "getGoodsInBatch_fallback",
            blockHandler = "getGoodsInBatch_block")
    public Map<Long, CoinGoodsInfo> getGoodsInBatch(@RequestParam("ids") Collection<Long> ids) {
        log.info("getGoodsInBatch: {}", JSON.toJSONString(ids));
        return coinGoodsService.getGoodsInfoMap(ids);
    }

如上的 /getGoods 接口,该接口因限流调用失败时,会执行 blockHandler 属性绑定的 getGoods_block 方法,返回 null。

下面我们在代码中演示下直接流控。直接流控的配置如下图:

在这里插入图片描述

资源名:就是我们使用 @SentinelResource 注解时,value 属性指定的值。
阈值类型:选QPS,表示请求的QPS(Query per second),这里我们设置的阈值为1。
流控模式:选“直接”
流控效果:可以选“快速失败”,也可以选择其他选项,“快速失败”简单直接,用postman 等工具测试时可以直接看到效果。

点击“新增”,这条流控规则就新增完毕了。

在 postman 中调用相应的接口,点的快一点,保证1秒内超过1次,可以看到打印的日志,确实是走了限流逻辑的。

在这里插入图片描述

2.3.5 关联流控演示

接下来我们还是利用在 2.3.4 中的代码实现。假设2个接口/getGoods与/getBatch 存在资源竞争关系,然后我们在 Sentinel 控制台中配置关联流控的规则,其具体的配置项如下图:

在这里插入图片描述
这里设置流控规则时,设置的资源名为 getGoodsInBatch ,关联到的sentinel资源是getGoods ,设置的 QPS=1。意思就是 Sentinel 资源 getGoods (/getGoods 接口)的访问QPS为1时,就会触发对 Sentinel 资源getGoodsInBatch (/getBatch 接口)的限流。

2.3.6 根据调用源对接口限流

背景:这种情况就是,假设有3个微服务A,B,C,微服务A,B 都依赖微服务C,都需要调用微服务C 的接口。而且对于A, B 这2个微服务来说,A 是核心业务,B 是边缘业务。现在我们在使用Sentinel 对微服务 C 中的某接口进行限流时,需要识别这个请求是来自微服务A 还是 B。在业务的高峰期,我们需要对来自微服务B 的请求进行限流。

核心思路主要分为3个步骤:

  1. 服务消费者在下发请求时,对请求打标,表明请求来源。在微服务内使用拦截器,对所有的请求加上统一的header即可;
  2. 服务提供者在处理请求是需要处理Request,识别Request 来源。实现 Sentinel 提供的 RequestOriginParser 接口,获取Request中的请求源标记;
  3. 在下发限流规则时需要指定请求源服务注册发现时上报的服务名,并配置其它的限流规则;

下面我们来一一实现。

1. 给请求打标

因为我微服务间调用使用的是 Feign,所以这里我实现 Feign 的 RequestInterceptor 接口完成一个拦截器,为所有的请求统一加上 Header。

@Configuration
public class SentinelInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        template.header("SentinelSource", "coin-customer-src");
    }
}
2. 解析请求源

实现 Sentinel 提供的 RequestOriginParser 接口,获取Request中的请求源标记。

@Component
public class SentinelOriginParser implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest request) {
        return request.getHeader("SentinelSource");
    }
}
3. 下发限流规则

下发新的限流规则,针对来源不再是default 变成了 microservice-A ,这意味着当请求流量达到设定阈值时,限流的拦截只对该微服务生效。
在这里插入图片描述

2.4 使用 Sentinel 实现降级、熔断

2.4.1 Sentinel 中的熔断策略

Sentinel 中有3种熔断策略指标:慢调用比例,异常比例,异常数。

  1. 慢调用比例:该场景下会统计每个调用的RT(Response Time),是否会超过设定的阈值,在统计的时间窗口内如果慢调用的比例超过了阈值,则会进行熔断;
  2. 异常比例:选择了异常比例策略,Sentinel 会统计每个接口调用发生异常的情况,如果,如果调用发生异常的情况占总调用的比例超过设定阈值,就会触发熔断;
  3. 异常数:就是会计算当前时间窗口内所有接口调用的异常情况,如果调用失败次数超过了设定的阈值,就会触发熔断;
2.4.2 实现降级、熔断
1. 核心思路

因为我们在选定了熔断策略之后,当服务触发了熔断,熔断期间,接口就会走降级策略。所以,首先,需要在代码中实现降级逻辑;其次,需要在 Sentinel 控制台添加熔断策略。

2. 降级实现

接下来我们在2个接口的 @SentinelResource 注解中,使用 fallback 属性绑定我们实现了降级逻辑的降级方法。

	@GetMapping("/getGoods")
    @SentinelResource(value = "getGoods", fallback="getGoods_fallback", blockHandler = "getGoods_block")
    public CoinGoodsInfo getGoods(@RequestParam("id") Long id){
        log.info("Get goods, id={}", id);
        return coinGoodsService.getGoodsInfo(id);
    }
    
	public CoinGoodsInfo getGoods_block(Long id){
        log.info("Calling limited, id={}", id);
        return null;
    }
    
	public CoinGoodsInfo getGoods_fallback(Long id) {
        log.info("Calling fallback, id={}", id);
        return null;
    }

    // 批量
    @GetMapping("/getBatch")
    @SentinelResource(value = "getGoodsInBatch",
            fallback = "getGoodsInBatch_fallback",
            blockHandler = "getGoodsInBatch_block")
    public Map<Long, CoinGoodsInfo> getGoodsInBatch(@RequestParam("ids") Collection<Long> ids) {
        log.info("getGoodsInBatch: {}", JSON.toJSONString(ids));
        return coinGoodsService.getGoodsInfoMap(ids);
    }

	public Map<Long, CoinGoodsInfo> getGoodsInBatch_fallback(Collection<Long> ids) {
        log.info("Calling fallback, ids={}", ids.toString());
        return new HashMap<>();
    }

    public Map<Long, CoinGoodsInfo> getGoodsInBatch_block(
            Collection<Long> ids, BlockException exception) {
        log.info("calling is limited, ids: {}, exception: ", ids, exception);
        return new HashMap<>();
    }
3. 熔断策略

我们在 Sentinel 控制台中添加熔断规则如下,对 Sentinel 资源 getGoods 添加熔断规则,熔断策略选择“异常比例”,设置的比例阈值为 0.4 ,熔断时长为10秒,最小请求数为50,统计时长为10000毫秒。结合起来就是在 10000毫秒的时间窗口内统计所有的请求,当时间窗内的请求数大于50个,且请求失败率大于40%时,会触发一个10秒的熔断。 熔断期间会执行我们代码中定义的降级逻辑。

在这里插入图片描述

启动服务,调用/getGoods 接口,可以看到确实是走了降级逻辑的。

在这里插入图片描述

Spring Cloud之Sentinel框架 前面介绍了Spring Cloud框架集中的Dubbo和Seata框架,本文将介绍通过Sentinel框架保障服务器运行的稳定性。包括流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。更多内容参考官方文档。 阅读详情

相关推荐

一文带你了解SpringCloud的限流、降级和熔断——Hystrix!

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 一、前言 分布式系统环境中,服务间类似依赖非常常见,一个业余调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象称为雪崩效应。 二、雪崩效应 ...

weixin_41663412的博客 1162

SpringCloud 集成Sentinel

一、Seninel简介 二、Sentinel和Hystrix的区别

qq_50909707的博客 1万+

移动机器人底盘-四轮差速模型(四轮独立)

对于底盘的前轮和后轮来说,其速度是同步的,那么在理想条件下,可以将底盘运动视为以ICR为圆心做圆周运动,对于四个轮子来说,圆周运动的角速度是一致的,圆周运动圆心ICR始终位于底盘几何中心COG的y轴延长线上,ICR与COG之间的距离。有关,整个底盘的速度位于速度瞬心COM处,用。四轮差速底盘设定左轮、右轮得速度分别为。圆周运动的角速度公式如式1所示。受约束,约束与圆周运动的角速度。合成,设四个轮子的速度分别为。,设左轮和右轮之间的轴距为。为圆周运动角速度,线速度为。,其均由预设目标速度。

Moresweet 猫甜 1万+

SpringCloud-Sentinel详细使用教程

本文从入门到持久化的三个扩展点详细讲述了Sentinel的详细使用过程。

落雪 1万+

零代码做游戏:AI辅助开发HTML5网页小游戏从创意到发布全流程

在软件开发领域,自然语言编程正成为一种新兴的人机协作方式,而AI辅助开发则是其最典型的落地形态。它让开发者无需精通语法,只需用清晰的语言描述游戏规则与交互逻辑,AI便能自动生成可运行的代码。这种模式大幅降低了编程门槛,尤其适合快速验证创意、制作原型。对于HTML5网页游戏而言,借助AI生成单个HTML文件,配合在线运行环境,即可在浏览器中直接试玩、迭代与分享。无论是产品经理验证玩法、运营人员制作互动小游戏,还是教育者设计课堂闯关,都能通过自然语言描述需求,让AI完成代码实现与报错修复。本文完整记录了一个“接

weixin_31497453的博客 326

编译原理实验二:LL(1)分析法(附C/C++完整代码)

本文讲述了LL(1)文法的原理及如何用C语言实现。并在给出的代码中实现了消除文法的左递归,First集,Follow集,select集的输出,构造预测分析表并输出,和对任意输入字符串的分析。程序总流程为:从文件读取文法 -> 输出文法信息 -> 消除左递归并输出消除后的文法 -> 计算First集并输出 -> 计算Follow集并输出 ->计算select集并输出 -> 判断是否是LL(1)文法 -> 构造预测分析表并输出 ->手动输入要分析的字符串 -> 输出分析过程和结果读取文件。

W_Wmwmwm的博客 6192

sentinel的使用以及springcloud整合sentinel

首先我们要知道的是一个微服务项目如果一个服务挂载掉了,会出现什么情况,是不是回出现一个服务挂载而另一个服务还需要一直调用此服务就很容易导致和它有关联的服务不能被访问到,这也就是我们常常在生活中说到的雪崩效应(因为在雪崩发生时,雪层的一小部分开始滑动,随后带动更多的雪层滑动,最终形成大规模的雪崩),所以如果我们不想到措施可以把这一部分的雪层隔离出去或者进行其他的处理就会导致大规模的系统崩溃。大家可以根据上面的图片理解一下,服务雪崩是一个什么样子的过程。

qq_62325622的博客 1578

黏菌优化算法(SMA)详解:从生物智能到优化引擎

黏菌优化算法(SMA)是一种新型生物启发式优化算法,模拟多头绒泡菌的智能觅食行为。该算法包含接近食物、包围食物和抓取食物三个阶段,通过数学模型将生物行为转化为优化过程。SMA采用权重自适应机制和参数振荡模型实现探索与开发的平衡,具有参数简单、收敛性好等优势。算法可通过MATLAB/Python实现,并应用于函数优化、工程设计和神经网络训练等领域。研究表明SMA在求解复杂优化问题时表现优异,未来可通过混沌增强、混合策略等方式进一步提升性能。

qq_42212808的博客 659

SpringCloud Alibaba

return "按资源名称SentinelResource限流测试OK";return "服务不可用@SentinelResource启动"+"\t"+"o(╥﹏╥)o";这是Sentinel提供的注解,主要用于配置资源限流、降级、熔断等策略。:资源名称,用于标识当前方法的限流资源。Sentinel 使用这个资源名称来监控和控制该方法的流量。:指定一个方法来处理限流(或熔断)触发时的异常。具体来说,当资源超出流量限制时,Sentinel 会调用这个方法来处理业务逻辑。

qq_67177419的博客 943

大疆前端开发面试题及参考答案(4万字长文)

在前端项目中,难点和性能优化的挑战无处不在。比如在处理复杂交互界面时,实现流畅的动画效果和实时反馈就是一大难点。当界面中有大量元素需要同时进行交互和动态更新,像电商平台的商品筛选和排序功能,不仅要保证操作的即时响应,还要确保界面在各种设备和网络环境下的稳定性,这就需要对事件处理、DOM 操作和数据更新机制有深入理解。在性能优化方面,首屏加载速度是常见的难点。当页面包含大量图片、脚本和样式文件时,如何合理地进行资源压缩、合并与缓存,以减少加载时间,是需要精心考虑的。

大模型大数据攻城狮的专栏 1151

注意力机制模块:CA(坐标注意力)二次创新:融合深度可分离卷积,打造 CADS 模块

本文提出CADS模块,将坐标注意力(CA)与深度可分离卷积(DSC)深度融合,优化移动端AI部署效率。通过重构CA的计算范式,用深度卷积替代传统1×1卷积,在保持精度的同时显著降低计算开销。文章深入分析了CA的计算瓶颈和DSC的实际效率问题,详细阐述了CADS的设计原理与PyTorch实现,并提供了多组性能对比数据。该模块可直接应用于YOLO、UNet等主流模型,为移动端AI部署提供高效解决方案。

ZXSXJ的博客 96

最新的SpringCloud(H版&Alibaba)技术(19高级部分,熔断与限流【Sentinel】)

十九、SpringCloud Alibaba Sentinel实现熔断与限流 二十、SpringCloud Alibaba Seata处理分布式事务 二十一、大厂面试题第三季 下一篇笔记:待更新 学习视频(p111-p):https://www.bilibili.com/video/BV18E411x7eT?p=111 ...

小楊同学的笔记本 5132

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1651

Spring-Cloud-Alibaba-Sentinel 高并发方法论,Spring-Boot微服务体系整合Sentinel进行熔断降级限流

Spring-Cloud-Alibaba-Sentinel 高并发方法论,Spring-Boot微服务体系整合Sentinel进行熔断降级限流

qq_41625866的博客 401

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3172

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SpringCloud学习笔记(十)----服务熔断与限流 Sentinel

SpringCloud Alibaba Sentinel实现熔断与限流 Sentinel概述 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel下载地址 安装Sentinel控制台 Sentinel组件由俩部分组成:后台和前台8080。 核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同

qq_43404873的博客 2709

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

微服务SpringCloud开弓之SpringCloud Alibaba Sentinel实现熔断与限流「十四」

文章目录SpringCloud Alibaba Sentinel实现熔断与限流1、Sentinel2、安装Sentinel控制台3、初始化演示工程4、流控规则5、降级规则6、热点key限流1、基本介绍2、参数例外项7、系统规则8、@SentinelResource1、按资源名称限流+后续处理2、按照Url地址限流+后续处理3、客户自定义限流处理逻辑4、更多注解属性说明9、服务熔断功能Ribbon系列Feign系列熔断框架比较10、规则持久化 SpringCloud Alibaba Sentinel实现熔断与

python_start的博客 869

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SpringCloud Alibaba服务熔断降级与限流之【Sentinel】

Sentinel: 分布式系统的流量防卫兵 下载sentinel-dashboard-1.7.2.jar,地址:https://github.com/alibaba/Sentinel/tags 运行jar包,访问localhost:8080,来到sentinel界面,账号密码都是sentinel 微服务整合sentinel 建模块cloudalibaba-sentinel-service8401 导依赖 <!-- SpringCloud ailibaba nacos--> <depen

K_kzj_K的博客 901

SpringCloud Alibaba-Sentinel实现熔断与限流

Sentinel是阿里巴巴开源的分布式流量治理组件,用于解决服务雪崩、限流、熔断等问题。支持多语言异构架构,提供实时监控、开源生态整合(如SpringCloud、Dubbo)和SPI扩展机制。核心功能包括流量控制(QPS/线程数限流)、熔断降级(慢调用比例、异常比例)、热点参数限流和授权规则(白名单/黑名单)。

zl979899的博客 801

SpringCloud学习之(十九)SpringCloud Alibaba Sentinel实现熔断与限流

文章目录(十九)SpringCloud Alibaba Sentinel实现熔断与限流1、Sentinel1.1 官网1.2 是什么1.3 去哪下1.4 能干嘛1.5 怎么玩2、安装Sentinel控制台2.1 sentinel组件由2部分组成:2.2 安装步骤3、初始化演示工程3.1 启动Nacos8848成功3.2 Module3.2.1 新建model3.2.2 POM3.2.3 YML3.2.4 主启动类3.2.5 业务类3.2.6 启动Sentinel80803.2.7 启动微服务84014、流控

lisa2017_的博客 368

SpringCloudAlibaba-sentinel

sentinel

f552126506的博客 1392

14、SpringCloud Alibaba第十四章,升级篇,服务降级、熔断和限流Sentinel

SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel 一、Sentinel概述 1、Sentinel是什么 随着...

倚书依杖听河流博客 268

SpringCloud Alibaba Sentinel实现熔断与限流-微服务(二十九)

Sentinel 官网 中文 是什么 一句话解释,之前我们讲解过的Hystrix 去哪下 github 能干嘛 怎么玩 https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_sentinel 服务使用中的各种问题 服务雪崩 服务降级 服务熔断 服务限流 安装Sentinel控制台 sentinel组件由2部分构成

weixin_44681349的博客 150

springCloud Alibaba实战四之Sentinel(控制台及限流)

Spring Cloud Alibaba Sentinel 上一篇博客我已经用到Sentinel与OpenFeign结合完成服务降级功能, 只是单纯的使用了他的降级供能,并没有介绍Sentinel详细内容,到底还有什么其他功能, 接下来正式介绍Sentinel: sentinel官方文档 Sentinel 介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切...

weixin_43606738的博客 1140

SpringCloud Alibaba微服务实战五 - 限流熔断

导读:本篇作为SpringCloud Alibaba微服务实战系列的第五篇,主要内容是使用Sentinel给微服务加上限流熔断功能,防止异常情况拖垮应用服务。系列文章,欢迎持续关注。 简介 Sentinel是面向分布式服务框架的轻量级流量控制框架,主要以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度来维护系统的稳定性。 在SpringCloud体系中,sentinel主要是为了替换原Hystrix的功能,与Hystrix相比,sentinel的隔离级别更加精细,提供的Dashboard可以在

AlbenXie的博客 474

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

目录 Spring Cloud Alibaba | Sentinel: 服务限流高级篇 1. 熔断降级 1.1 降级策略 2. 热点参数限流 2.1 项目依赖 2.2 热点参数规则 3. 系统自适应限流 ...

weixin_30652271的博客 147
上一篇: 【SpringCloud】使用OpenFeign进行微服务化改造
下一篇: 【SpringCloud】使用Seata实现分布式事务
伏游
博客等级 码龄9年 369粉丝 37原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值