Skip to main content

[探索 5 分鐘] AWS Lambda Serverless - AspNetCore API 回應時間測試

 最近公司使用 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 吧 (一般而言, 應該也沒有冷啟動問題了)
疑 ? 好像只花了不到 1 分鐘 !

前置準備

  • 用 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

參考資料

  • https://aws.amazon.com/tw/blogs/developer/running-serverless-asp-net-core-web-apis-with-amazon-lambda/
  • https://www.hanselman.com/blog/TwoToolsForQuickAndEasyWebApplicationLoadTestingDuringDevelopment.aspx
  • https://github.com/hallatore/Netling?WT.mc_id=-blog-scottha

Comments

  1. Yes. It’s true, and this is because a database developeris responsible for creating and maintaining databases that other users on different platforms can access. If you are a professional database developer looking for an amazing freelancing gig, I recommend you register on Eiliana.com, a global freelancing portal.

    ReplyDelete

Post a Comment