• 中文
    • English
  • 注册
  • 查看作者
  • 深入理解Metrics(四):Meters

    上周四的文章中,介绍了如何使用Histograms来统计鉴权接口响应时间的分布。本章会继续讲解Metrics的第四个工具:Meters,通过使用Meters可以测量接口发生的频率。

    1. 1分钟、5分钟和15分钟的由来

    Meters用来测量事件发生的频率,例如每秒请求数,不仅如此,还会统计 最近1分钟、5分钟和15分钟的频率 。 但为什么会是1分钟、5分钟和15分钟,这里需要参考UNIX系统关于 平均负荷load average 的定义。

    在Meters的代码注释中建议开发者参考以下的资源: 

    UNIX Load Average Part 1: How It Works

    UNIX Load Average Part 2: Not Your AverageAverage

    EMA

    有时我们会查看服务器的负载,通常情况下你可能会在终端上输入top、uptime和w等命令,这时终端会有如下的输出:

    深入理解Metrics(四):Meters

    load average的三个数字表示 1分钟、5分钟、15分钟内系统的平均负荷 ,通过数值大小来判断系统负载的高低,而负载的计算依赖于运行在CPU上进程数和进程状态,当进程的状态为TASK_RUNNING或者包含TASK_UNINTERRUPTIBLE时会被计算在内。

    下面是Linux kernel计算负载的代码片段:

    深入理解Metrics(四):Meters

    Metrics就是参考UNIX系统平均负荷的实现设计了Meters。

    2. Meters的使用

    account模块使用Meters测量鉴权接口被调用的频率。 在测试的代码中通过不断的加大并发请求数,来测量account模块能承受的极限。

    深入理解Metrics(四):Meters

    代码说明:

    1. 测试开始之前需要登录SDMK获取用于验证的token。

    2. 子方法getOneMinuteRate(Stringtoken, int thread)模拟并发测试,测试总次数 = 线程数 * 1000。

    3. 并发数从1到256指数增长。

    输出如下:

    深入理解Metrics(四):Meters

    从上面的输出结果可以看出,随着并发数加大,account每秒钟处理的请求数也在加大,用折线图来显示:

    深入理解Metrics(四):Meters

    3. Meters的层次结构

    深入理解Metrics(四):Meters

    Meters使用类EWMA实现了Metered的接口,从而可以统计输出1分钟、5分钟和15分钟内调用的频率。

      下面是类Meter核心处理过程: 

    深入理解Metrics(四):Meters

    4. 指数移动平均算法

    类EWMA实现了指数移动平均算法,关于指数移动平均算法可以参考维基百科的定义:

    深入理解Metrics(四):Meters

    那么类EWMA是如何实现的:

    深入理解Metrics(四):Meters

    类EWMA定义了三个常量:M1_ALPHA、M5_ALPHA和M15_ALPHA,这是指数移动平均算法的 加权值 ,至于具体值也是借鉴Kernal的魔数:

    深入理解Metrics(四):Meters

    类EWMA的核心方法:

    深入理解Metrics(四):Meters

    为了观测增量频率和总频率随时间的变化情况 ,测试过程中每隔5秒钟采集一次增量频率和总频率,持续2钟,最后绘制成折线图。

    深入理解Metrics(四):Meters

    5. 结束语

    从本章的讲解可以看出Meters是经过Metrics精心设计的,精心设计的工具就要应到到实践中,你对此有何看法呢?

  • 0
  • 0
  • 0
  • 27
  • 请登录之后再进行评论

    登录
  • 任务
  • 实时动态
  • 发布
  • 单栏布局 侧栏位置: