Tinh chỉnh hiệu năng và kỹ thuật tối ưu

Ứng dụng Serverless với AWS Lambda

Claudio Canales

Senior DevOps Engineer

Hiệu năng = độ trễ + chi phí

  • Quý vị trả tiền theo thời gian.
  • Tối ưu hiệu năng cũng là tối ưu chi phí.
  • Đo lường trước khi tinh chỉnh.
  • Thay đổi từng mục một.

Đồng hồ bấm giờ và chi phí

Ứng dụng Serverless với AWS Lambda

Thời gian dùng vào đâu

  • Khởi tạo.
  • Thực thi handler.
  • Thời gian chờ gọi ra ngoài.

Init vs handler vs gọi ngoài

Ứng dụng Serverless với AWS Lambda

Cold start vs warm start

Cold start

  • Lambda cần môi trường mới.

Warm start

  • Tái sử dụng môi trường hiện có.
  • Handler chạy với ít chi phí phụ.

Dòng thời gian: cold vs warm

Ứng dụng Serverless với AWS Lambda

Việc trong init vs trong handler

  • Imports và thiết lập toàn cục chạy trong init.
  • Init nặng làm cold start chậm hơn.
  • Thời lượng init hiển thị trong số liệu.

Phần init vs handler

Ứng dụng Serverless với AWS Lambda

Tái dùng client qua các lần gọi ấm

  • Tạo client mỗi lần gọi lặp lại chi phí.
  • Tái sử dụng khi môi trường còn ấm.

Tái dùng client toàn cục

Ứng dụng Serverless với AWS Lambda

Mẫu mã: client ngoài handler

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

Client tạo một lần

Ứng dụng Serverless với AWS Lambda

Cache khi có thể

  • Giữ dữ liệu trong bộ nhớ.
  • Dùng /tmp cho tệp tạm nhỏ.
  • Cache cẩn thận và vô hiệu khi cần.

Cache trong bộ nhớ và /tmp

Ứng dụng Serverless với AWS Lambda

Giữ phụ thuộc gọn nhẹ

  • Gói lớn tải lâu hơn.
  • Loại bỏ phần không dùng.
  • Giữ phụ thuộc nhỏ nhất có thể.

Gói phụ thuộc gọn vs nặng

Ứng dụng Serverless với AWS Lambda

Ghi log hợp lý

  • Log quá nhiều gây tốn kém và nhiễu.
  • Nhắm tới thông điệp nhỏ, có cấu trúc.
  • Dễ tìm kiếm; hỗ trợ truy vết và gỡ lỗi.

Khối lượng log vs tín hiệu

Ứng dụng Serverless với AWS Lambda

Giảm chi phí gọi bên ngoài

  • Gọi dịch vụ khác là phần chậm nhất.
  • Giảm số lần gọi; gom lô khi có thể.
  • Đặt timeout để lỗi không treo.

Giảm gọi ra ngoài

Ứng dụng Serverless với AWS Lambda

Bộ nhớ cũng ảnh hưởng CPU

  • CPU tỷ lệ với bộ nhớ.
  • Mã CPU-bound có thể chạy nhanh hơn.
  • Thêm bộ nhớ có thể giảm thời lượng hoặc chi phí.
  • Kiểm thử để tìm giá trị tối ưu.

Bộ nhớ -> CPU -> thời gian chạy nhanh hơn

Ứng dụng Serverless với AWS Lambda

Tìm điểm ngọt chi phí

  • Mức bộ nhớ tốt nhất tối thiểu hóa tổng chi phí.
  • Đường cong giảm, rồi phẳng hoặc tăng.
  • Kiểm tra lại sau mỗi thay đổi.

Đường cong chi phí theo bộ nhớ

Ứng dụng Serverless với AWS Lambda

Đo lường với CloudWatch

  • Theo dõi Duration và Init duration.
  • Theo dõi lỗi và throttles.
  • Quan sát độ trễ đuôi (p95, p99).

Chỉ số hiệu năng CloudWatch

Ứng dụng Serverless với AWS Lambda

Giảm cold start

  • Giảm nội dung chạy trong init.
  • Giữ gói của bạn gọn nhẹ.
  • Tái sử dụng thiết lập tốn kém.
  • Cân nhắc môi trường được cấp sẵn.

Danh sách giảm cold start

Ứng dụng Serverless với AWS Lambda

Điểm chính cần nhớ

  • Biết thời gian tiêu tốn ở đâu.
  • Tái dùng client và cache cẩn thận.
  • Bộ nhớ thay đổi CPU và thời lượng.
  • Đo lường mọi thay đổi.

Điểm chính về hiệu năng

Ứng dụng Serverless với AWS Lambda

Ayo berlatih!

Ứng dụng Serverless với AWS Lambda

Preparing Video For Download...