效能調校與最佳化技巧

使用 AWS Lambda 的無伺服器應用程式

Claudio Canales

Senior DevOps Engineer

效能 = 延遲 + 成本

  • 你為時間付費。
  • 做效能調校就是在最佳化成本。
  • 先量測,再調校。
  • 一次只改一件事。

秒錶與成本

使用 AWS Lambda 的無伺服器應用程式

時間花在哪裡

  • 初始化。
  • 處理常式執行。
  • 等待外部呼叫的時間。

初始化、處理常式與外部呼叫

使用 AWS Lambda 的無伺服器應用程式

冷啟動與熱啟動

冷啟動

  • Lambda 需要新的執行環境。

熱啟動

  • 重用現有環境。
  • 處理常式負擔更小。

冷啟動 vs 熱啟動時間軸

使用 AWS Lambda 的無伺服器應用程式

初始化工作 vs 處理常式工作

  • 匯入與全域設定在初始化執行。
  • 初始化越重,冷啟動越慢。
  • 初始化時間會顯示在量測指標中。

初始化 vs 處理常式切分

使用 AWS Lambda 的無伺服器應用程式

在熱啟動間重用用戶端

  • 每次呼叫都建立用戶端會重複付出成本。
  • 在環境為熱時重用它。

全域用戶端重用

使用 AWS Lambda 的無伺服器應用程式

程式碼範式:在處理常式外建立用戶端

import boto3
sts = boto3.client("sts")
def handler(event, context):
    return sts.get_caller_identity()

用戶端只建立一次

使用 AWS Lambda 的無伺服器應用程式

能快取就快取

  • 將資料留在記憶體中。
  • 小型暫存檔用 /tmp
  • 審慎快取,必要時使其失效。

記憶體與 /tmp 快取

使用 AWS Lambda 的無伺服器應用程式

保持相依精簡

  • 大型套件載入較久。
  • 刪去未使用的部分。
  • 讓相依套件越精簡越好。

精簡 vs 笨重相依套件

使用 AWS Lambda 的無伺服器應用程式

聰明記錄

  • 過度記錄會增加成本與雜訊。
  • 以小而結構化的訊息為目標。
  • 保持可搜尋,有助追蹤與除錯。

記錄量與訊號

使用 AWS Lambda 的無伺服器應用程式

降低外部呼叫開銷

  • 呼叫其他服務最慢。
  • 減少呼叫;可行時批次處理。
  • 設定逾時,避免失敗卡住。

最小化外部呼叫

使用 AWS Lambda 的無伺服器應用程式

記憶體也會影響 CPU

  • CPU 會隨記憶體擴增。
  • 受 CPU 限制的程式可更快完成。
  • 更多記憶體可縮短時間或降低成本。
  • 測試以找出最佳值。

記憶體 -> CPU -> 更快執行時間

使用 AWS Lambda 的無伺服器應用程式

找出成本甜蜜點

  • 最佳記憶體設定能讓總成本最低。
  • 曲線先降,之後持平或上升。
  • 變更後重新測試。

成本與記憶體曲線

使用 AWS Lambda 的無伺服器應用程式

用 CloudWatch 量測

  • 追蹤 Duration 與 Init duration。
  • 追蹤錯誤與節流。
  • 注意尾端延遲(p95、p99)。

CloudWatch 效能指標

使用 AWS Lambda 的無伺服器應用程式

降低冷啟動

  • 縮減在初始化執行的內容。
  • 讓套件保持精簡。
  • 重用昂貴的設定。
  • 考慮使用預先佈建的環境。

降低冷啟動檢查清單

使用 AWS Lambda 的無伺服器應用程式

重點回顧

  • 先瞭解時間花在哪。
  • 重用用戶端並審慎快取。
  • 記憶體影響 CPU 與執行時間。
  • 每次變更都要量測。

效能重點摘要

使用 AWS Lambda 的無伺服器應用程式

一起來練習吧!

使用 AWS Lambda 的無伺服器應用程式

Preparing Video For Download...