《 Imgproxy 使用分析一:圖片下載速度優化分析:Akamai CDN vs Imgproxy 效能比較》
前言
目標
方法
![]() |
圖1. cdn imgproxy s3 plantUML |
接著就是看這樣的設計流程可不可以讓我們拿圖變快囉!
從 S3 拉圖跟透過 imgproxy 從 S3 拉圖的速度差
實驗設計
假設
方法
- S3 vs Imgproxy → S3
- Akamai CDN → S3 vs Imgproxy → S3
- Akamai CDN → S3 vs CloudFront CDN → Imgproxy → S3
- 第一次緩存建立 CloudFront CDN → Imgproxy → S3 與第二三次緩存建立後 CloudFront CDN → Imgproxy → S3,下載速度差
- Akamai CDN → S3 vs 緩存建立後的 CloudFront CDN → Imgproxy → S3
測試環境
測試一
目的
S3 與 imgproxy → S3 下載速度是否有差異
假設
在 S3 前面放 imgproxy 不影響下載速度
方法
- 控制組:S3
對照組:imgproxy → S3
同一個檔案在控制組與對照組同時各下載三次,算平均值
數據分析
從 Imgproxy 進行下載,似乎存在速度限制 2MB (圖2.)從 S3 有較高的下載速度,但有條件,檔案在小於 2MB 時可以有 Max 10.0 MB/s 的下載速度,但檔案大於 2.5MB 時,存在檔案下載限制,約在 4 MB/s 以下。
速度差(圖3. )也多落在 > 0 的地方,代表 S3 有較高下載速度。
結論:目測兩者下載速度有差異,S3 快於 imgproxy,但依據檔案大小,S3 也存在下載速度限制。
其他:檔案大小多在 2.5 MB 以下
![]() |
圖2. S3 vs Imgproxy S3 下載速度 |
![]() |
圖3. S3 vs Imgproxy S3 速度差 |
測試二
目的
假設
Akamai 與 Imgproxy 都存在下載速度限制瓶頸
方法
控制組:Akamai → S3
對照組:Imgproxy → S3
同一個檔案在控制組與對照組同時各下載三次,算平均值
數據分析
![]() |
圖4. CDN S3 vs Imgproxy S3 下載速度 |
單純使用 imgproxy 進行下載,存在速度限制 2MB,Max 2.65 MB/s (圖4);使用 Akamai → S3 有較高的下載速度, Max 可以到 10.08 MB/s
![]() |
圖5. CDN S3 vs Imgproxy S3 速度差 |
Speed Difference 基本上都 > 0 (圖5.)
結論:加上 Akamai CDN 可以大幅增加下載速度
那我們也來把 Imgproxy 前面加上 CloudFront CDN 看效果如何
測試三
目的
使用 CloudFront → Imgproxy 可有效提升下載速度。
假設
加上 CDN 可以大幅提升 Imgproxy 下載速度
方法
控制組:Akamai → S3
對照組:CloudFront → Imgproxy → S3
同一個檔案在控制組與對照組同時各下載三次,算平均值
就平均值而言,看起來有一個 Max 8MB/s 的速度限制(圖6. )
![]() |
圖6. CDN S3 vs CND Imgproxy S3 下載速度 |
Speed Difference 明顯往 < 0 偏移
結論:顯著提升,從 2MB/s 到 8MB/s
測試四
目的
確認 CDN 緩存完全建立時性能最佳,比較 CloudFront → Imgproxy 第 1, 2, 3 次下載速度差異
方法
控制組:CloudFront → Imgproxy 第一次下載速度
對照組:
a. CloudFront → Imgproxy → 第二次下載速度
b. CloudFront → Imgproxy → 第三次下載速度同一個檔案下載三次用 Wilcoxon 檢定是否存在顯著差異
假設檢定
假說(H0):不同下載次數之間無顯著差異。
對立假說(H1):不同下載次數之間存在顯著差異。
使用的檢定方法
由於數據不符合常態分佈,採用 Wilcoxon 符號檢定(Wilcoxon Signed-Rank Test)。
檢定結果
![]() |
圖8. 箱型圖與提琴圖的 CDN Imgproxy 第 1, 2, 3 次下載速度差 |
a. Speed1 vs Speed2
CDN_Imgproxy:
W = 159.0,p = 6.52e-82(p < 0.05,顯著差異)。
解釋:第二次下載速度顯著高於第一次。
b. Speed1 vs Speed3
CDN_Imgproxy:
W = 38.0,p = 3.09e-83(p < 0.05,顯著差異)。
解釋:第三次下載速度顯著高於第一次。
結論
第一次下載 (imgp_download_speed1):
中位數約在 0.5-1.0 MB/s
表現類似於無 CDN 的 Imgproxy
原因是 CDN 尚未建立緩存
第二次下載 (imgp_download_speed2):
中位數提升到約 4.0-4.5 MB/s
速度分布明顯向上偏移
顯示 CDN 緩存開始發揮作用
第三次下載 (imgp_download_speed3):
中位數達到約 7.0-7.5 MB/s
速度分布更加集中在較高區間
CDN 緩存完全建立,性能最佳
CDN 的效果是漸進式的:
首次訪問時受限於需建立緩存
後續訪問性能顯著提升
多次訪問後達到最佳性能
延伸
數據分析
b. 確認 CDN 緩存完全建立時性能最佳
假設
imgproxy 加上 CDN 可以讓下載速度增加,但是第一次建立時一樣有其限制
方法
控制組:CDN → S3
對照組:CDN → Imgproxy → S3
同一個檔案在控制組下載三次,算平均值,對照組僅下載第一次
明顯 imgproxy 第一次的結果又回到 2MB/s (圖10.)
![]() |
圖10. CDN S3 三次平均下載速度 vs CND Imgproxy S3 第一次下載速度 |
![]() |
圖11. CDN S3 三次平均下載速度 vs CND Imgproxy S3 第一次下載速度比較 |
目的
使用 CDN → Imgproxy 可有效提升下載速度。
假設
不考慮第一次緩存未建立情況, CDN 可以讓下載速度增加
方法
控制組:CDN → S3
對照組:CDN → Imgproxy → S3
同一個檔案在控制組下載三次,算平均值,在緩存建立下,平均對照組第二與第三次的下載速度
![]() | |
|
結論:
在緩存建立下,imgproxy 的下載速度表現明顯提升甚至稍微高於 S3。
CDN 緩存機制影響下載速度
統計驗證:
- 使用 Wilcoxon 檢定證實了性能提升的統計顯著性
- 三次下載速度的差異具有統計學意義
- 驗證了 CDN 緩存確實能改善下載性能
此篇分析總結
- Imgproxy (without CDN):
- 單純使用 Imgproxy 的下載速度受限,第一次下載比第二三次慢,可能本身就有緩存機制。
- CDN_Imgproxy:
- 第一次下載速度與 Imgproxy (without CDN) 相近,因為 CDN 未快取。
- 從第二次下載開始,由於啟用快取,CDN_Imgproxy 的下載速度顯著提高,並遠高於 Imgproxy。
- CDN_S3:
- 提供穩定且高速的下載速度,是最佳選擇。但我們要壓縮,所以接著應該要看壓縮的報告,見下一篇
延伸
- 但其實 Akamai 也有壓縮轉檔的功能,因此之後想再做一篇 CloudFront → S3 vs CloudFront → Imgproxy → S3 的比較
Comments
Post a Comment