统计实时 QPS 有什么好方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nl101531
V2EX    问与答

统计实时 QPS 有什么好方法?

  •  
  •   nl101531 2022-02-21 21:05:37 +08:00 2247 次点击
    这是一个创建于 1418 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果是事后统计,按照自然时间来切分窗口,当每秒结束时,输出当前这一秒的 QPS 数值,这个还比较简单。

    如果变成实时统计,没想到好的做法,看了一圈,最好的应该是滑动窗口算法,但本质上是将窗口切分统计,误差最大为一个小窗口的大小,看起来应该是最优解了吧,求教。
    6 条回复    2022-02-22 11:06:03 +08:00
    dzdh
        1
    dzdh  
       2022-02-21 21:18:17 +08:00   1
    redis lua

    incr Ymdhis, expire 1s, return get Ymdhis
    ClericPy
        2
    ClericPy  
       2022-02-21 22:18:14 +08:00
    QPS 不是 q / secs 么... 谜底就在谜面上啊, 不分时间间隔那还叫 qps 么

    PS: 语气越来越弱
    ClericPy
        3
    ClericPy  
       2022-02-21 22:27:08 +08:00
    @ClericPy 看了楼上才发现要问啥... 一开始以为问的公式啥的

    所以如果想统计最小单位秒的某一秒真实 QPS, 每分钟生成个 60 个桶, 桶内 +1 倒是能拿到具体某秒的 q, 过期的下一个分钟丢弃. 不过性能不是最优遇到上万很容易不准, 还真没琢磨过这东西, 以前一直用分钟窗口除以 60 的...
    knightdf
        4
    knightdf  
       2022-02-21 22:27:27 +08:00
    1L 正解,只是去掉“expire 1s”
    nl101531
        5
    nl101531  
    OP
       2022-02-22 08:35:57 +08:00 via iPhone
    @ClericPy 看了 sentinel 的实现,秒级的统计是滑动窗口,不过只用在限流上,分钟级统计也包含了过去的每秒,用于 dashboard
    WhoMercy
        6
    WhoMercy  
       2022-02-22 11:06:03 +08:00 via Android
    做纯计数,粗略统计可用单独线程计数分钟级统计,根据分钟级 query 数平均计算分钟内每秒 query 数;精细统计可用循环计数队列,队列根据时间片切分,每个位置做自增原子操作,根据自增数统计时间片 query 数。

    做限流,可以用循环令牌桶队列,桶队列同样根据时间片切分,每个位置预设令牌数量,每时间片的个 query 会取得(消耗)对应桶里令牌,剩余令牌数可用于计数和限流。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2813 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 08:15 PVG 16:15 LAX 00:15 JFK 03:15
    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