gpt4 book ai didi

php - 为什么Varnish的获取比绕过Varnish的速度明显慢?

转载 作者:行者123 更新时间:2023-12-03 17:46:07 26 4
gpt4 key购买 nike

我设置了Varnish(端口80)以缓存来自Node.js服务器(端口8080)的请求,该服务器通常以几毫秒的时间响应(但有时要长得多)。

我在PHP中建立了一个简单的基准测试(我知道一次只能发送一个请求):

// Measure time for backend (bypassing Varnish by using port 8080)
$t = microtime(true);
foreach ($requests as $request){
file_get_contents($request["url"] . ":8080/?" . http_build_query($request["parameters"]));
}
$t = microtime(true) - $t;
echo "Backend: " . $t . "\n";

// Measure time for Varnish (using port 80 after Varnish restart)
$t = microtime(true);
foreach ($requests as $request){
file_get_contents($request["url"] . ":80/?" . http_build_query($request["parameters"]));
}
$t = microtime(true) - $t;
echo "Varnish MISS: " . $t . "\n";

// Measure time for Varnish (now cached)
$t = microtime(true);
foreach ($requests as $request){
file_get_contents($request["url"] . ":80/?" . http_build_query($request["parameters"]));
}
$t = microtime(true) - $t;
echo "Varnish HIT: " . $t . "\n";

// Results:
Backend: ~10 seconds
Varnish MISS: ~65 seconds
Varnish HIT: ~2 seconds

我测试了约1400个请求。平均而言,Varnish会为每个丢失的请求增加30-40毫秒的开销。

Varnish中由于缓存未命中而产生的开销似乎非常大,我发现其他人也报告了类似的结果-但是,没有人能够解释为什么或如何减少开销。

所以我的问题是,为什么会有这么大的开销,如何减少开销呢?

我知道缓存的想法是避免优化初始请求的响应时间,但是这种特定的Web服务将在很短的时间内看到大量的唯一请求(但是在几天之内会有很多重新请求),因此Varnish的开销有些重要。

Varnish 设置
vcl 4.0;

# Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}

sub vcl_recv {
unset req.http.Cookie;
}

sub vcl_backend_response {
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}

最佳答案

向Varnish询问问题之后,他们建议我尝试将其复制到同一服务器但后端不同的服务器上。尝试使用Apache后端没有问题。

仔细检查Varnish的响应,我注意到在Node.js服务器上,快速完成的请求上会有Content-Length header (由Varnish设置),而慢速完成的请求上没有。

在Node.js服务器响应中添加Content-Length header (默认情况下在Apache中添加)解决了该问题。

关于php - 为什么Varnish的获取比绕过Varnish的速度明显慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com