如何搭建一个只用来做简单延时的服务,要求能抵抗高并发。
首先说明要搭建这个服务的目的:
为了验证验证A服务的QPS值。要在B服务上搭建一个简单的延时程序,要求B服务能够实现:分别延时 600ms、700ms、800ms之后输出一个简单结果,比如 echo ‘ok’。
我自己用php+fpm+nginx 与 swoole 分别搭建了B服务,但在用ab压测之后都失败了。
php+fpm+nginx 代码如下
<?php
$time = 600*1000;
usleep($time);
echo '{"code":200,"message":"ok","data":[]}';
swoole 代码如下
<?php
$http = new swoole_http_server("0.0.0.0", 80);
$http->set(array(
'worker_num' => 1000,
'max_request' => 5,
'max_conn' => 10000,
'dispatch_mode'=>3,
'reactor_num'=>8,
'socket_buffer_size' => 512 * 1024 * 1024,
'heartbeat_idle_time' => 5,
'heartbeat_check_interval' => 2,
));
$http->on("start", function ($server) {
echo "Swoole http server is started at http://0.0.0.0:80\n";
});
$http->on("request", function ($request, $response) {
$response->header("Content-Type", "application/json");
$time = 600*1000;
usleep($time);
$str = '{"code":200,"msg":"ok","data":[]}';
$response->end("$str");
});
$http->start();
apache ab 压测工具脚本
ab -t 600 -n200000 -c600 http://192.168.0.101/
失败现象:
B服务响应时间大幅度增加,由0.6s 变成 7s 、20s、甚至120s。最后 Connection timed out
求助内容
如何搭建B服务,实现简单延时但是不会被并发压垮?
推荐文章: