当molten遇到机器学习
molten
molten是一个链路追踪的php扩展, git地址:molten
它能够用来构建php全链路追踪系统, 这个在上一篇的blog中已经介绍过了《Molten 功能简介以及使用指南》
在如今机器学习如火如荼的今天, 全链路追踪系统和机器学习相结合 和爆发出怎样的火花? 下面让我们玩转起来这个追踪系统。
机器学习
在ai人工智能越来越完善的今天, php也有了自己能够应用得上的人工智能库了 - PHP-ML 其中已经包含了常用的机器学习的算法, 数据处理的简单工具。 能够满足我们当前的学习内容
数据训练
收集单台机器上某个应用的tracing log, 将其中http/redis/memcached/mysql 的单个request的调用次数以及整个request的请求时间获取出来,将其信息整理为cvs文件,作为我们的训练数据。
文件内容如下:
3,7,0,10626
0,2,0,4386
0,3,0,17755
0,2,0,2584
0,2,0,3468
3,4,0,5469
0,4,0,2570
我们采用svr (support vector regression)进行模型的训练。将外部组件和php执行时间的调用关系整理处理
训练代码如下:
$dataset = new \Phpml\Dataset\CsvDataset('example.cvs', 4, true);
// split dataset
$split = new \Phpml\CrossValidation\RandomSplit($dataset, 0.2);
echo " start train .........\n";
// support vector regression
$svr = new \Phpml\Regression\SVR(\Phpml\SupportVectorMachine\Kernel::POLYNOMIAL, $degree = 3);
$svr->train($split->getTrainSamples(), $split->getTrainLabels());
echo " end training ..... \n";
$testSamples = $split->getTestSamples();
$testLabel = $split->getTestLabels();
foreach ($testSamples as $key => $sample) {
echo "predict: " . $svr->predict($sample) . ' Accuracy: '. $testLabel[$key] . "\n";
}
//echo $svr->predict([0, 1, 1]);
$moduleManager = new \Phpml\ModelManager();
$moduleManager->saveToFile($svr, './svr');
最终我们能够得到一个组件调用和整体时间的非线性模型。 根据这个模型我们能够在一定范围内 预测我们应用时间相应的合理响应时间。
让你的应用说话
例子中只是应用了一个最为简单的机器学习的例子。
我们根据抓取到的组件信息, 我们能够构建出一个关于应用的整体模型, 比如组件和组件的关系, 响应时间和调用链的关系, 应用的聚类等等, 信息越多,我们能够推测出的信息就越多。
最终让数据跟我们对话。