「技术干货」Pontus-用友云限流服务

2023-10-29 11:10

本文主要是介绍「技术干货」Pontus-用友云限流服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在我们讨论系统稳定性的时候,其实核心的关键词就是容量规划,如何做好业务容量与系统性能的评估,是保障系统稳定性的关键。对于系统性能的评估,需要我们具备自动化工具来对系统进行性能压测,探测系统在实际业务场景下的基线数据,这是我们进行系统资源配置的基础,也是在应对流量增长时进行弹性扩容的依据。
在我们做好容量规划的前提下,在实际业务场景下,我们还是不可避免的会面对不确定的系统压力,在面对突发不确定流量的情况下,我们最担心的就是系统的“雪崩”。就像突然爆发的车流让道路交通瘫痪一样,我们的系统在突发流量下,很可能像多米诺骨牌一样,全链路的崩塌。
很多情况下,我们以为我们的系统能够这样:
「技术干货」Pontus-用友云限流服务
但实际上确实这样
「技术干货」Pontus-用友云限流服务
在系统发生雪崩的情况下,我们连基本容量规划的负载都保证不了。如何保障我们的系统能够在复杂多变的业务场景下,能够持续稳定的提供的负载处理能力。这就要求我们按照系统的容量规划,做好系统的限流保护,让超出负载的流量能够快速的failover,将系统无法承载的流量拒之门外,保护我们的系统不会发生雪崩。
如何做限流
在一般的概念中,我们在讨论限流的时候,首先会想到并发的限流,通过限制系统服务调用的并发数来对系统进行保护。这里面其实包含两层概念:线程数和QPS。
线程数是我们系统中实际活跃的处理线程的数目,而QPS是我们系统在一定时间度量范围内的访问速率。一般传统的限流手段是通过对活跃线程数进行控制来进行系统流量的控制。在现今复杂的互联网服务调用体系下,更常用的是QPS进行限制来达到我们系统保护的效果。
考虑我们现今大部分的互联网架构,一般业务系统会由几十甚至上百的微服务构成,一次业务请求的处理,涉及众多的微服务调用。从线程数的角度看,很难去对整体系统的流量做一个衡量。在我们对复杂的业务系统进行性能评估的时候,会使用全链路压测的工具来进行,衡量的目标也是基于系统的QPS.所以使用对QPS进行限制的手段,会更好的对业务系统进行一个负载保护。
在笔者多年稳定性的负责工作中,一般在系统的各个入口处使用QPS作为主要的限流保护手段,线程数限流更多是作为上游系统对下游系统的一种熔断机制来使用,保护上游系统在下游RT变长的情况下,不会被拖垮。
限流的实现
线程数限流
对于线程数的限流,一般通过令牌许可的方式实现,通过预置令牌的数目来控制系统的活跃线程数量,没有获取令牌的线程,快速的失败返回。
「技术干货」Pontus-用友云限流服务
在线程的入口处获取许可令牌,在执行业务逻辑完毕的出口处归还令牌。在实现上一般使用try{……}finally{……}结构实现,在finally中进行令牌的释放。
线程数的限流多数用于简单系统的负载保护,及自我的熔断保护优雅降级,防止依赖的下游服务RT变长的情况下,造成自身系统性能下降。在例如天猫交易系统这种,依赖下游服务(库存、物流、商品、营销等)较多的系统中,一个服务的变慢可能会对处于核心的交易系统造成不良的影响,所以对于在交易系统中,对于依赖的核心服务都是设置一个自我保护的线程数限流值,在下游服务出问题的情况下进行优雅降级。
QPS限流
和线程数不同,QPS限流是对按照一定时间单位内的并发速率来对系统进行限制。QPS与线程数限流相比,最大的好处除了能够按照压测模型的测算进行设置外,在笔者看来,另一个最大的好处就是可以对流量进行削峰,防止流量突刺对系统资源进行穿透影响。
QPS虽然度量单位上是秒,但是一般的实现不会基于秒级进行计数统计来进行限流保护,基于秒级的计数时间窗口过大,不能够消除流量突刺。试想一下在一秒的时间窗口内,流量突发集中在后面10ms,那么在最后的时刻,系统流量会变成我们期望值的100倍,可想而知这个时候对于系统来说是多么可怕的灾难。
「技术干货」Pontus-用友云限流服务
所以在实现上,一般基于时间窗口的分片来进行计数,将整个QPS的计数周期划分为多个时间窗口,将计数值分散在各个时间窗口进行控制和计算,这样能够避免上面提到的流量突刺的出现,能够有效的将流量进行削峰,将流量洪峰削平,放着洪峰对于系统资源的破坏,例如缓存的热点穿透。
在软件的世界里很奇妙,我们会发现很多东西没有银弹,软件的进化过程,就是跟着实际的场景不断的调优。基于时间窗口的QPS限流,虽然能够消除流量突刺的场景,但是不可避免的会造成流量的损耗。试想一下如果流量的分布不均匀,那么在流量少的时间窗口下,没有到达的流量实际是损耗的。
在实际场景中,例如天猫双十一零点高峰,流量实际在每个时间窗口都是处于极度饱和的状态,这个时候简单的窗口分片就能达到很好的限流效果。
在流量分布不均匀的情况下,我们可以实现动态的时间窗口分片,将不饱和的时间窗口流量在不超过系统负荷的情况下累加到下一时间窗口,这样可以降低流量的损耗。
Pontus-用友云限流服务
用友云iuap平台为了保证客户云端系统服务的稳定性,结合微服务平台的建设,推出了稳定服务套件之一的限流服务Pontus,帮助用友云客户构建稳定性的系统防护体系。
Pontus支持QPS和线程限流两种方式,结合用友云微服务治理平台,将限流服务通过中间件统一服务的方式,内置在应用的微服务框架体系中,对微服务接口提供统一的限流一级防护。
采用动态滑动窗口机制,能够对流量峰值进行削峰,并且最大程度的降低流量损耗。触发限流及后端接口响应超时时,自动触发接口降级。
pontus服务与用友云开发者中心无缝集成,包含在用友云中间件统一SDK中,用户应用在开发者中心部署之后,能够自动发现服务接口,并对相应服务接口进行限流配置。
源于电商大促多年实践场景,Pontus能够为云应用提供稳定一致的流量防护,进行流量削峰和系统熔断,为云应用的稳定性保驾护航。

转载于:https://blog.51cto.com/14084875/2334683

这篇关于「技术干货」Pontus-用友云限流服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/300239

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (