最近公司使用 AWS Lambda Function 來當基礎服務, 而且越用越多。我也呼應寫了一個 AWS Lambda Serverless Web API, 還加碼寫一個 Client Package 來打這個 API (對, 只有一個 .cs 檔案幫忙做 HTTP Request ...)。但由於 HTTP 回應實在太慢了, 我決定稍微做個併發 Request 測試, 花了些時間, 但大家應該 5 分鐘就可以知道結論了 :
- 一定要避免冷啟動 (Cold Start) 問題 ( 6~8 秒才能回應, 不管 Request 方是在 AWS 環境內還是外)
- 若機器全數在 AWS 雲內, 可得到平均回應 51 ms ~ 61 ms, 還算行 (畢竟我們已經獲得 Lambda 開發與佈署的好處了)
- 若需要最穩健快速的 Server 回應體驗, 就別用 Lambda 吧 (一般而言, 應該也沒有冷啟動問題了)
前置準備
- 用 AWS Lambda Serverless for VS 模板寫一隻 AspNetCore API, 一鍵佈署到 AWS, 並獲得一個 API Gateway 的 Public HTTP 網址
- 測試工具可以抓 Netling, 是用 AspNetCore3.0 寫的, Git 下載, VS 編譯並執行看看
- 當然, 要有 NetCore 3.0 Runtime 環境
測試腳本
設計情境: 2 個 Threads, 併發跑 10 個 Requests.\Netling.ConsoleClient.exe https://{xxx}.execute-api.us-west-2.amazonaws.com/{xxx} -t 2 -c 10
外網機器發動請求 (測試程式不在 AWS 雲內)
Run 1 (冷啟動, Max: 6191 ms, Min: 153 ms)
10 requests in 10.86s
Requests/sec: 1
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 541.385 ms
StdDev: 1808.712 ms
Min: 153.874 ms
Max: 6191.342 ms
█
█
█
█
█
█
█ █ █ █
153.874 ms ========================================================= 6191.342 ms
Run 2 (Max: 543 ms, Min: 445 ms)
10 requests in 5.45s
Requests/sec: 2
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 539.524 ms
StdDev: 29.621 ms
Min: 445.932 ms
Max: 543.472 ms
█ █ ███ █
█ █ ███ █
█ █ ███ █
█ █ ███ █
█ █ ███ █
█ █ ███ █
█ █ ███ █
445.932 ms ========================================================== 543.472 ms
Run 3 (Max: 556 ms, Min: 535 ms)
10 requests in 5.63s
Requests/sec: 2
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 539.615 ms
StdDev: 5.791 ms
Min: 535.379 ms
Max: 556.063 ms
█ █ ██ ██ █ █ █
█ █ ██ ██ █ █ █
█ █ ██ ██ █ █ █
█ █ ██ ██ █ █ █
█ █ ██ ██ █ █ █
█ █ ██ ██ █ █ █
█ █ ██ ██ █ █ █
535.379 ms ========================================================== 556.063 ms
內網機器發動請求 (測試程式在 AWS 雲內)
Run 1 (冷啟動, Max: 8330 ms, Min: 31 ms)
10 requests in 9.12s
Requests/sec: 1
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 51.472 ms
StdDev: 2619.591 ms
Min: 31.870 ms
Max: 8330.257 ms
█
█
█
█
█
█
█ █
31.870 ms ========================================================== 8330.257 ms
Run 2 (Max: 71 ms, Min: 36 ms)
10 requests in 0.74s
Requests/sec: 13
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 61.539 ms
StdDev: 14.006 ms
Min: 36.220 ms
Max: 71.926 ms
█ █ █ █ █ █ ██ █
█ █ █ █ █ █ ██ █
█ █ █ █ █ █ ██ █
█ █ █ █ █ █ ██ █
█ █ █ █ █ █ ██ █
█ █ █ █ █ █ ██ █
█ █ █ █ █ █ ██ █
36.220 ms ============================================================ 71.926 ms
Run 3 (Max: 71 ms, Min: 35 ms)
10 requests in 0.73s
Requests/sec: 14
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 56.294 ms
StdDev: 11.886 ms
Min: 35.902 ms
Max: 71.789 ms
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █ █
35.902 ms ============================================================ 71.789 ms
對照 localhost 機器發動 localhost 請求 (測試程式也在 localhost)
Run 1 (Max: 17 ms, Min: 6 ms)
10 requests in 0.17s
Requests/sec: 58
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 15.133 ms
StdDev: 2.986 ms
Min: 6.767 ms
Max: 17.078 ms
█ █ █ █ ██ ██
█ █ █ █ ██ ██
█ █ █ █ ██ ██
█ █ █ █ ██ ██
█ █ █ █ ██ ██
█ █ █ █ ██ ██
█ █ █ █ ██ ██
6.767 ms ============================================================= 17.078 ms
Run 2 (Max: 16 ms, Min: 11 ms)
10 requests in 0.18s
Requests/sec: 57
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 15.935 ms
StdDev: 1.884 ms
Min: 11.037 ms
Max: 16.208 ms
█ █ █ ████ █
█ █ █ ████ █
█ █ █ ████ █
█ █ █ ████ █
█ █ █ ████ █
█ █ █ ████ █
█ █ █ ████ █
11.037 ms ============================================================ 16.208 ms
Run 3 (Max: 19 ms, Min: 12 ms)
10 requests in 0.18s
Requests/sec: 55
Bandwidth: 0 mbit
Errors: 0
Latency
Median: 15.955 ms
StdDev: 1.961 ms
Min: 12.221 ms
Max: 19.752 ms
█ ██ ██ █
█ ██ ██ █
█ ██ ██ █
█ ██ ██ █
█ ██ ██ █
█ ██ ██ █
█ ██ ██ █
12.221 ms ============================================================ 19.752 ms
Comments
Post a Comment