Load balance สำหรับ app ที่มี traffic เยอะ
เชื่อว่าหลายๆคนคงเคยเจอปัญหา server ไม่สามารถรองรับการใช้งานของ user จริงได้ ไม่ว่าจะด้วยจาก มี traffic เข้ามาเยอะเกินไป, server จัดการ load ไม่ทัน ซึ่งส่วนใหญ่เราก็จะแก้ปัญหากันเบื้องต้นด้วยการ optimization แต่อย่างไรก็ดีต่อให้เรา optimize แอพพลิเคชั่นเราดีแค่ไหน มันก็จะมี limit ของ load อยู่ดี ดังนั้น Load Balancer จึงเข้ามามีส่วนสำคัญในการช่วยแก้ไขปัญหาดังกล่าว
Load Balancer คือ ระบบที่ช่วยเรากระจาย request หรือ load จาก user ไปยังเครื่อง server หรือ service โดยที่ไม่จำเป็นต้องซื้อเครื่องที่ Spec สูงมากๆ ซึ่งมีราคาแพงมาเปลี่ยนแทนเครื่องเดิม แต่สามารถใช้เครื่องที่ Spec เท่าๆกันหลายเครื่อง มาทำงานร่วมกันแทน หรือเราจะทำการ step scaling (เพิ่ม spec)เครื่อง server ของเรา ก็ยังทำได้
ข้อดีของ Load Balancer
1. เพิ่มประสิทธิภาพให้ระบบแอปพลิเคชัน ในกรณีที่ต้องการรองรับการใช้งานของ user ที่มีจำนวนมากขึ้น เราสามารถที่จะเพิ่มจำนวนของ application service เช่น api service หรือ micro service ต่างๆ โดยการเพิ่มจำนวนของ server และกำหนด Algorithms สำหรับจัดการ traffic เช่น ถ้า in-traffic ถึงตามจำนวนที่เราตั้งไว้ให้ทำการเพิ่มจำนวน server อัตโนมัติ เพื่อทำให้การใช้งานของ user ให้สอดคล้องกับ resource ของ server นั้นๆ ได้
2. ทำให้แอปพลิเคชัน มี High Availability (HA) มากขึ้น โดยปกติ load balancer ที่ผู้ให้บริการ cloud จะมีระบบ health checker ไว้สำหรับการตรวจสอบว่า service ที่ load balancer ดูแลอยู่ทำงานได้อย่างปกติหรือไม่ และถ้า health checker พบว่ามี service ไหนพังมันก็จะทำการ หยุดส่ง load และ restart service ให้เราอัตโนมัติ ซึ่งทำให้ application สามารถให้บริการและใช้งานได้อย่างต่อเนื่อง
3. ช่วยเพิ่มความเร็วของ แอปพลิเคชัน หรือ service เนื่องจาก load balancer ทำการกระจาย traffic ของ user ไปยัง แอพพลิเคชั่น ที่ทำงานอยู่บน server หลายๆ เครื่อง ทำให้การใช้งานของ user ไม่ต้องรอคิวหรือรอการ process ข้อมูลที่ต้องใช้เวลานานเหมือนกับ application ที่ทำงานอยู่บน server เครื่องเดียวที่มี resource อยู่อย่างจำกัดทั้ง CPU, Memory และ Harddisk ทำให้การใช้งานของ user เร็วขึ้น เช่น สามารถโหลดข้อมูลรูปภาพจากเว็ปได้เร็วขึ้น การเข้าถึงข้อมูลของ application ได้เร็วขึ้น เป็นต้น
ตัวอย่างการตั้งค่า load balancer บน AWS ECS
ก่อนอื่นมาทำความรู้จัก ECS กันก่อน Amazon ECS คือบริการจัดประสานคอนเทนเนอร์ที่มีการจัดการเต็มรูปแบบ และปรับขนาดแอปพลิเคชันที่มีคอนเทนเนอร์ได้อย่างง่าย หรือก็คือ ระบบที่ช่วยเราจัดการ container แบบครบวงจรนั้นเอง และแน่นอน ECS ก็มี load balancer มาให้เราใช้งานกันด้วย
ในบทความนี้จะไม่ได้แสดงวิธีการสร้าง service บน ECS แต่จะแสดงเฉพาะส่วน load balancer เท่านั้น ถ้าหากสนใจเรื่อง ECS สามารถรอติดตาม blog ใหม่ๆของเราได้เลย
1. เมื่อเราสร้าง ECS Cluster เรียบร้อยแล้ว ในส่วนของ service เราจะต้องเลือก task หรือ container มารันบน service ได้
ECS Cluster
เลือก task ที่ต้องการรันใน service
2. ในส่วน desired task คือจำนวน task น้อยสุดที่เราต้องการให้ service นี้รันอยู่ตลอดเวลา หรือก็คือ standby tasks นั่นเอง
เลือกจำนวน tasks ที่ต้องการ
3. ส่วนของ auto scaling พระเอกของเราในวันนี้
คำอธิบายในแต่ละหัวข้อ
1. Health check grace period : เวลาที่ health check จะทำงานเป็นทุกๆกี่วินาที
2. Minimum number of tasks : จำนวน tasks น้อยสุดของ load balancer ส่วนนี้ถ้าเราใส่ตัวเลขไม่เท่ากับ desired task ตัว auto scaling จะปรับจำนวน tasks ตาม Minimum number of tasks
3. Maximum number of tasks : จำนวน tasks สูงสุด ที่ auto scaling สามารถ scaling ได้
4. Scaling policy
- Target tracking: เพิ่มจำนวน tasks ตาม policy ที่เรากำหนด
- Step scaling: เพิ่มจำนวน tasks ตาม step ได้ แต่เราจะต้องไปสร้าง alarm policy ที่ cloudwatch ก่อน
เราสามารถลองปรับการตั้งค่า auto scaling ได้ตามการใช้งานจริงของแอพพลิเคชั่นเราได้เลย ซึ่งแต่ละแอพพลิเคชั่นก็จะมีการตั้งค่าที่ไม่เหมือนกันขึ้นอยู่กับประเภท, การใช้งานจริงนั่นเอง