Skip to content

molten and machine learning

silkCut edited this page Oct 20, 2017 · 1 revision

当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');

最终我们能够得到一个组件调用和整体时间的非线性模型。 根据这个模型我们能够在一定范围内 预测我们应用时间相应的合理响应时间。

让你的应用说话

例子中只是应用了一个最为简单的机器学习的例子。

我们根据抓取到的组件信息, 我们能够构建出一个关于应用的整体模型, 比如组件和组件的关系, 响应时间和调用链的关系, 应用的聚类等等, 信息越多,我们能够推测出的信息就越多。

最终让数据跟我们对话。

Clone this wiki locally