这些是Iam在AWS T2.medium 2核心/ 4GB实例上运行的代码。使用相同的配置不同的实例,相同的子网到基准。基准测试结果显示两个堆栈的相同吞吐量和响应时间。我使用Jmeter进行性能指标评估。结果显示MEAN比LAMP慢。经测试最多600个并发请求,MEAN的吞吐量约为35req / sec,LAMP的吞吐量为37req / sec。为什么Iam得到如此低的吞吐量以及为什么MEAN在阅读时表现最差 LAMP堆栈代码:
<?php
$con = mysql_connect("localhost", "root", "root");
if(!$con) die('connection failed');
$db = mysql_select_db("mms-php", $con);
$result = mysql_query("SELECT * FROM comments LIMIT 10", $con);
$rows = array();
while( $row = mysql_fetch_assoc($result) ) {
array_push($rows, $row);
}
header("Content-type:application/json");
echo json_encode($rows);
//print_r($rows);
//$result = mysql_query("INSERT INTO msgs (msg) VALUES ('" . rand() . time() . "')", $con);
mysql_close($con);
?>
mysql有一个包含1000个条目的表注释。类似地,MongoDB有一个包含1000个条目的集合。 MEAN堆栈代码:
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
var http = require('http');
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
// Connection URL
var url = 'mongodb://localhost:27017/test';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
console.log("Connected correctly to server");
http.globalAgent.maxSockets = 10;
http.createServer(function (req, res) {
//process.nextTick(function(){
res.writeHead(200, {'Content-Type': 'text/plain'});
db.collection('comments').find({},function(err, docs) {
if(err) {
console.log(err);
res.write('an error occurred');
res.end();
} else {
// console.log(docs);
docs.each(function(err, doc){
if(doc)
res.write(JSON.stringify(doc));
else
res.end();
//console.log(JSON.stringify(doc));
});
}
});
// });
}).listen(1337, '0.0.0.0');
});
}
答案 0 :(得分:0)
总之,综合基准主要用于营销。对于只读工作(分析和搜索,其中写入步骤通常每天一次/一夜)我已经使用MySQL将所有数据放在60Gb + squashfs RAM-disk(LAMP)和Elasticsearch(JavaScript&amp; Linux上的PHP客户端)。后者是实时/近期更新(我喜欢Elasticsearch,尽管存在Java偏见)的可行选项,它与事务部分的MySQL数据库(以及允许以后使用ETL进行分析的规范化模型)耦合。
我猜你并不完全对应用程序的MEAN vs LAMP实现进行基准测试。我猜你更有可能对启动,打印(JSON编码)数千行进行基准测试,以及拆除成本(建立进程/线程实例,建立与数据库的连接等)而不是数据库事务成本合适。我建议就是这样:一个非常小的数据库(1000个元素)将被缓存;你不是要求数据库做任何事情而不是返回游标&amp;整个表/表等价;然后只是将它回流到输出流(没有转换 - 除非你的客户端意味着这样做)。最后,正如其他人提示的那样,您并未控制执行比较的平台。你可以运行LAMP&amp;在最微薄的计算机上,您可以更加确定公平的比较。
您的基准测试也很容易被Apache配置(与大多数其他堆栈一样)用于缓存结果。
您是否尝试过各种客户来实施这两种实施? Apache ab是微不足道的,但对于我曾参与历史的应用程序而言毫无意义。非常适合发现系统在饱和状态下的行为,但不像我httperf那样提供信息,我已经成功地用于扩展应用程序服务和数据库层(它赢得了所有适合RAM的内容)我可以制作适合实际场景的分发频率。)