Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

Envoy 可以作为 Sevice Mesh 微服务框架中的代理实现方案,Rainbond 内置的微服务框架同样基于 Envoy 实现。本文所描述的全局限速实践也是基于 Envoy 已有的方案所实现。


Envoy 全局限速

尽管分布式熔断器在大多数情况下控制分布式系统中的吞吐量非常有效,但有时它的效果并不是很好,这时候便需要全局限速。最常见的情况是当大量主机转发到少量主机并且平均请求延迟很短时(例如,发送给数据库服务器的连接/请求)。若目标主机成为备机,则下游主机将压垮上游集群。在这种情况下,很难对每个下游主机配置足够严格的熔断器,使得系统可以平稳运行,同时,当系统开始出现故障时,仍然可以防止级联故障。对于这种情况,全局限速是一个很好的解决方案。

Envoy 全局限速方案需要基于一个全局 RLS(rate limit service)服务实现,RLS 被设计为一种为不同类型应用提供不同限速场景的 Go/gRPC 服务。

ratelimit-1


构建全局限速服务

一种开箱即用的全局限速服务已经被纳入 Rainbond 内置的开源应用商店中,用户可以基于以下操作一键安装速率限制服务。

  • 访问内置的开源应用商店

选择左侧的 应用市场 标签页,在页面中切换到 开源应用商店 标签页,搜索关键词 速率限制** 即可找速率限制服务。

ratelimit-2

  • 一键安装

点击速率限制服务右侧的 安装 可以进入安装页面,填写简单的信息之后,点击 确定 即可开始安装,页面自动跳转到拓扑视图。

ratelimit-3

参数说明:

选择项说明
团队名称用户自建的工作空间,以命名空间隔离
集群名称选择速率限制服务被部署到哪一个 K8s 集群
选择应用选择速率限制服务被部署到哪一个应用,应用中包含有若干有关联的组件
应用版本选择速率限制服务的版本,目前版本为 1.4.0

等待几分钟后,速率限制服务就会安装完成,并运行起来。

ratelimit-4


全局限速配置

通过在 Rate-limit-service 组件中编辑配置文件 /data/ratelimit/config/config.yaml,可以配置全局限速标准。

默认配置内容如下:

domain: limit.common
descriptors:- key: remote\_addressrate\_limit:unit: secondrequests\_per\_unit: 10# Black list IP- key: remote\_addressvalue: 50.0.0.5rate\_limit:unit: secondrequests\_per\_unit: 0

在这一段配置中,定义了面向域名 domain 实现每秒允许 10 个请求通过的限速配置。

面向客户端 IP 为 50.0.0.5 的情况,则实现每秒允许 0 个请求通过的限速配置,用户可以理解为黑名单配置。

更多配置示例可以参见 GitHub - envoyproxy/ratelimit: Go/gRPC service designed to enable generic rate limit scenarios from different types of applications.


引用全局限速服务

需要被限速的服务组件需要满足以下条件:

  • 安装并配置 服务综合网络治理插件
  • 依赖 Rate-limit-service

Rainbond 通过插件机制扩展业务的运维能力,通过安装 服务综合网络治理插件 ,可以在被限速业务的网络入口处扩展治理能力。服务综合网络治理插件 本质上扩展了 Envoy 能力,通过调用 Rate-limit-service ,实现全局限速功能。

ratelimit-5

确保 OPEN_LIMIT(是否开启限流) 选项为 YES
LIMIT_DOMAIN(对应限流规则的域名) 与上文中全局限流配置中的 domian 一致。至此,完成了被限速服务一侧的配置。

ratelimit-6


验证

为了验证限速是否生效,引入 Locust 压力测试工具,向被限速业务不断生成访问请求。

ratelimit-10

应用默认全局限速策略后,被限速业务在 40 RPS 的情况下限制了 74% 左右的总访问数。

ratelimit-7

被拒绝的访问,得到了 429 返回码,并提示 Too Many Requests,这是服务限速的标准返回模式。

ratelimit-8

被限速业务所安装的 服务综合网络治理插件 支持动态配置。这意味着在不停止服务的情况下,只需要将 OPEN_LIMIT(是否开启限流) 选项为 NO 并更新配置 ,即可关闭服务限速,访问错误数将下降至 0。

ratelimit-9

全局限速生效于被限速业务的网络入口,这意味着无论请求来自 Rainbond 部署的其他微服务组件,还是来自网关以外的外部访问,其请求都会被限速。


总结

全局限速是一种在突发流量激增场景中保护微服务的有效手段,Rainbond 内置的微服务框架支持符合 RLS 规范的 Envoy 服务限速方案。配置起来很简单,并且支持动态变更,本文中的示例力争以直观的方式为大家展现了全局限速在 Rainbond 体系中的配置实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UV坐标

1.什么是uv坐标 所有的图象文件都是二维的一个平面。水平方向是U,垂直方向是V,通过这个平面的,二维的UV坐标系。我们可以定位图象上的任意一个象素。但是一个问题是如何把这个二维的平面贴到三维的NURBS表面和多边形表面呢? 对于N…

再说WCF Data Contract KnownTypeAttribute

WCF 中的序列化是用DataContractSerializer,所有被[DataContract]和[DataMemeber]标记的类和属性会被DataContractSerializer序列化。在WCF中使用Contract模式来分辨和指定序列化/反序列化的类型,它是通过http://xmlns/Class这样的命名空间来标识这个序列化的对象的…

pyinotify结合ftplib自动上传新建的文件

应用场景:从国内往国外上传,因国际带宽影响,速度很慢,于是做了一个中转FTP,而自动上传需求也就诞生了。代码地址:https://github.com/coocla/linux/blob/master/ftp/autoupload_ftp.py sftp类型&#xff1…

EFCore 的 DbFirst 模式

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

PHP读取sphinx实例

阅读原文:http://yzswyl.cn/blread-1611.html 1.未采用mysql二进制网络协议的代码: //检查sphinx是否能连接,不能重试两次,能则连接,不用mysql协议,仅供参考 function checkSphinxNoMysql() {$flag true;$retries 0;while ( $fl…

linux使用flock解决crontab任务冲突

Linux的crontab最小的间隔是每分钟执行一次,但是如果在这一分钟之内,之前的命令并没有执行完成呢?这样就会产生冲突。接下来我介绍一个解决冲突的办法,那就是linux的flock文件锁. 格式: flock [-sxun][-w #] fd# flock…

golang bufio解析

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

TAppEncoder的main函数

TAppEncoder是编码器工程,完成视频序列的编码。 运行时,首先调用encmain.cpp中的main函数 main函数中完成的工作主要有初始化encoder类,解析cfg文件,然后调用TAppEncTop::encode函数进入下一层,并且对编码过程进行计时…

【mq】从零开始实现 mq-01-生产者、消费者启动

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

远程连接Ubuntu桌面配置

1、打开终端:依次安装 sudo apt-get install xrdpsudo apt-get install vnc4server tightvncserversudo apt-get install xubuntu-desktop 2、安装完:xubuntu-desktop之后,做如下配置以及启动 roothd-slave2:jvm# echo "xfce4-session&q…

【大话云原生】微服务篇-五星级酒店的服务方式

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

从C#到TypeScript - Generator

从C#到TypeScript - Generator 上篇讲了Promise,Promise的执行需要不停的调用then,虽然比callback要好些,但也显得累赘。所以ES6里添加了Generator来做流程控制,可以更直观的执行Promise,但终级方案还是ES7议案中的asy…

C#中检查null的语法糖

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

iOS UItextView监听输入特定字符跳转页面选择选项返回

今天有朋友问我一个需求的实现,于是自己写了一个Demo简单的实现了一下: 需求是: 1>比如: 检测用户输入"A"字符串,跳转页面选择选项,将选择的选项放置textView里,作为当前的输入; 2>不是"A"字符,则正常的textView输入; 3.用户跳转选择了,则将选择的输…

PDCA循环——快速提升软件质量的必备工具

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

oracle 表空间 用户

-- create user mapecun identified by "accp"; --alter user 用户名 quota unlimited on 表空间; --alter user mapecun quota unlimited on USERS; --grant create sequence to mapecun; /** grant create session to mapecun; grant create table to mapecun; g…

如何在Web前端实现CAD图文字全文搜索功能之技术分享

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

基于Java (spring-boot)的仓库管理系统

一、项目介绍 本系统的使用者一共有系统管理员、仓库管理员和普通用户这3种角色: 1.系统管理员:通过登录系统后,可以进行管理员和用户信息的管理、仓库和物品分类的管理,以及操作日志的查询,具有全面的系统管理权限。 2.仓库管理…

基于语义感知SBST的API场景测试智能生成

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

【KMP模板】简单写个KMP~

本来easy的KMP 却一直过不了洛谷的模板题。。。 仔细一看原来在输出next数组时打的回车而不是空格。。。 身败名裂。。。 话说有个sunday貌似一般状况下比KMP快呢。。。去看看2333 #include<cstdio> #include<iostream> #include<cstring> #include<algor…