เทคนิคการปรับแต่งและเพิ่มประสิทธิภาพ

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

ประสิทธิภาพ = เวลาตอบสนอง + ต้นทุน

  • คิดค่าใช้จ่ายตามเวลา
  • การปรับประสิทธิภาพคือการลดต้นทุนด้วย
  • วัดผลก่อนปรับแต่งเสมอ
  • เปลี่ยนทีละสิ่ง

นาฬิกาจับเวลาและต้นทุน

Serverless Applications with AWS Lambda

เวลาหายไปไหน

  • การเริ่มต้น (Initialization)
  • การทำงานของ handler
  • เวลาที่รอการเรียกจากภายนอก

Init vs handler vs การเรียกภายนอก

Serverless Applications with AWS Lambda

Cold start vs warm start

Cold start

  • Lambda ต้องสร้างสภาพแวดล้อมใหม่

Warm start

  • ใช้สภาพแวดล้อมที่มีอยู่เดิม
  • handler ทำงานโดยมี overhead น้อยกว่า

ไทม์ไลน์ cold vs warm

Serverless Applications with AWS Lambda

งานใน init vs งานใน handler

  • การ import และการตั้งค่า global ทำงานในขั้น init
  • init ที่หนักทำให้ cold start ช้าลง
  • ระยะเวลา init ปรากฏใน metrics

การแบ่งระหว่าง init และ handler

Serverless Applications with AWS Lambda

นำ client กลับมาใช้ซ้ำเมื่อ warm invocation

  • การสร้าง client ทุกครั้งที่เรียกใช้งานทำให้เสียต้นทุนซ้ำ
  • นำกลับมาใช้เมื่อสภาพแวดล้อมยังอุ่นอยู่

การนำ global client กลับมาใช้ซ้ำ

Serverless Applications with AWS Lambda

รูปแบบโค้ด: วาง client ไว้นอก handler

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

Client ถูกสร้างครั้งเดียว

Serverless Applications with AWS Lambda

แคชในสิ่งที่ทำได้

  • เก็บข้อมูลไว้ใน memory
  • ใช้ /tmp สำหรับไฟล์ชั่วคราวขนาดเล็ก
  • แคชอย่างระมัดระวัง และล้างเมื่อจำเป็น

การแคชใน memory และ /tmp

Serverless Applications with AWS Lambda

ทำให้ dependency กระชับ

  • แพ็กเกจขนาดใหญ่ใช้เวลาโหลดนานกว่า
  • ตัดสิ่งที่ไม่ได้ใช้ออก
  • ทำให้ dependency เล็กที่สุดเท่าที่จะเป็นไปได้

แพ็กเกจ dependency แบบเบาและแบบหนัก

Serverless Applications with AWS Lambda

บันทึก log อย่างชาญฉลาด

  • การ log มากเกินไปเพิ่มต้นทุนและสร้าง noise
  • มุ่งเน้น message ที่สั้นและมีโครงสร้าง
  • ให้ค้นหาได้ง่ายและช่วยในการตรวจสอบ

ปริมาณ log vs สัญญาณที่มีประโยชน์

Serverless Applications with AWS Lambda

ลด overhead จากการเรียกภายนอก

  • การเรียก service ภายนอกช้าที่สุด
  • ลดจำนวนการเรียก และรวมงานเป็น batch เมื่อทำได้
  • กำหนด timeout ป้องกันไม่ให้ค้างเมื่อเกิดข้อผิดพลาด

ลดการเรียกภายนอก

Serverless Applications with AWS Lambda

Memory ส่งผลต่อ CPU ด้วย

  • CPU ขยายตาม memory
  • โค้ดที่ใช้ CPU สูงทำงานเสร็จเร็วขึ้น
  • memory ที่มากขึ้นอาจลดเวลาหรือต้นทุนได้
  • ทดสอบเพื่อหาค่าที่ดีที่สุด

Memory -> CPU -> runtime เร็วขึ้น

Serverless Applications with AWS Lambda

หาจุดที่ต้นทุนเหมาะสมที่สุด

  • การตั้งค่า memory ที่ดีที่สุดช่วยลดต้นทุนรวม
  • กราฟจะลดลง แล้วเริ่มคงที่หรือสูงขึ้น
  • ทดสอบใหม่หลังมีการเปลี่ยนแปลง

กราฟต้นทุนเทียบกับ memory

Serverless Applications with AWS Lambda

วัดผลด้วย CloudWatch

  • ติดตาม Duration และ Init duration
  • ติดตาม error และ throttle
  • ดู tail latency (p95, p99)

เมตริกประสิทธิภาพใน CloudWatch

Serverless Applications with AWS Lambda

ลด cold start

  • ลดงานที่ทำใน init
  • ทำให้แพ็กเกจกระชับ
  • นำการตั้งค่าที่หนักกลับมาใช้ซ้ำ
  • พิจารณาใช้ provisioned environment

รายการตรวจสอบการลด cold start

Serverless Applications with AWS Lambda

สรุปประเด็นสำคัญ

  • รู้ว่าเวลาหมดไปกับอะไร
  • นำ client กลับมาใช้ซ้ำและแคชอย่างระมัดระวัง
  • memory ส่งผลต่อ CPU และระยะเวลาทำงาน
  • วัดผลทุกการเปลี่ยนแปลง

สรุปประเด็นสำคัญด้านประสิทธิภาพ

Serverless Applications with AWS Lambda

มาฝึกกันเถอะ!

Serverless Applications with AWS Lambda

Preparing Video For Download...