> For the complete documentation index, see [llms.txt](https://www.saladpuk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.saladpuk.com/cloud/azure101/auto-scaling.md).

# Auto Scaling

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

## 🤔 Auto Scaling คืออะไร ?

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

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

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

![](/files/-M-_WcLoHZf775PPDdcK)

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

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

![](/files/-M1VPSJOcplUofaEU1vQ)

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

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

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

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

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

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

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

![](/files/-M0cDOpfPNIf4spRHcNe)

### Vertical

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

### Horizontal

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

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

{% embed url="<https://www.youtube.com/watch?v=8QD8fp_i-tM&list=PLUjAn8nwWniiReiOqUqYwxG7ny2bhENMg&index=15>" %}

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

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

{% embed url="<https://www.youtube.com/watch?v=C8qGxKlSVEA&list=PLUjAn8nwWniiReiOqUqYwxG7ny2bhENMg&index=16>" %}

## 🎯 บทสรุป

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

{% hint style="success" %}
**ข้อแนะนำ**\
ในการใช้งานจริงบางทีเราก็ไม่สามารถบอกได้ว่าเราควรจะตั้งค่าให้เซิฟเวอร์แบบไหนดีถึงจะเหมาะสม ซึ่งผมแนะนำว่าให้ดูกราฟการใช้งานเซิฟเวอร์ย้อนหลังว่า พฤติกรรมการทำงานของเซิฟเวอร์เป็นอย่างไรแล้วเราค่อยดูว่ามันมีปัจจัยอะไรบ้างที่เกี่ยวข้องแล้วค่อยพิจารณาว่าควรจะตั้งค่าแบบไหนอีกทีครับ
{% endhint %}
