การปรับแต่งประสิทธิภาพและทรัพยากร

การ Deploy แอปพลิเคชันบน AWS

Dunieski Otano

Amazon Web Services Solutions Architect

ช้าและแพง

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

มาตรวัดความเร็วและต้นทุนที่แสดงฟังก์ชันที่ทั้งช้าและแพง กำลังชี้ไปสู่การปรับแต่ง

การ Deploy แอปพลิเคชันบน AWS

Concurrency: ต้นทุน vs. cold start


Reserved: จำกัดและปกป้อง

  • จำกัดและรับประกัน capacity ของฟังก์ชัน
  • ควบคุมต้นทุนได้ถูกที่สุด แต่ไม่ช่วยเรื่อง cold start

Provisioned: จ่ายเพื่อความพร้อม

  • รักษา instance ให้พร้อมใช้เสมอ ไม่มี cold start
  • ต้นทุนสูงขึ้น ใช้เฉพาะจุดที่ latency สำคัญจริงๆ
การ Deploy แอปพลิเคชันบน AWS

ปรับขนาดหน่วยความจำด้วย duration-cost curve

กราฟ duration-cost เมื่อเพิ่มหน่วยความจำ: เส้น duration ลดลงแล้วราบ, ต้นทุนรวมเป็นรูป U โดยไฮไลต์จุดหน่วยความจำที่ประหยัดที่สุด

  • หน่วยความจำมากขึ้น = CPU มากขึ้น = duration สั้นลง
  • ต้นทุน = ราคาหน่วยความจำ x duration
  • จุดที่ถูกที่สุดมักอยู่ที่ ตรงกลาง
  • ทดสอบหลายขนาด แล้วเลือกจุดที่เหมาะ
การ Deploy แอปพลิเคชันบน AWS

การแคชระดับแอปพลิเคชัน

  • นำผลลัพธ์กลับมาใช้ซ้ำภายใน execution context
  • Lambda ที่ warm จะเก็บ global ไว้ระหว่างการเรียกใช้
  • แคช config, client และข้อมูลที่เข้าถึงบ่อย
  • ElastiCache สำหรับแคชที่ใช้ร่วมกันระหว่าง instance

การแคชใน execution context ของ Lambda: global client object ถูกนำมาใช้ซ้ำระหว่างการเรียกใช้แบบ warm และ ElastiCache cluster ที่แชร์ข้อมูลร้อนระหว่าง function instance หลายตัว

การ Deploy แอปพลิเคชันบน AWS

การแคชที่ edge ด้วย CloudFront

  • CloudFront: แคช response ที่ edge location
  • ให้บริการ request ซ้ำโดยไม่ต้องผ่าน backend
  • cache key รวมheader, query string และ cookie ได้
  • คอนเทนต์แบบ static และแคชได้ขยายตัวโดยไม่มีค่าใช้จ่ายเพิ่ม

การแคชที่ edge ของ CloudFront: โลกพร้อม edge location ที่ให้บริการ response จากแคชแก่ผู้ใช้ใกล้เคียงโดยไม่ต้องผ่าน backend พร้อมการตั้งค่า cache key ที่แสดง header และ query string

การ Deploy แอปพลิเคชันบน AWS

เลือกชั้นแคชให้เหมาะสม

แคช 3 ชั้นซ้อนกัน: CloudFront ที่ edge สำหรับคอนเทนต์ static ที่ใช้ร่วมกันวงกว้าง, แคช in-memory ต่อ instance สำหรับออบเจ็กต์ที่เข้าถึงบ่อย และ ElastiCache หรือ DAX สำหรับการอ่านข้อมูลร้อนที่แชร์กัน

  • Edge (CloudFront): คอนเทนต์ static ที่ใช้ร่วมกันวงกว้าง
  • Application (in-memory): ออบเจ็กต์ร้อนต่อ instance
  • Data (ElastiCache/DAX): การอ่านข้อมูลร้อนที่แชร์กัน
  • ใช้แบบซ้อนชั้น แต่ละชั้นลดต้นทุนคนละส่วน
การ Deploy แอปพลิเคชันบน AWS

รวมแนวทางการปรับแต่ง

  • ปรับขนาดหน่วยความจำจากduration-cost curve
  • เพิ่ม provisioned concurrency เฉพาะจุดที่ latency สำคัญ
  • แคชที่ชั้น edge, app และ data
  • วัดผล เปลี่ยนทีละอย่าง แล้ววัดซ้ำ

สรุปการปรับแต่ง: duration-cost curve สำหรับปรับขนาดหน่วยความจำ, การตัดสินใจเรื่อง provisioned concurrency, ไดอะแกรม 3 ชั้นแคช และวงจร measure-change-measure

การ Deploy แอปพลิเคชันบน AWS

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

การ Deploy แอปพลิเคชันบน AWS

Preparing Video For Download...