Lesson 4Scaling

Auto Scaling

EC2 Auto Scaling ช่วยรักษาจำนวน instances ตาม desired capacity, แทนที่ unhealthy instances และเพิ่ม/ลด capacity ตาม policy ที่กำหนด

Template Launch Template คือ recipe ของ instance เก็บ AMI, instance type, SG, IAM profile, user data และ storage config
Capacity min, desired, max ต้องมีเหตุผล min คือ safety floor, desired คือ current target, max คือเพดาน scale/cost
App design ASG ต้องการ stateless instances เก็บ session/file/state ไว้นอก instance เพื่อให้ replace/scale in ไม่ทำข้อมูลหาย

Launch Template

Launch Template คือ definition สำหรับ launch EC2 เช่น AMI, Instance Type, Security Group, IAM Instance Profile, User Data และ storage Auto Scaling Group ใช้ Launch Template เพื่อสร้าง instance ใหม่อย่างสม่ำเสมอ

Auto Scaling Group

Auto Scaling Group หรือ ASG กำหนด minimum, maximum และ desired capacity รวมถึง subnet/AZ ที่ instance จะถูก launch เมื่อ instance unhealthy หรือถูก terminate ASG สามารถ launch instance ใหม่เพื่อกลับสู่ desired capacity

Settingความหมาย
Minimum capacityจำนวน instance ต่ำสุดที่ ASG รักษาไว้
Desired capacityจำนวน instance ที่ต้องการ ณ ตอนนี้
Maximum capacityเพดานสูงสุดสำหรับ scale out
Health check typeEC2 หรือ ELB health check

Scaling policies

  • Target tracking: รักษา metric เช่น CPU average ใกล้ target value
  • Step scaling: เพิ่ม/ลด capacity ตาม alarm breach เป็นขั้นๆ
  • Scheduled scaling: ปรับ capacity ตามเวลาที่คาดการณ์ load ได้

Design for scaling

Application ที่อยู่หลัง ASG ควร stateless หรือเก็บ state นอก instance เช่น Database, Redis, S3 หรือ shared session store ถ้าเก็บไฟล์หรือ session ไว้บน local disk ของ instance เมื่อ scale in หรือ replace instance ข้อมูลอาจหายหรือไม่สม่ำเสมอ

Common mistakes

  • User Data ไม่ idempotent ทำให้ instance ใหม่ bootstrap ไม่สม่ำเสมอ
  • Health check grace period สั้นเกินไป instance ยัง boot ไม่เสร็จก็ถูก mark unhealthy
  • ตั้ง max capacity ต่ำเกินจน scale out ไม่พอช่วง peak
  • เก็บ upload/session ไว้บน instance local disk

Review questions

Before lab
  1. อธิบาย Launch Template กับ ASG ได้
  2. ตั้ง min, desired, max โดยคิดทั้ง availability และ cost ได้
  3. รู้ว่า workload หลัง ASG ควร stateless หรือเก็บ state นอก instance
  1. Launch Template เก็บ configuration อะไรบ้าง?
  2. Desired capacity ต่างจาก maximum capacity อย่างไร?
  3. ทำไม application หลัง ASG ควร stateless?