gpt4 book ai didi

php - 通过 php curl 的多个请求会影响我的 vps 速度

转载 作者:行者123 更新时间:2023-12-04 19:25:15 26 4
gpt4 key购买 nike

我有一个问题,找不到任何解决方案。我有来自 ovh 的 VPS,内存为 64GB,三核 CPU 是专用的,不共享的 (A),以及用于外部检查的 VPS (B)。我的问题是我在 VPS (A) 上托管的网站可以选择在购买前检查商品,我在领先网站的 PHP 后端中放置了一个指向 VPS (B) 的外部链接以进行检查。有时,许多客户同时点击检查按钮。我找到了托管主站点的 VPS (A)。但是,由于多次请求,它没有打开并慢慢打开。我从 VPS (A) 向 VPS (B) 发送 curl 请求。
卷码发帖方式

$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, getcwd()."/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, getcwd()."/cookie.txt");
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
$data = curl_exec($ch);
$error = curl_errno($ch);
curl_close($ch);

return $error ? json_encode(array('status' => 3,
'result' => 'Time out for Request', 'data' => "")) : $data;
我的项目适用于 laravel 和 PHP 以及 MySQL。我的 VPS (A) 是 ubuntu 20,与 Nginx 一起工作,与 VPS B 相同。现在我想要解决这个问题。它与我的 curl 代码或我的 VPS 设置有关吗?我该如何处理来自买家的多个 curl 请求?
我尝试将多个 VPS 作为 VPS (B) 并旋转它们,但仍然是同样的问题。很多客户来的时候,VPS A 还是很慢。

最佳答案

你在这里有效地扮演了两个人的角色,他们都可以努力让这一切变得更好......
作为 B 人,您正在运行一个提供一些数据的 Web 服务。
您可以努力使该 Web 服务尽可能高效,例如检查对数据库的不必要或低效的调用,或任何可能导致锁定的有状态的调用。使用分析器找出代码中最慢的部分在哪里——不要猜测和浪费时间优化已经很快的东西。
您可以实现缓存,以便可以在不重新获取数据的情况下处理重复的请求。您可以发送缓存生命周期 header 以帮助客户端缓存响应。
您可以实现超时和速率限制,以便在高负载下更优雅地失败,将结果返回给某些用户,并将有用的错误返回给其他用户。
您当然可以在问题上投入更多硬件 - 但请确保首先确定瓶颈所在。如果您还没有,请将数据库和 Web 服务器放在不同的服务器或容器上,这样它们就不会争夺 CPU 和 RAM。如果 Web 服务器的 CPU 或网络容量不足,请考虑“横向扩展”,将多个 Web 服务器放在一个数据库前面。
作为 A 人,您正在从 Web 服务请求数据
您可以实现数据或 HTTP 响应的缓存,这样您就不需要经常调用该服务。您可以请求 Web 服务的作者(您自己!)通过在响应中包含缓存生命周期信息来帮助解决此问题。
您可以限制单个用户按下按钮的频率,这样他们就不会重载远程服务。
您可以实现客户端超时并优雅地处理故障,如果服务没有响应,则回退到旧的缓存数据或有用的错误消息。
您可能会受益于使用第三方库(如 Guzzle 或 Symfony HTTP 客户端)而不是手动制作 curl 调用。它们不会自动变得更快,但它们会使缓存和超时等事情的实现比 PHP 中内置的非常低级的函数容易得多。

关于php - 通过 php curl 的多个请求会影响我的 vps 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71750177/

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