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


Envoy 全局限速

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

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


构建全局限速服务

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

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

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

  • 一键安装

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

参数说明:

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

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


全局限速配置

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

默认配置内容如下:

domain: limit.common
descriptors:
- key: remote_address
rate_limit:
unit: second
requests_per_unit: 10 # Black list IP
- key: remote_address
value: 50.0.0.5
rate_limit:
unit: second
requests_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 ,实现全局限速功能。

确保 OPEN_LIMIT(是否开启限流) 选项为 YES

LIMIT_DOMAIN(对应限流规则的域名) 与上文中全局限流配置中的 domian 一致。至此,完成了被限速服务一侧的配置。


验证

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

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

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

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

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


总结

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

Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流的更多相关文章

  1. Envoy熔断限流实践(一)基于Rainbond插件实现熔断

    Envoy 可以作为 Sevice Mesh 微服务框架中的代理实现方案,Rainbond 内置的微服务框架同样基于 Envoy 实现.本文所描述的熔断实践基于 Rainbond 特有的插件机制实现. ...

  2. Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashboar ...

  3. 阿里熔断限流Sentinel研究

    1. 阿里熔断限流Sentinel研究 1.1. 功能特点 丰富的应用场景:例如秒杀(即突发流量控制在系统容量可以承受的范围).消息削峰填谷.集群流量控制.实时熔断下游不可用应用等 完备的实时监控:S ...

  4. 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化

    背景 字节跳动开发套件数据集成团队(DTS ,Data Transmission Service)在字节跳动内基于 Flink 实现了流批一体的数据集成服务.其中一个典型场景是 Kafka/ByteM ...

  5. 微服务熔断限流Hystrix之流聚合

    简介 上一篇介绍了 Hystrix Dashboard 监控单体应用的例子,在生产环境中,监控的应用往往是一个集群,我们需要将每个实例的监控信息聚合起来分析,这就用到了 Turbine 工具.Turb ...

  6. Sentinel Dashboard(基于1.8.1)流控规则持久化到Nacos——涉及部分Sentinel Dashboard源码改造

    前言 之前虽然也一直在使用sentinel实现限流熔断功能,但却没有好好整理之前看的源码与资料,今天有时间将之前自己整理过的资料写成一篇博文,或者是是一篇关于Sentinel(基于目前最近版本1.8, ...

  7. express 最佳实践(二):中间件

    express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...

  8. nodejs 实践:express 最佳实践(二) 中间件

    express 最佳实践(二):中间件 第一篇 express 最佳实践(一):项目结构 express 中最重要的就是中间件了,可以说中间件组成了express,中间件就是 express 的核心. ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

随机推荐

  1. ctf之GET

    题目信息如图 启动环境 根据信息只需将参数?what=flag添加到url上即可

  2. 仿真pda,部署时出现问题

    为什么部署到基于 Windows Mobile 的 Pocket PC 设备或模拟器会因共享冲突错误而失败 自己遇到了网上找到的解决方案http://hi.baidu.com/yeflower/blo ...

  3. 时序数据库之InfluxDB的基本操作

    1.进入Influxdb的客户端 [root@activity_sentinel ~]# influx 2.数据库的操作 显示所有的数据库名 > show databases name: dat ...

  4. docker知识点扫盲

    最近给部门同事培训docker相关的东西,把我的培训内容总结下,发到博客园上,和大家一起分享.我的培训思路是这样的 首先讲解docker的安装.然后讲下docker的基本的原理,最后讲下docker的 ...

  5. Spring如何处理线程并发问题?

    在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域,因为Spring对一些Bean中非线程安全状态采用ThreadLoc ...

  6. Vue基于webpack自动装载配置

    Vue的自动装载配置是在 @cli/cli-service 包中,配置文件的目录在 lib/config/  下的文件,css.js 文件是配置样式的处理,先从这里开始了解把 CSS配置流程 对应着这 ...

  7. 在多线程环境下,SimpleDateFormat 是线程安全的吗?

    不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是 线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中 使用,如 将 SimpleDa ...

  8. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

  9. asp.net 可视化操作(二)——Sql数据库连接及简单查询功能的实现

    目录 连接数据库 利用repeater控件实现数据显示 查询功能 页面CSS美化 数据插入.更新-- 连接数据库 添加test.aspx 添加控件SqlDataSource,选择配置数据源 选择新建连 ...

  10. 激光雷达 LOAM 论文 解析

    转自:https://blog.csdn.net/hltt3838/article/details/109261334 固态激光雷达的一段视频:https://v.qq.com/x/page/a078 ...