减少美国用户与欧盟服务器之间的延迟

减少美国用户与欧盟服务器之间的延迟

我陷入困境。我原以为我的服务器在加拿大,但结果却是在法国。我现在没时间迁移服务器(如果访客来自美国,那么最终目标是 75%)。

使用 pingdom 上的网站速度测试,当我从瑞典测试时,第一个字节等待时间约为 140 毫秒。当我从加利福尼亚测试时,它大约是 680 毫秒。我需要尝试减少这个时间,因为谷歌说它抓取网站的速度很慢,而且总体而言大多数访问者来自美国,所以我需要改善他们的体验。

Cloudflare 正在缓存静态资产,因此虽然 css、js 和图像的延迟也在 600+ 范围内,但一旦 Cloudflare 拾取文件,它们就会立即下降。我现在的重点是 php 文件。

我无法使用 nginx,因为我无法通过代理进行 100% 的 html 缓存。但是我可以使用 redis 来缓存 99% 的 HTML。我已升级到 php7,Apache 现在可以通过快速 CGI 与其配合使用。我已尽可能地加快网站速度,使用大量内存缓存并删除所有未使用的模块等。这个网站相当快,加利福尼亚的 pingdom 测试显示,完全呈现未命中 HTML 缓存的页面需要 2-3 秒。但是,如果我可以消除 600 毫秒的延迟,我就会轻松很多。

除了拥有位于欧盟和美国的服务器并使用负载均衡器之外,我还能做些什么来加快美国用户的体验并摆脱一些不确定性?

我在法国的服务器上通过 100mb 连接运行 Centos 7、Apache 2.4 和 php7(快速 CGI)。该服务器专用于 16gb 内存和 4 核 xeon 处理器,8 线程 @2.4ghz。

答案1

您提到的响应时间听起来有点过长。我首先要验证当网络从方程式中移除时,响应速度有多快。

尝试在服务器上运行命令来下载页面,看看需要多长时间。如果你想要对单个资源进行计时,你可以使用wget或轻松完成curl。如果你想要一个可以识别呈现页面所需的所有资源并下载它们的东西,你需要研究其他工具。

为了测量您的延迟类型,请尝试使用来自世界各地的单个 ICMP 回显请求向您的服务器发送请求,以查看仅网络就增加了多少时间。有很多网站可以为您进行此类测试。

即使内容无法缓存,在服务器前面放置代理也有潜在的好处。代理可以位于靠近用户的位置,并且可以提前与后端服务器建立 https 连接,这样用户只需在跨大西洋链路上等待一次往返,而不是在用户开始加载页面时必须建立连接时需要等待两次或更多次。

此外,当你控制连接两端的服务器时,你将能够更好地测量跨大西洋连接的往返、抖动和数据包丢失。能够测量它是改进连接的第一步。

最后,找出页面结构为下载所有资源添加了多少次往返。代理可以让你为每个资源减少一次往返,但页面结构决定了可以并行下载多少次。例如,如果页面引用了一个 javascript 文件,并且该脚本在运行时下载了一个图像,则你将需要至少三次往返,因为浏览器在下载完前一个文件后才能开始下载下一个文件。

相关内容