关于MACD算法的一点思考

单纯说MACD,可能对于IT人士来说有点陌生。其实MACD就是股票软件中常见的“快慢线”。它的算法是取两个一大一小的时间窗口,对于股市来说往往采用5个交易日(周线)和21个交易日(月线)。对比两个时间窗口内的EMA(指数加权平均的)变化的不同,从而预测当前的股票状况。如果用公式来说:

用码农可以理解的简单的伪代码就是:

EMA += (sample – EMA) * 2.0/windowSize++

什么是MACD

事实上EMA这种指数平均发只是简单的平滑了一下忽上忽下地曲线,能够简单的过滤掉严重偏离平均数值的所谓“个体影响”。对于α来说,窗口越大,就会变得越小,那么个体P的变化对EMA整体来说就会变得更加不明显。由于窗口的大小不同,导致相对于长期EMA来说,短期的EMA对变化更为敏感。对于这种变化的反应,简单的把短期EMA和长期EMA相减,我们就可以得到一条应该在0左右震荡的曲线,这就是本文将要解释的MACD线。

事实上,在一个分布式系统中,我们经常会碰到于股票市场类似的决策事件:比如当前系统中有N台在线机器和M台机器做弹性备份。采用经济点的方式就是只在系统业务高峰时期增加节点,低谷时期将弹性资源离线。那问题来了,什么时候才是增加弹性资源的最佳时机?

按道理来说,一个完整的生产环境分布式系统,应该有一系列的系统健康监控系统,他们会不断的采集各个指标CPU,Memory,IO,Disk等等。这会产生大量的数据,统计这些越来越多的数据是一个很庞大的任务。而采用EMA算法做平均的优势是在于系统只要简单的通过当前的指标p,当前的EMA以及一个常量α作为入参就可以获得新的EMA值,这个过程根本不需要过多历史数据的参与,获得一个相对平均数的同时,且大大简化了难度。

MACD的解读

越是平稳的系统中,MACD应该越是接近0的曲线。当MACD出于正数区间时,统计说明短期内集群的某项指标p正在快速增长,是时候应该考虑增加新的工作节点。相反的是MACD为负时就应该适当减少机器,减少资源消耗了。

至于管理员比较关心的这个“快速增长”究竟要什么情况下触发出扩容(或者离线)操作才算合理的问题。我们不妨还是借鉴股票市场中的成本线来进行考虑:通过QoS的指标得出当前系统最高指标Lmax,根据成本得出系统最优秀的指标Lmin,那么大多数情况下的EMA值应该介于两者指数平均数之间,当短期EMA向上交叉长期线并跨越Lmin和Lmax的平均数之间时我们就可以认为系统需要增加节点。反之亦然。

取样窗口的选择

取样窗口的选择很是重要,由于最新的指标对于整体平均值来说影响是最大的,加上MACD的精度没有必要很高,所以建议还是以短期EMA的窗口大小决定长期为宜,长期EMA的窗口可以设置到短期窗口的4~5倍左右。对于短期窗口的设置,建议还是以新加入一台主机到该主机完全工作在经济状况下的时间为单位,在此单位内取样数量的3倍左右为宜。

加权和除权

既然说道了加减主机的操作,加减主机之后系统的整体负载都会随之变化。在增减主机之后,请对Lmin和Lmax分别做加权或除权操作为宜。

一个分布式系统从设计角度上都应该符合一个原则,那就是可以简单的通过堆节点来支撑更多的业务,而且业务和节点的数量应该尽可能的接近于正比例,那一旦系统的容量有所变换,MACD的曲线应该有对应的变化。

暂时就想到这么多!

开源小站稿源:开源小站 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » 关于MACD算法的一点思考

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录