มือใหม่หันเขียนโค้ด
Software Design

Auto Scaling

เซิฟเวอร์ไม่ล่ม ยืดหดได้ดั่งใจหมาย เพื่อรอบรับผู้ใช้ปริมาณมากๆ

เคยเป็นไหมเซิฟเวอร์บางวันก็ช้าบางวันก็เร็ว เพราะปริมาณคนเข้ามาใช้งานในแต่ละวันไม่เท่ากัน แล้วเราจะรับมือกับเหตุการณ์พวกนี้ยังไงดี วันนี้โดเรม่องขอเสนอตอน Auto Scaling ที่จะมาช่วยเพื่อนๆฝ่าอุปสรรค์เรื่องนี้ไปเองฮ๊าฟฟฟ

🤔 Auto Scaling คืออะไร ?

Auto Scaling คือการให้เซิฟเวอร์สามารถปรับเพิ่มหรือลดขนาดของเซิฟเวอร์เองตามความเหมาะสมที่เราตั้งไว้ เช่นมีคนเข้าเว็บเราเยอะแล้ว CPU เริ่มขึ้นสูง 70% กว่าล่ะ ให้ทำการขยายเซิฟเวอร์เพื่อให้รองรับคนปริมาณมาก แล้วพอตกกลางคืนที่ไม่มีคนเข้าเว็บเราแล้ว ก็ให้ลดขนาดของเครื่องลง เพื่อให้เซิฟเวอร์อยู่ในภาพที่เหมาะสมกับที่มันควรจะเป็นยังไงล่ะ

🤔 ทำไมต้องให้เซิฟเวอร์เพิ่มลดขนาดตัวเองได้ ?

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

ซึ่งจากรูปจะเห็นว่า ถ้าเราจะให้เซิฟเวอร์สามารถรองรับผู้ใช้งานเท่านี้ตลอดเวลา ตัวเซิฟเวอร์ที่เราเปิดอยู่ก็จะต้องมีศักยภาพอยู่ราวๆเส้นสีม่วง (Provisioned capacity) ตามรูปด้านบนเป็นอย่างน้อยถึงจะรับผู้ใช้ที่มีพฤติกรรมแบบนี้ได้

แต่ในความเป็นจริงลูกค้าที่เข้ามาใช้งานมันไม่เป็นแบบนั้นเสมอไปนะซิ เช่น ช่วงเทศกาลต่างๆแบบวันปีใหม่ไรงี้ ลูกค้าจะรุมกรูเข้ามาใช้งานอย่างโถมกระหน่ำทำให้กราฟเป็นตามรูปด้านล่าง

ปัญหาที่เกิดขึ้นคือถ้าเราจะรับลูกค้าปริมาณขนาดนี้ นั่นหมายความว่าตัวเซิฟเวอร์เราจะต้องมีศักยภาพอย่างน้อยเท่า เส้นสีม่วงด้านบน (Provisioned capacity) ถึงจะรับผู้ใช้งานในช่วงเทศกาลปีใหม่ได้ ซึ่งปัญหาของมันเราจะเห็นได้ว่า ถ้าเราเปิดเครื่องเท่าเส้นสีม่วงเลย มันจะเปลืองทรัพยากรโดยใช่เหตุ เพราะเครื่องเราใช้งานจริงๆแค่ 24% ในวันปรกติเท่านั้น แต่เราต้องจ่ายเงินค่าเครื่องเต็มๆทั้งๆที่เครื่องยังทำงานได้อีก 76% นั่นเอง

เรื่องที่เกิดขึ้นเป็นเรื่องปรกติที่พบได้ทั่วไป แล้วปรกติเราก็จะให้คนมานั่งดูว่าเมื่อไหร่ที่ควรจะขยายเครื่องเมื่อไหร่ควรจะลดเครื่องซึ่งมันไม่สะดวกเลย แถมบางทีมี Human error ขยายแล้วลืมลดไรงี้อีก ดังนั้นในรอบนี้เราจะใช้ Auto Scaling มาช่วยแก้ปัญหาปวดหัวแบบนี้ออกจากชีวิตเราเสียที

🤔 Auto Scaling จะมาช่วยยังไง ?

จากปัญหาที่ว่ามา เมื่อเราใช้ Auto Scaling สิ่งที่เกิดขึ้นคือ ตัวเซิฟเวอร์จะสามารถ เพิ่ม/ลด ขนาดของมันเองได้ โดยขนาดที่มันขยายออกจะเพียงพอต่อความต้องการของ traffic ที่เข้ามาพอดี และเมื่อไม่มีคนมาใช้งานแล้ว ตัวเซิฟเวอร์ก็จะปรับลดขนาดลงมาเป็นขนาดปรกติให้เองอัตโนมัติ ทำให้เราสามารถลดภาระที่ให้คนมาคอยตรวจดูแล้วปล่อยเซิฟเวอร์ให้มันดูแลตัวมันเองได้ยังไงล่ะ

สีฟ้าคือ Auto Scaling จะทำการขยายเซิฟเวอร์เมื่อ traffic สูงขึ้น และจะลดขนาดเมื่อ traffic ต่ำลงเองอัตโนมัติ

🤔 การทำ Scaling มีแบบไหนบ้าง ?

เมื่อพูดถึงการทำ Scaling นั้นในคลาว์จะมี 2 รูปแบบให้เราเลือกเล่นครับ คือ Horizontal กับแบบ Vertical ซึ่งทั้ง 2 แบบจะจะต่างกันอย่างสิ้นเชิงเลยดังนี้

Vertical

ภาษาไทยคือการขยายในแบบแนวดิ่ง ซึ่งมันเป็นการอัพเกรด/ดาวโกรดเซิฟเวอร์โดยการเพิ่มความแรงให้กับเซิฟเวอร์ เช่น เพิ่ม CPU, Ram, Disk อะไรพวกนี้ ซึ่งมันจะทำให้เซิฟเวอร์สามารถรับการประมวลผลที่หนักๆได้มากขึ้น

Horizontal

ภาษาไทยคือการขยายในแนวขวาง ซึ่งมันเป็นการเพิ่มจำนวนเครื่องเซิฟเวอร์ให้มากขึ้น แล้วกระจายงานออกไปให้เครื่องต่างๆช่วยกันทำงาน

🎥 วีดีโอ Auto Scaling อย่างละเอียด

🤔 แล้วมันต้องทำยังไง ?

เนื่องด้วยเวลาจำกัดในรอบนี้ผมขอให้ดูวีดีโอพาทำ Auto Scaling ทั้งแบบ Manual และแบบ Auto บน Azure แทนละกันนะครับ ง่ายนิดเดียว

🎯 บทสรุป

เราสามารถตั้งให้เซิฟเวอร์เพิ่มลดขนาด หรือเพิ่มลดจำนวนของตัวมันเองได้โดยการตั้ง configuration ตามความเหมาะสมเพียงเท่านี้เราก็สามารถอุ่นใจในตัวเซิฟเวอร์ของเราว่ามันสามารถรับโหลดงานปริมาณมากๆได้แล้วโดยที่เซิฟเวอร์จะรับไหว

ข้อแนะนำ ในการใช้งานจริงบางทีเราก็ไม่สามารถบอกได้ว่าเราควรจะตั้งค่าให้เซิฟเวอร์แบบไหนดีถึงจะเหมาะสม ซึ่งผมแนะนำว่าให้ดูกราฟการใช้งานเซิฟเวอร์ย้อนหลังว่า พฤติกรรมการทำงานของเซิฟเวอร์เป็นอย่างไรแล้วเราค่อยดูว่ามันมีปัจจัยอะไรบ้างที่เกี่ยวข้องแล้วค่อยพิจารณาว่าควรจะตั้งค่าแบบไหนอีกทีครับ