7.0 KiB
7.0 KiB
S3存储速度问题诊断报告
问题现象
用户反馈预览文件加载极慢,网络诊断显示:
- 预览视频首字节时间:7.57秒
- 音频文件首字节时间:21.65秒
- 实际下载速度:仅20KB/s
诊断过程
1. 网络连通性测试
域名: s3.1080p.hk
IP地址: 156.233.232.106
Ping延迟: 36ms(正常)
丢包率: 0%
结论:网络连通性正常,延迟低。
2. 下载速度测试
# 测试小文件下载(40KB图片)
下载耗时: 2.15秒
文件大小: 0.04MB
下载速度: 0.02MB/s (20KB/s)
# 测试TTFB(14.48MB音频)
首字节时间: 1917ms
结论:下载速度极慢,TTFB很高。
3. 直接IP访问测试
访问 https://156.233.232.106/
返回: frp 404页面
服务器信息: "The server is powered by frp"
结论:服务器使用 frp(内网穿透) 技术。
根本原因
frp内网穿透导致的性能瓶颈:
-
架构问题:
- S3存储服务器在内网
- 通过frp服务器(156.233.232.106)转发流量
- 所有流量都要经过frp中转,形成瓶颈
-
性能影响:
- frp服务器带宽限制(可能只有几Mbps)
- 双重网络跳转(客户端 → frp → 内网S3)
- 高延迟、低带宽
-
用户影响:
- 大部分用户是公网访问
- 每个文件都要经过frp中转
- 用户体验极差
解决方案
方案1:使用CDN加速(推荐)⭐
优点:
- 成本低(几十元/月)
- 配置简单(1小时内完成)
- 效果显著(速度提升10-100倍)
- 不影响现有架构
实施步骤:
-
选择CDN服务商:
- 阿里云CDN
- 腾讯云CDN
- 七牛云CDN
- 又拍云CDN
-
配置CDN:
源站地址: s3.1080p.hk 加速域名: cdn.youyidian.com(需要备案域名) 缓存规则: - 图片/视频: 缓存30天 - 音频: 缓存30天 -
修改代码:
# .env S3_PUBLIC_DOMAIN=https://cdn.youyidian.com/jsxiangche -
预期效果:
- 首次访问:通过CDN从源站拉取(仍然慢)
- 后续访问:直接从CDN节点返回(秒开)
- 全国用户都能就近访问
成本估算:
- 流量费:0.2元/GB
- 月流量100GB:20元/月
- 月流量1TB:200元/月
方案2:迁移到公网S3服务(最佳)⭐⭐⭐
优点:
- 彻底解决问题
- 性能最优
- 稳定性高
- 支持CDN加速
实施步骤:
-
选择S3服务商:
- 阿里云OSS
- 腾讯云COS
- 七牛云Kodo
- AWS S3(海外)
-
数据迁移:
# 使用rclone或官方工具迁移数据 # 预计迁移时间:根据数据量而定 -
修改配置:
S3_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com S3_BUCKET=youyidian-materials S3_PUBLIC_DOMAIN=https://youyidian-materials.oss-cn-hangzhou.aliyuncs.com -
预期效果:
- 下载速度:10-50MB/s
- TTFB:50-200ms
- 全球CDN加速
成本估算(以阿里云OSS为例):
- 存储费:0.12元/GB/月
- 流量费:0.5元/GB(外网流出)
- 100GB存储 + 100GB流量:12 + 50 = 62元/月
方案3:优化frp配置(临时方案)
优点:
- 不需要额外成本
- 快速实施
缺点:
- 效果有限
- 治标不治本
实施步骤:
-
增加frp带宽:
- 升级frp服务器带宽
- 或使用多个frp服务器负载均衡
-
启用压缩:
# frpc.ini [s3] type = https local_ip = 内网S3地址 local_port = 443 use_compression = true bandwidth_limit = 100MB # 移除带宽限制 -
预期效果:
- 速度提升2-5倍
- 仍然无法达到理想速度
方案4:混合方案(平衡方案)⭐⭐
策略:
- 小文件(预览图):继续使用现有S3
- 大文件(视频/音频):迁移到公网S3或CDN
优点:
- 成本可控
- 效果明显
- 分步实施
实施步骤:
-
修改上传逻辑:
// 根据文件大小选择存储 if (fileSize > 5MB) { // 上传到公网S3 url = await uploadToPublicS3(file) } else { // 上传到现有S3 url = await uploadToS3(file) } -
配置双S3:
# 现有S3(小文件) S3_ENDPOINT=https://s3.1080p.hk S3_BUCKET=jsxiangche # 公网S3(大文件) S3_PUBLIC_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com S3_PUBLIC_BUCKET=youyidian-materials
推荐方案
短期(1周内):
- 启用CDN加速(方案1)
- 成本低、见效快
长期(1个月内):
- 迁移到公网S3(方案2)
- 彻底解决问题
紧急(今天):
- 在网络诊断中添加详细说明
- 告知用户问题原因
- 提供临时解决方案(使用内网访问)
临时解决方案(今天实施)
1. 内网用户优化
对于内网用户(192.168.x.x),可以直接访问内网S3,绕过frp:
// 检测是否为内网用户
const isInternalNetwork = () => {
// 通过API检测
return fetch('/api/network-info').then(r => r.json())
}
// 根据网络环境选择域名
const getS3Domain = async () => {
const info = await isInternalNetwork()
if (info.isInternal) {
return 'http://内网S3地址' // 需要确认内网地址
}
return 'https://s3.1080p.hk'
}
2. 网络诊断增强
在网络诊断中添加:
- frp检测
- 带宽瓶颈提示
- 解决方案建议
数据支持
当前性能
| 指标 | 数值 | 状态 |
|---|---|---|
| Ping延迟 | 36ms | ✅ 正常 |
| TTFB | 1917ms | ❌ 极慢 |
| 下载速度 | 20KB/s | ❌ 极慢 |
| 小文件加载 | 2.15秒 | ❌ 慢 |
| 大文件加载 | 21秒+ | ❌ 极慢 |
预期性能(使用CDN后)
| 指标 | 数值 | 改善 |
|---|---|---|
| Ping延迟 | 10-30ms | ✅ 更快 |
| TTFB | 50-200ms | ✅ 快10倍 |
| 下载速度 | 10-50MB/s | ✅ 快500倍 |
| 小文件加载 | <0.1秒 | ✅ 快20倍 |
| 大文件加载 | 1-3秒 | ✅ 快10倍 |
下一步行动
- 立即:增强网络诊断,添加frp检测和解决方案提示
- 本周:联系运维,讨论CDN或S3迁移方案
- 本月:实施选定的解决方案
附录:测试命令
# 测试下载速度
$url = "https://s3.1080p.hk/jsxiangche/由壹点AI/preview-xxx.webp"
$start = Get-Date
$response = Invoke-WebRequest -Uri $url
$duration = ((Get-Date) - $start).TotalSeconds
$size = $response.Content.Length / 1MB
$speed = $size / $duration
Write-Host "速度: $([math]::Round($speed, 2))MB/s"
# 测试TTFB
$start = Get-Date
$response = Invoke-WebRequest -Uri $url -Method Head
$ttfb = ((Get-Date) - $start).TotalMilliseconds
Write-Host "TTFB: $([math]::Round($ttfb))ms"
# 检测frp
$response = Invoke-WebRequest -Uri "https://156.233.232.106/" -SkipCertificateCheck
if ($response.Content -match "frp") {
Write-Host "检测到frp内网穿透"
}
报告生成时间:2025-12-22 10:45 诊断人员:Kiro AI 问题级别:🔴 严重(影响所有公网用户)