iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Cloud Native

2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 系列 第 27

Day 27 - 對 CloudFront 進行壓力測試,合適嗎?

  • 分享至 

  • xImage
  •  

大家中秋快樂 :)
今天來聊聊使用 CloudFront 時,關於壓力測試(load testing/stress testing)的一些想法。

網站服務要上線前,通常會有一個「壓力測試」的項目要處理。目的希望確認相關的各個系統組件都能承接特定數量的請求,順利提供服務。

需要注意的項目

那麼,當要測試 CloudFront 時,要注意哪些項目呢?
我建議可以注意以下資訊。

  1. 確定數據是否合理如果是舊系統升級版本,那麼既有系統的日誌/Metrics 就是很好的參考來源。
比方說,假設透過 GA 可以看到網站上最大線上人數約是 30,000。我們就可以推估每秒平均約進來 100人 (30,000/(60*5),因為 GA 的 Active Users 是統計最近 5 分鐘的資訊
  1. 請求是否會穿透 CloudFront 如果測試的標的是不能緩存(或未命中緩存)的內容,那麼對 CloudFront 做壓力測試,實際上是針對 Origin 做壓力測試。
  2. 避免請求集中送往特定IP or 特定 PoP 因為 CloudFront 有多個 PoP,也有自身的調度處理,所以將相關測試請求打往一個 PoP,通常會與 Production 環境的實際情況不同。
  3. 盡可能從多個 Geo Location發送測試請求 讓 Request 打到不同的 PoP 的最簡單方法,就是開立不同 Region 的 EC2 作為 Client。
  4. 明文限制1: 有 lambda@edge 設定在 viewer request/viewresponse 觸發的,別測 除了文件中直接寫明外,在 viewer request/response 觸發的 lambda@edge 的被呼叫次數,基本上會隨著請求數量走。所以測試時很容易撞上 Lambda@edge 的 Quota,進而得到 503 的錯誤回報。
  5. 明文限制2: 如果 Origin 有開啟 Origin Shield 功能,別測 雖然 AWS 公開文件沒有解釋原因,但

可以觀察的指標(可以開的進階 Metrics 或者日誌,就打開)

  1. 在測試前,建議打開 Log(無論是 Standard 或者是 Realtime Log),以及開啟 CloudWatch 的 Additional Metrics 作為從其它面向來的觀察。(看 Hit Rate, 不同錯誤代碼的 Error Rate, Request Count)
  2. 當然,針對 CloudFront Origin 的監控也應該一併觀察。(ex: ELB, EC2, API G/W 等的指標,通常都有 invoke).
  3. 如果是 ALB,建議注意 Requests、Target Response Time(Average and Max), ELB 5xx 以及 Target 5xx 數量。
  4. EC2 的 Advanced metrics (開啟後才能看到每分鐘的指標,如 CPU Utilization)

可以用來做壓力測試的工具

目前常用工具,大概有以下幾個

  • Apache benchmark: CLI 指令,可以最簡單的測試網址,參考用法
$ ab -c 50 -n 100 https://2023ironman-watch.kgg23.com/
# -c 代表同時間發出多少請求,可理解成同時間有多少個 thread/users 在發請求; 
# -n 代表請求總數 
# 所以 -c 50 -n 100,代表 50 個 thread,每個 Thread 發兩筆請求。

參考執行結果

Server Software:        CloudFront
Server Hostname:        2023ironman-watch.kgg23.com
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
Server Temp Key:        ECDH X25519 253 bits
TLS Server Name:        2023ironman-watch.kgg23.com

Document Path:          /
Document Length:        0 bytes

Concurrency Level:      50
Time taken for tests:   0.585 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      39300 bytes
HTML transferred:       0 bytes
Requests per second:    170.87 [#/sec] (mean)
Time per request:       292.619 [ms] (mean)
Time per request:       5.852 [ms] (mean, across all concurrent requests)
Transfer rate:          65.58 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       25  129  29.1    150     168
Processing:     6   31  25.1     21     106
Waiting:        6   25  17.7     18      90
Total:        121  159  28.9    163     253

Percentage of the requests served within a certain time (ms)
  50%    163
  66%    167
  75%    171
  80%    173
  90%    178
  95%    251
  98%    252
  99%    253
 100%    253 (longest request)
  • Jmeter: 網站測試的好朋友。可以想像成帶有 GUI(且威力巨大)的 ab (反正都是 Apache 出的。)
    官方網頁: link
    https://ithelp.ithome.com.tw/upload/images/20230929/20162502MFojMFEApq.png

順便替 AWS 工商一下,有個方案叫做 AWS 上的分散式負載測試,大家要不要也測試看看? :)


中秋胡言亂語

仔細想想,或許好像其實沒必要一定要替 CF 做 Load testing,it's CloudFront,不是嗎?
中秋節快樂


感謝您的收看,明天我們預計針對日誌使用/分析的部分做說明。


上一篇
Day 26 - 與 AWS 服務整合 - Origin 篇(Part 2)
下一篇
Day 28 - CloudFront 日誌的使用及分析
系列文
2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言