รูปแบบสถาปัตยกรรมแอปพลิเคชันบน AWS
การ Deploy แอปพลิเคชันบน AWS
Dunieski Otano
Amazon Web Services Solutions Architect
แนะนำผู้สอน
ทำไมสถาปัตยกรรมที่เหมาะสมจึงสำคัญ
สถาปัตยกรรมคือการ
แลกเปลี่ยน (trade-off)
ไม่มีคำตอบที่ถูกต้องเพียงหนึ่งเดียว
คำถาม 3 ข้อที่กำหนดทุกการตัดสินใจ:
องค์ประกอบต่างๆ
ถูกผูกติดกัน (coupled)
แน่นแค่ไหน?
state
อยู่ที่ไหน?
การสื่อสารเป็นแบบ
synchronous หรือ asynchronous
?
เลือก pattern ให้เหมาะกับ
workload
ไม่ใช่ตามกระแส
เหตุการณ์คืนวันศุกร์
Payment API ที่ช้าทำให้กระบวนการ checkout หยุดชะงัก
ทุก service รอแบบ synchronous
การแก้ปัญหาอยู่ที่สถาปัตยกรรม ไม่ใช่การทำให้ API เร็วขึ้น
สถาปัตยกรรมส่งผลต่อการ deploy อย่างไร
Pattern ที่เลือกกำหนดว่าแอปจะ
scale และล้มเหลว
อย่างไร
การออกแบบแบบ tightly coupled พังภายใต้โหลดสูง
Pattern ที่เหมาะสมทำให้การ deploy คาดการณ์ได้
โค้ดเดิม แต่พฤติกรรมใน production ต่างกันมาก
รูปแบบสถาปัตยกรรมหลัก
Monolithic
: หน่วย deploy เดียว เริ่มต้นง่าย
Microservices
: service อิสระ deploy แยกกัน
Event-driven
: องค์ประกอบตอบสนองต่อ event ไม่ใช่การเรียกตรง
Fanout
คือ sub-pattern ของ event-driven: event เดียวส่งถึงผู้รับหลายราย
Stateful vs Stateless
Stateless
: ไม่เก็บข้อมูล client ระหว่าง request
instance ใดก็จัดการ request ใดก็ได้
Stateful
: instance จำการโต้ตอบก่อนหน้า
Stateless ช่วยให้
ขยายแนวนอน (scale horizontally)
ได้
ย้าย shared state ไปที่
DynamoDB
หรือ
ElastiCache
Tight vs Loose Coupling
Tight coupling
: caller รอ callee ตอบกลับ
service ที่ช้าเพียงตัวเดียวทำให้ทั้งห่วงโซ่หยุดชะงัก
Loose coupling
: queue ของ
Amazon SQS
คั่นระหว่าง service
producer ทำงานต่อได้แม้ consumer จะหยุด
Synchronous vs Asynchronous
Synchronous
: caller หยุดรอผลลัพธ์
ใช้เมื่อ caller ต้องการคำตอบทันที
Asynchronous
: caller ส่งงานแล้วกลับทันที
ใช้กับงานที่ช้า, มาเป็นชุด หรือไม่เร่งด่วน
รูปแบบความยืดหยุ่นสำหรับการเรียก third-party
Retry with exponential backoff
: รอนานขึ้นระหว่างการลองใหม่แต่ละครั้ง
Circuit breaker
: หยุดเรียก service ที่ล้มเหลวชั่วคราว
Dead-letter queue
: เก็บข้อความที่ล้มเหลวซ้ำๆ ไว้พัก
ใช้ร่วมกัน เพราะการ retry แบบไม่จำกัดยิ่งทำให้ outage รุนแรงขึ้น
มาฝึกกันเถอะ!
การ Deploy แอปพลิเคชันบน AWS
Preparing Video For Download...