Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
68 lines (36 sloc) 10.7 KB
description
เซิฟเวอร์ไม่ล่ม ยืดหดได้ดั่งใจหมาย เพื่อรอบรับผู้ใช้ปริมาณมากๆ

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 อย่างละเอียด

{% 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 %}

You can’t perform that action at this time.