V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mypchas6fans
V2EX  ›  程序员

请教下 Kong 网关限流的解决方案

  •  
  •   mypchas6fans · 2022-06-17 10:29:53 +08:00 · 3004 次点击
    这是一个创建于 888 天前的主题,其中的信息可能已经有所发展或是发生改变。

    传统企业的电商 app 和网站,我理解流量说大不大说小不小 现有方案是老板做的,用了 istio 的 EnvoyFilter ,local 模式,我没实测过,他说效果还行

    现在上了 Kong 网关,想把限流提前到这一层来做,问题就来了……

    1. 开源版本的 rate-limiting 插件使用固定窗口算法,无论 local 还是 redis 方式,流量很小的时候还比较准,流量稍大就被冲破了限制不住,跟过家家似的;
    2. 有可能搞到企业版,说是提供滑动窗口算法,但第一流程折腾,第二效果怎么样不清楚,第三光为限流整这个还有点浪费……
    3. 第三方插件,github 上 lua golang 试了个遍,目前看来效果比开源版本略好,但流量大了还是不行
    4. 自己也试着用 golang 的 x/time/rate 包装了一个插件,然而本人 golang 菜鸡,连 429 都没返回,还在查

    想知道这个方向有没有人了解,有啥建议吗?需要细节可以帖子里或单独详聊。 感谢

    17 条回复    2022-06-20 08:59:37 +08:00
    victorc
        1
    victorc  
       2022-06-17 10:33:23 +08:00
    linux 自带 按域名单机限流,凑合能用

    “流量稍大就被冲破了限制不住”-- 这个存疑,就是直接用 golang 里面的 rate 包写的限流器也能限制住,不能 100%精确限制,但是不存在冲破限制不住,你自己看看配置吧
    retanoj
        2
    retanoj  
       2022-06-17 10:36:15 +08:00
    @victorc “linux 自带按域名限流”

    请问这个具体是什么工具 /功能可以做到?
    mypchas6fans
        3
    mypchas6fans  
    OP
       2022-06-17 10:41:03 +08:00
    @victorc 我可能说得不准,所谓限制不住,比如每秒 1w 请求,我期望限制到 100 ,结果 5000 个都成功过去了。虽说没全部过去,但这跟没限好像也没啥区别……
    mypchas6fans
        4
    mypchas6fans  
    OP
       2022-06-17 10:44:19 +08:00
    kong 开源版本的问题描述,我看了相关代码还在
    https://qmsheng.github.io/2018/04/04/kong-rate-limiting/
    Duluku
        5
    Duluku  
       2022-06-17 10:46:50 +08:00 via iPhone
    换 apisix 试试?
    yukang
        6
    yukang  
       2022-06-17 10:47:06 +08:00
    以前使用过,其实也就是 Nginx ?

    https://catcoding.me/p/nginx-traffic-limit/

    我怀疑你说的不准是不是哪里没理解,前公司也用 kong ,看起来是没问题?
    我记得有个问题是,如果你的 kong 有多个实例,要重新计算的。
    Wien
        7
    Wien  
       2022-06-17 10:48:33 +08:00
    之前做过一些业务限流如令牌桶,漏桶算法,无非是使用原子计数器,简单也好用。Kong 网关连这种基础的限流都不支持吗,这个我存疑,建议你再试试。
    victorc
        8
    victorc  
       2022-06-17 10:52:57 +08:00
    @retanoj 笔误,nginx
    victorc
        9
    victorc  
       2022-06-17 10:54:29 +08:00
    @mypchas6fans 一定是你配置有问题,限流器 设置限流 1000 ,最终放过了 1100 ,是正常的,但是你说 100 放 5000 ,哪完全不对的
    mypchas6fans
        10
    mypchas6fans  
    OP
       2022-06-17 11:29:57 +08:00
    感谢楼上各位,我可以再试试,不过我理解 kong 没有使用 nginx 自带的限流,而是自己实现了一个算法,然后才会有我在 4 楼说的问题
    c0nstantien
        11
    c0nstantien  
       2022-06-17 14:33:35 +08:00
    试试 apisix 的 limit-req 插件
    retanoj
        12
    retanoj  
       2022-06-17 14:38:59 +08:00
    yghack
        13
    yghack  
       2022-06-17 14:45:56 +08:00
    APISIX +1
    zwpaper
        14
    zwpaper  
       2022-06-17 15:23:26 +08:00
    帮你 @9yu ,一直在 v 站置顶招聘
    mypchas6fans
        15
    mypchas6fans  
    OP
       2022-06-17 17:40:50 +08:00
    9yu
        16
    9yu  
       2022-06-17 18:44:55 +08:00 via iPhone
    @mypchas6fans
    > 比如每秒 1w 请求,我期望限制到 100 ,结果 5000 个都成功过去了

    目前有一个优化 Redis 限流器的、等待 Review 的 PR https://github.com/Kong/kong/pull/8751

    如果你能在此帖或 Kong 的 Github 上贴上复现步骤,我非常愿意来跟进和在开源版本中修复这个问题 ( ^ω^ )
    mypchas6fans
        17
    mypchas6fans  
    OP
       2022-06-20 08:59:37 +08:00
    @9yu 感谢,我会继续尝试然后和你联系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3318 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:44 · PVG 19:44 · LAX 03:44 · JFK 06:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.