当前位置: 首页 > news >正文

快速玩转 CNStack 2.0 流量防护

作者:冠钰

云原生下的服务治理

在云原生技术的演进过程中,依托云原生技术能力,形成一个可以向下管理基础设施,向上管理业务应用的技术中台,越来越成为企业期望的云原生技术落地趋势。随着云原生技术中台 CNStack 发布具有革新意义的新一代 2.0 版本,其提供的云原生技术能力不仅可以支撑大规模业务系统,也可以将内部不统一的体系集中管理起来,通过中台化的方式输出云原生技术能力。通过 CNStack 可以低成本实现业务应用的云原生改造,并且 CNStack 云原生平台可以为接入的应用提供业务监控、流量管理、服务开放等多种能力。

深入到微服务体系中,CNStack 平台为复杂的微服务架构系统提供了多方面的服务治理与可视化监控能力,其中通过配合可视化数据监控与限流降级能力,运维人员可以确保业务系统不论是在正常运行时、发布变更过程中、还是流量猛增的状态下,都可以平稳对外提供服务。诸如常见的线上突发流量导致服务流量超过承载能力、服务下游依赖出现不可用导致影响自身服务稳定性等场景,CNStack 提供了全方位的流量防护能力,以流量与容错为切入点,从流量控制、不稳定调用隔离、熔断降级、热点流量防护、系统过载保护等多个维度来帮助保障服务和网关的稳定性,同时提供秒级的流量监控分析功能。

快速玩转流量防护

一键接入防护能力

CNStack 平台提供了非常便捷友好的应用接入方式,通过工作空间下的应用管理能力可以快速创建应用,并且通过应用管理接入的应用均会默认自动接入流量防护能力,可以为应用快速全方位配置流量防护。选择 Java 类型创建的托管应用,会通过挂载探针的方式接入流量防护能力,不需要对业务代码进行任何埋点改造,对业务应用无侵入。

在这里插入图片描述

通过 CNStack 平台接入的应用,可以获得秒级业务监控、限流熔断防护、自定义行为配置等多项能力保障服务稳定运行。相比社区流行的开源 sentinel 等流量防护接入方式,使用 CNStack 平台不需要任何代码改造,也不要添加任何额外的配置,可以一键针对所有接入应用开启防护能力。并且 CNStack 平台原生地为所有接入应用提供了更加强大的流量防护能力,以及稳定的秒级监控系统,可以在平台上一站式完成线上系统维护。

在这里插入图片描述

为了快速玩转 CNStack 流量防护能力,接下来针对一些常见的线上业务场景,介绍如何在 CNStack 中通过配置流量防护规则,保障业务应用在各类不稳定场景下正常提供服务。

场景 1. 线上流量激增

线上流量有很强的随机性与不可预测性,因为重要新闻发布、活动促销等因素都会导致突发的激增流量。然而线上系统的容量是有限的,如果突发增长的流量超出了系统承受能力,会导致大量请求处理堆积,CPU/Load 飙高,请求处理缓慢甚至报错。因此,在系统设计时需要针对这种突发流量设置保护措施,在尽可能处理请求的同时保障服务不被打垮。

例如当下火爆的 ChatGPT,在发布短短数天时间内用户量达到百万级别,注册用户之多甚至导致服务器爆满,国内也有多个团队及公司发布类 ChatGPT 的对话机器人,用户注册同样火爆。设想这样一个场景,企业研发并上线了一个类 ChatGPT 对话机器人业务,业务应用集群部署的规模预期可以承载数万用户同时访问,但随着业务上线受到广泛关注并且涌入大量用户注册使用,线上用户规模迅速激增至十万,在对线上系统不做流量保护的情况下,大量用户的访问请求可能会将系统直接打垮,导致整个服务瘫痪陷入不可用。但是在 CNStack 流量防护场景下使用流控规则,可以预防线上的突发激增流量,保障系统在可承受的范围内稳定运行。创建一条流控规则的配置参数可以参考下图:

在这里插入图片描述

按照上述示例中配置的流控规则,流控策略会将每秒访问 /startTalk 接口的请求次数限制为 600,每秒 600 次以内的请求会全部正常通过,当一秒内的请求量达到 600 后会触发限流,限流后超出 600 个的请求会按照顺序排队等待通过,排队等待时间超出 500ms 后快速失败。最终流控效果如下图所示,当初始流量较低时,所有请求均正常通过,当流量快速增长达到阈值 600 时会触发限流,每秒放行 600 个请求通过,其余请求会被拒绝,保障了阈值范围内流量的正常访问。

在这里插入图片描述

场景 2. 微服务自我保护

微服务架构中不同的服务之间可能会存在依赖关系,例如调用第三方的 API、数据库、远程服务,并由不同服务之间相互调用,组成复杂的调用链路。然而,被依赖服务的稳定性是不能保证的,如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

假设如下场景,微服务通过数据库查询用户信息,所有的查询任务会提交至线程池队列,异步去数据库查询用户信息。由于数据库索引变更或者刷脏页等原因产生了慢 sql,进而使得查询的线程池任务堆积,并最终导致线程池耗尽整个服务不可用。在 CNStack 流量防护场景下,可以针对这样的场景配置熔断规则,对于不稳定的依赖调用进行自动熔断降级,防止下游依赖问题导致自身线程池堆积影响服务稳定性,达到保障整体系统稳定运行的效果。创建一条熔断规则的配置参数可以参考下图:

在这里插入图片描述

按照上述示例中配置的熔断规则,熔断策略会在有请求访问 /getUserInfo 接口时,开启长度为 30 秒的统计窗口,并统计访问该接口请求的响应时间,所有响应时间超过 500ms 的请求会被记录为慢调用请求。当一个 30 秒的统计窗口中,响应时间超过 500ms 的慢调用请求在所有请求中所占的比例超过 80%,熔断策略会立即触发 60 秒的熔断,熔断时间内所有请求都会快速失败。熔断时间到达后,熔断策略会允许新的请求通过,如果新请求正常通过,响应时间未达到慢调用 RT 阈值,将会结束熔断恢复正常访问,否则重新进入熔断状态。

在这里插入图片描述

熔断降级特性基于熔断器模式的思想,在服务出现不稳定因素(如响应时间变长,错误率上升)的时候暂时切断服务的调用,等待一段时间再进行渐进式恢复尝试。一方面防止给不稳定服务“雪上加霜”,另一方面保护服务的调用方不被拖垮。目前支持两种熔断策略:基于响应时间和基于错误,可以有效地针对各种不稳定的场景进行防护。

在这里插入图片描述

场景 3. 细粒度流量控制

线上 Web 流量通常具有非常多的业务属性与参数,如 IP、用户 ID、商品 ID 等,有的业务场景下仅仅从接口纬度配置流控规则是不够的,往往需要与这些业务属性参数结合,针对性的配置流控规则。假设一大波突发请求针对某个热点商品 ID,无法准确预知流量的量级、分布、热点访问情况,大量的请求会击穿缓存,直接打到 DB 层,导致 DB 访问缓慢,挤占正常商品请求的资源池,最后可能会导致系统挂掉。因此针对细粒度的请求属性控制是非常重要的,可以实现热点商品防刷,IP 防刷等一系列更加细粒度的高可用防护策略。

假设某电商平台上架了一批折扣促销商品,其中一款商品被大量用户下单订购,大量的下单修改库存请求打到 DB 层并拖慢整个 DB 访问速度,影响了其余商品的正常下单,导致整个平台购物链路变得不可用。在 CNStack 流量防护场景下使用 web 防护规则,可以针对这样的场景自动分析请求中对应请求属性的值,对每个热点参数限制访问请求次数,防止因为对于热点资源请求数的倾斜,挤占整体正常请求的资源池,达到保障整体系统稳定运行的效果。创建一条 web 防护规则的配置参数可以参考下图:

在这里插入图片描述

按照上述示例中配置的 web 防护规则,web 防护策略会在请求访问 /takeOrder 接口时,自动分析请求中的 URL 参数,针对 URL 参数名称为 keyboard 的请求每秒访问次数限制为 20 个,从业务参数纬度对请求进行针对性的进行拦截。当线上用户对该商品大量下单后,对于 URL 参数匹配到该商品的请求会快速失败被拒绝掉,访问其余商品的请求会正常通过,保障平台整体链路正常下单,达到细粒度流量控制的效果。通过这种细粒度维度的控制,不仅可以在 Web 服务端实现 IP 防刷、热点商品防刷等一系列的细粒度高可用防护策略,也可以实现每个用户每个 API 每分钟限制访问 N 次的具有业务含义的流量管控策略。

在这里插入图片描述

总结

CNStack 2.0 以更全面和更轻量的形态为客户打造了具有竞争力的云原生平台,并且为业务应用托管提供了更加云原生化的方式。具体深入到微服务架构中,CNStack 原生地提供了全方位的流量防护能力,包含流控、熔断降级、web 防护、系统防护等一系列的微服务流量防护手段,可以有效的针对微服务架构,以及中间件依赖,全链路全方位地为服务集群提供可用性保障。对于云原生时代下微服务的架构设计,更加需要面向失败设计的意识,结合 CNStack 流量防护能力,合理地配置流控降级规则,做好事前防护,能够更加稳定的保障线上业务应用运行稳如磐石。

相关文章:

快速玩转 CNStack 2.0 流量防护

作者:冠钰 云原生下的服务治理 在云原生技术的演进过程中,依托云原生技术能力,形成一个可以向下管理基础设施,向上管理业务应用的技术中台,越来越成为企业期望的云原生技术落地趋势。随着云原生技术中台 CNStack 发布…...

你还在用原生 poi 处理 excel?太麻烦了来瞧瞧这个

1、easypoi 前言 Excel 在日常工作中经常被用来存储用例信息,是一种非常便捷的数据存储工具有着众多的优点,我们就不一一介绍了。 今天来讲讲 Java 操作 Excel,总所周知 Java 是世界上最好的语言(不容反驳)&#xff…...

No.027<软考>《(高项)备考大全》【第11章】项目风险管理

【第11章】项目风险管理1 章节相关1.1 考试相关1.2 ITO口诀2 章节概述2.1 风险的含义2.2 风险定义的三个必要条件2.3 项目风险2.4 风险的随机性和相对性2.5 风险的分类2.6 风险成本2.7.1 风险损失有形成本2.7.2 风险损失无形成本2.8 项目风险管理过程3 规划风险管理4 识别风险4…...

mit6.824 lab2c-数据持久化

目录2c简介2b、2a问题测试时间2c简介 简单的说,raft需要将currentTerm、voteFor、entries(当前的所有日志)保存到硬盘进行持久化存储。 保存的方法:在变量改变时,利用persist()中的gob将变量序列化,存储在persister结构体中。&a…...

leaflet使用L.geoJSON加载文件,参数filter的使用方法(127)

第127个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载geojson文件,这里介绍filter的使用方法。filter将用于决定是否包含某个功能的函数。 默认是包括所有特征。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方…...

23年5月高项学习笔记7—— 质量管理

质量通常指产品质量,也包括工作质量(即过程),产品质量是指产品的使用价值,工作质量是产品质量的保证,反映了产品质量直接相关的工作的对产品质量的保证程度。 公差:结果的可接受范围 项目合同…...

学编程需要哪些基础呢?一起来看看吧

众所周知程序员薪酬高、工作环境好,是很多人向往的职业,那么学编程需要什么基础?0基础能学编程吗? 学编程需要什么基础? 1、数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的&…...

PECS In Java泛型类型通配符限定之<? extends T>与<? super T>

泛型类型通配符限定 &#x1f686;PECS | 类型通配符限定如何使用“<? extends T>”和“<? super T>”通配符java源码示例PECS | 类型通配符限定 PECS原则是指在使用泛型时&#xff0c;当我们需要传递一个泛型集合时&#xff0c;如何选择适当的泛型类型通配符来…...

电子招投标系统源码之了解电子招标投标全流程

随着各级政府部门的大力推进&#xff0c;以及国内互联网的建设&#xff0c;电子招投标已经逐渐成为国内主流的招标投标方式&#xff0c;但是依然有很多人对电子招投标的流程不够了解&#xff0c;在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…...

admin Tips

1 获取 当前浏览器 url new URL(window.location.href)...

ToBeWritten之Radare2 使用教程

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…...

实时翻译屏幕插件

程序插件的功能是&#xff1a;点击按钮&#xff0c;将获取屏幕截图&#xff0c;然后翻译输出图片。&#xff08;目前只支持翻译英语&#xff09; 要实现这个功能&#xff0c;我们可以使用Python编程语言&#xff0c;结合一些库来完成。以下是一个简单的实现方案&#xff1a; …...

代码随想录算法训练营第二天| 977,209,59

977.有序数组的平方 * 数组平方后&#xff0c;最大值一定是在两侧 因为可以采用双指针 package algor.trainingcamp;import java.util.Arrays;/*** author lizhe* version 1.0* description: https://leetcode.cn/problems/squares-of-a-sorted-array/** 有序数组的平方* 给…...

echarts 地图板块点击着色,移除着色

//选择省份变色 showProvince(name) { this.oldName name; this.mapChart && this.mapChart.dispatchAction({ type: geoSelect, name }) }, //移除上次点击变色 hideProvince() { this.mapChart && this.mapChart.dispatchAction({ type: geoUnSelect, name:…...

Visual Studio Code (vscode)自定义用户代码段快速打出for循环等

比如fori这样的快捷键就打不出代码块了 自定义用户代码块的方法: 工具栏 > 文件 > 首选项 > 用户代码片段 然后在弹出的搜索框中填写javascript.json 有提示 不用打全就行 (会有javascript选中) 打开配置文件javascript.json 这里面显示的就是编写代码块的例子 "…...

RocketMQ客户端配置详解

文章目录 ClientConfignamesrvAddrinstanceNameclientIPclientCallbackExecutorThreadspollNameServerIntervalheartbeatBrokerIntervalpersistConsumerOffsetIntervalvipChannelEnabledDefaultMQProducerproducerGroupcreateTopicKeydefaultTopicQueueNumssendMsgTimeoutcompr…...

STM32基于STM32CubeMX DMA + EXTI读取DS1307数据

STM32基于STM32CubeMX DMA EXTI读取DS1307数据✨申明&#xff1a;本文章仅发表在CSDN网站&#xff0c;任何其他网站&#xff0c;未注明来源&#xff0c;见此内容均为盗链和爬取&#xff0c;请多多尊重和支持原创!&#x1f341;对于文中所提供的相关资源链接将作不定期更换。&a…...

C#中的枚举器和迭代器

目录 一、可枚举类型和枚举器 1. 枚举器 2. 可枚举类 3. 使用 IEnumerable 和 IEnumerator 案例 4. 泛型枚举接口 二、迭代器 1. 使用迭代器创建枚举器 2. 使用迭代器创建可枚举类 3. 常见的迭代器模式 4. 产生多个枚举类型 5. 将迭代器作为属性 6. 迭代器的实质 一…...

中山大学人工智能学院——考研上岸经验贴

文章目录初试个人基本情况408数学英语政治复试初试 首先是初试成绩&#xff0c;中山大学在2.21号就公布了成绩和排名&#xff0c;这点很不错&#xff0c;有很多学校只公布成绩而没有排名。我的初试总分386&#xff0c;总排名第二&#xff0c;各个科目还是比较平均的&#xff1…...

ThreeJS-圣诞节表白3D贺卡(三十)

素材分享&#xff1a; 链接: https://pan.baidu.com/s/1l0mZWfkiLaXJfdvZ7XoY8w 提取码: i69h 提前预知&#xff1a; 向下滚动鼠标滑轮切换视角 关键代码&#xff1a; //初始化渲染器 const render new THREE.WebGLRenderer({ //设置抗锯齿&#xff0c;防失真 antialis: …...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...