共计 1903 个字符,预计需要花费 5 分钟才能阅读完成。
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 体系中的配置实际。