请教下 Kong 网关限流的解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mypchas6fans
V2EX    程序员

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

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

    传统企业的电商 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
    ikw
        14
    ikw  
       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     Solana     5422 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 06:37 PVG 14:37 LAX 22:37 JFK 01:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86