首页 > 其他分享 >envoy&istio 对接ratelimit 实现限流之ratelimit简介

envoy&istio 对接ratelimit 实现限流之ratelimit简介

时间:2024-03-01 16:23:02浏览次数:19  
标签:envoy istio ratelimit 限流 规则 optional

23年的时候公司因调用企业微信接口超限,导致业务问题。架构组经过协商后决定上一个限流服务。

限流这块自然而然就落到我负责的网关这块,小公司我一个人负责api网关这块。

之前基于istio 给公司上线了一个本地的限流(我给公司开发了一个devops管理工具,可以用来管理k8s、istio、jenkins、gitlab等),但是这个功能不能满足复杂规则的要求,所以找到了ratelimit项目。

项目地址:https://github.com/envoyproxy/ratelimit.git

限流流程如下图所示

 

配置说明

domain: <unique domain ID>
descriptors:
- key: <rule key: required>
  value: <rule value: optional>
  rate_limit: (optional block)
    name: (optional)
    replaces: (optional)
    - name: (optional)
    unit: <see below: required>
    requests_per_unit: <see below: required>
  shadow_mode: (optional)
  detailed_metric: (optional)   # 控制平面不做支持 
  descriptors: (optional block)

注释里的 控制平面是我基于go-control-palne SDK开发 一个envoy配置管理工具 忽略即可,detailed_metric 这个配置项在我开发控制平面时还没有添加到go-control-plane SDK中 。

domain: 必填,它与envoy上的ratelimitfilter做唯一匹配 descriptors: 描述具体配置

key: 规则键,envoy网关上的路由限流触发规则要与之匹配

value: 具体的值 例如请求头中的值 rate_limit: 速率规则,

unit: 单位, 秒、分钟、小时、天

requests_per_unit: 次数

replaces: 替换,该限流规则替换指定限流规则,使其被替换规则无效,仅本规则生效

shadow_mode: 阴影模式,即始终返回“OK” ,但会记录

detailed_metric:控制平面暂不支持

descriptors: 子项,配置复杂规则

 

标签:envoy,istio,ratelimit,限流,规则,optional
From: https://www.cnblogs.com/pjjwpc/p/18047351

相关文章

  • Sentinel系列之(六)热点参数限流规则
    热点参数限流规则......
  • 面试官:限流的实现方式有哪些?
    限流是指在各种应用场景中,通过技术和策略手段对数据流量、请求频率或资源消耗进行有计划的限制,以避免系统负载过高、性能下降甚至崩溃的情况发生。限流的目标在于维护系统的稳定性和可用性,并确保服务质量。使用限流的好处有以下几个:保护系统稳定性:过多的并发请求可能导致服务......
  • OpenResty中如何实现,按QPS、时间范围、来源IP进行限流
    OpenResty是一个基于Nginx与Lua的高性能Web平台,它通过LuaJIT在Nginx中运行高效的Lua脚本和模块,可以用来处理复杂的网络请求,并且支持各种流量控制和限制的功能。近期研究在OpenResty中如何实现,按QPS、时间范围、来源IP进行限流,以及动态更新限流策略。今天将实现方案分享给大家。......
  • 9.Polly在NET中的使用,重试、熔断、超时、降级、限流简单用法
    Polly是一个.NET弹性和瞬态故障处理库,允许开发人员以Fluent和线程安全的方式来实现重试、断路、超时、隔离、限流和降级策略。文档: https://gitee.com/hubo/Polly重试(Retry)出现故障自动重试,这个是很常见的场景,如:当发生请求异常、网络错误、服务暂时不可用时,就应该重试。......
  • Nginx 配置限流
    Nginx配置限流1概述2限制请求速率2.1、正常限流2.2、处理突发流量2.3、设置白名单2.4、limit_req重复3限制连接数4上传/下载速率限制4.1、limit_rate4.2、limit_rate_after4.3、proxy_limit_rate4.4、动态限速4.2、基于变量动态限速1概述限流(RateLimitt......
  • 限流算法
    固定时间窗比如1秒钟限制访问100次,则用1秒作为时间窗,用个计数器,下个时间窗到了就把计数器置0;实现方式可以用一个线程定时1秒钟刷一次,但在某些系统中,可能会有很多个qps拦截器,这样会导致线程数很多,所以也可以改成记录上次时间窗的时间点,每次计数器+1之前算一下时间窗是否超过1秒了......
  • Java 21 虚拟线程如何限流控制吞吐量
    虚拟线程(VirtualThreads)是Java21所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性。但是,随着这些变化而来的是如何最好地管理此吞吐量的问题。本文,就让我们看一下开发人员在使用虚拟线程时,应该如何管理吞吐量。在大多数情况下,开发人员不需要自己创建虚拟......
  • 使用Redis的ZSet集合实现接口限流
    背景一般在设计后端接口的时候,一般都会预估接口能承受的最大流量是多少。那么如果瞬时流量超过了接口的承载力,我们就需要考虑接口做限流处理了。限流实际上是指限制系统的输入流量和输出流量已保持系统的稳定性,防止极端条件下系统因为突然的请求激增而造成的崩溃。思考我们知......
  • nginx做白名单和限流
    ​ 在我们生产环境中使用到了地图服务,每个月有免费请求次数,近一个月请求次数突然暴涨,导致直接开启付费模式,一个月上百刀的花销着实难扛,根据实际我们的业务使用情况,远达不到付费标准,故考虑做白名单和限流措施,基于以上情况并遇到春节急需快速处理,所以选择了最简单方便的方式,通过ngin......
  • kube-apiserver限流配置
    k8sv1.19.0APF之前限流客户端访问kube-apiserver,限流参数有max-mutating-requests-inflight(默认值是200,对应操作类请求)和max-requests-inflight(默认值是400,对应查询类请求)。staging/src/k8s.io/apiserver/pkg/server/filters/maxinflight.goWithMaxInFlightLimit函数分别创建......