ตอนที่ 1 : ความเข้าใจเกี่ยวกับ Load Balance เทคนิคการทำ Load Balance บน VM ได้มีโอกาสการทำ Load Balance บน VM เพื่อรองรับจำนวนผู้ใช้ในจำนวนมาก ๆ เพราะปกติแล้ว Web Server ทั่ว ๆ ไปเช่น Server 1 เครื่อง จะมี Limit ความสามารถในการรองรับจำนวนผู้ใช้งานที่จำกัด ต่อให้เครื่องแรงแค่ไหนก็ตาม แต่เมื่อมีปริมาณผู้ใช้จำนวนมากตัว Application ของ Web Server ก็ย่อมที่จะทำงานหนักมาก และอาจจะเกิด Connection เต็ม การรอ Queue ก็เกิดขึ้น อันเนื่องจากปริมาณ Limit ของ Server ปัญหาที่ตามมาก็คือ Server Load ตัว CPU ก็ทำงานสูง และผลก็อาจจะทำให้ Web Server ค้างหรือแฮ้ง โดยปัญหานี้เว็บไซต์ใหญ่ ๆ จะเจอปัญหากันอย่างแน่นอน แต่ก็สามารถที่จะหา Solution ในการรองรับจำนวนผู้ใช้ในปริมาณมาก ๆ ด้วยการทำ Load Balance ซึ่งปกติแล้วในกรณีที่เราจะทำเองนั้น ค่อนข้างจะมีขั้นตอนและวิธีการยากพอสมควร แต่ปัญหานี้มันจะง่ายมากบน Windows Azure เพราะ Virtual Machine (VM) บน Windows Azure สามารถสร้าง Server ให้อยู่ในรูปแบบของ Load Balance ได้อย่างง่ายดาย
Load Balance บน Windows Azure VM
จากรูปจะอธิบายถึงกระบวนการทำงานของ Load Balance ซึ่งเป็นขั้นตอนที่ง่าย ๆ คือ เช่น กรณีที่เรามี Web Application เราจะสร้าง VM ที่เป็น Application ของ Web Server ขึ้นมาหลาย ๆ ตัว ซึ่งแต่ล่ะตัวจะเรียกใช้ Server ที่เป็น Database ตัวเดียวกัน เพื่อให้ข้อมูลนั้นมาจากแหล่งเดียวกัน และจากรูปจะเห็นว่า VM ที่เป็น Web Server จะทำหน้าที่กระจายการทำงานไปในแต่ล่ะเครื่อง ซึ่งวิธีนี้เอง จะทำให้ Server นั้นไม่เกิดการรอการเกิดขึ้น เพราะต่อให้มี ผู้ใช้มากแค่ไหนก็ตาม เราก็สามารถสร้างจำนวน VM ขึ้นมารองรับการใช้งานได้
กรณีศึกษา
ผมได้มีโอกาสใช้งาน Load Balance ของ Azure VM ได้มีการใช้งานกับเว็บไซต์ของ thaicreate.com (PHP กับ MySQL Database) โดยรูปแบบการใช้งานคือจะสร้าง VM ที่เป็น Web Server จำนวน 3 ตัว และ VM ที่เป็น Database จำนวน 1 ตัว สรุปแล้วคือใช้ VM ทั้งหมด 4 ตัว สำหรับวิธีการที่จะสร้าง VM ที่เป็น Web Server ขึ้นมา 3 ตัวให้เหมือนกันนั้น คือการสร้าง VM จากนั้นใช้การ Capture เป็น Image หลังจากนั้นเราสามารถสร้าง VM หลาย ๆ ตัวด้วยการเลือกจาก Image ที่เราสร้างไว้ ซึ่งจะใช้การสร้างกี่ตัวก็ได้ และสามารถสร้างได้ในเวลาอันรวดเร็ว
ตอนที่ 8 : การติดตั้ง OS จาก Image บน Virtual Machine บน Windows Azure
เข้าใจเพิ่มเติมเกี่ยวกับ Load Balance
การกระจายผู้ใช้ไปยัง Web Server ต่าง ๆ นั้น นั้นหมายถึง VM ที่ทำหน้าที่เป็น Web Server ก็จะต้องทำการติดตั้งตัว Source โปรแกรมที่เหมือนกันทุกประการ ซึ่งวิธีนี้เมื่อเรามีการ แก้ไข Source ของเว็บไซต์ ก็จะต้องทำการตาม Update ไปยังทุก ๆ VM ที่ทำหน้าที่เป็น Web Server แต่จากกรณีศึกษานี้ จะใช้การแยก Database มาอีกเครื่องหนึ่ง ซึ่งวิธีนี้จะทำให้ทุก ๆ VM เรียกข้อมูลเครื่องเดียวกัน และข้อมูลจะมีการ Update ตลอดเวลา ฉะนั้น เครื่องที่ทำหน้าที่เป็น Database นั้นจะต้องมีความแรงพอสมควร
ขั้นตอนการสร้าง Load Balance บน Azure Virtual Machine ในตัวอย่างนี้เราจะสร้าง VM ที่เป็น Web Server จำนวน 3 ตัว และ VM ที่เป็น Database จำนวน 1 ตัว และในตัวอย่างนี้จะไม่ได้อธิบายถึงขั้นตอนการติดตั้ง Web Server เช่น Apache / MySQL หรือ FTP (สามารถอ่านได้จากหัวข้อ Windows Azure กับ Virtual Machine)
สร้าง VM ที่เป็น Web Server ตัวที่ 1
NEW -> COMPUTE -> VIRTUAL MACHINE -> FROM GALLERY
ตั้งชื่อเป็น vm-web1
VM ตัวแรกจะเลือกเป็น Create a new cloud services และสร้าง Create an availability set สำหรับ กลุ่มของ Server
ตอนนี้เราได้ VM ตัวแรกชื่อว่า vm-web1
สร้าง VM ที่เป็น Web Server ตัวที่ 2
ชื่อว่า vm-web2
ขั้นตอนนี้เราจะเลือกให้ VM นี้ทำงานร่วมกับ Cloud ของ VM ที่ได้สร้างไว้ก่อนหน้านี้ รวมทั้ง Availability Set กลุ่มเดียวกัน
ตอนนี้เราได้ VM ตัวที่สองชื่อว่า vm-web2
สร้าง VM ที่เป็น Web Server ตัวที่ 2
ชื่อว่า vm-web3
และเช่นเดิมให้เลือก Cloud และ Availability Set ตัวเดียวกัน
ตอนนี้เราได้ VM ขั้นมาทั้ง 3 ตัวแล้ว โดยทั้งหมดจะทำงานภายใต้ Cloud และ Availability Set เดียวกัน
การสร้าง Endpoint หรือ Port สำหรับ Web Server สำหรับ Endpoint ของ VM ที่เป็น Web Server ในเครื่อง Load Balance ที่จำเป็นจะต้องใช้คือ Port : 80 และในทุก ๆ VM จะต้องทำการ Config ค่าที่เหมือนกัน
ใน vm-web1 ให้เลือก Add Endpoint
เลือก Add a Stand-Alone Endpoint
กำหนด Port เป็น 80 และเลือก Create A Load-Balanced Set
ตั้งชื่อ Port สำหรับ Load Balance ซึ่งในที่นี้จะเป็น 80
เราได้ Endpoint ของ vm-web1 ซึ่งเป็น Load Balance ใน Port 80 และ VM อื่น ๆ จะต้องเรียกใช้งาน Port นี้เช่นเดียวกัน
vm-web2 เลือก Add an Endpoint To an Existing Load-Balance Set ของที่เป็น VM แรก
ได้ Endpoint ของ VM สอง
vm-web3 เลือก Add an Endpoint To an Existing Load-Balance Set ของที่เป็น VM แรกเช่นเดียวกัน
ได้ Endpoint ของ VM สาม
หลังจากที่เราได้ Web Server ที่เป็น VM ทำงานในรูปแบบของ Load Balance บน Port 80 ซึ่งตอนนี้ VM ทั้ง 3 ตัว จะทำงานกระจายโหลดไปในแต่ล่ะเครื่อง และเครื่องไหนที่ไม่ได้เปิดไว้ ก็จะไม่มีการทำงาน ซึ่งจะกระจายไปยังเครื่องที่ Online อยู่เท่านั้น
การสร้าง VM ไว้รัน Database สำหรับเรียกใช้งานด้วย Web Server
NEW -> COMPUTE -> VIRTUALMACHINE -> FROM GALLERY
ตั้งชื่อเป็น vm-db
และเลือก Create a new cloud services กำหนด URL ของ Cloud
เราได้ VM ที่เป็น Database เรียบร้อยแล้ว
และที่ได้กล่าวไว้ก่อนหน้านี้คือ vm-db จะทำงานเป็น Database และถูกเรียกใช้งานด้วย VM ที่เป็น Web Server ทั้ง 3 ตัว ซึ่งเราจะต้องสร้าง Endpoint สำหรับการเชื่อมต่อมายัง VM ที่เป็น Database
เลือก Add a Stand-Alone Endpoint
เลือก MySQL ซึ่งค่า Default จะใช้ Port : 3306
เราจะได้ Endpoint สำหรับการเรียกใช้งาน Database บน vm-db เรียบร้อยแล้ว ซึ่ง VM ทั้ง 3 ตัวสามารถทำการ Connect มายัง VM ที่เป็น Database ด้วย URL ของ Cloud ตามด้วย Port : 3306 เช่น
และจากตัวบทความนี้เราจะได้โครงสร้างของ VM ที่เป็น Load Balance ดังนี้
รูปโครงสร้างการทำงานของ VM / Load Balance และ Database
ในบทความนี้เราจะเห็นว่า VM ที่ทำหน้าที่เป็น Load Balance จะมีอยู่ 3 ตัว ซึ่งในกรณีที่ทำงานเราจะเปิดให้ VM ทั้งสามทำหน้าที่กระจายจำนวนผู้ใช้งานไปในแต่ล่ะ VM แต่ในการใช้งานจริงแล้ว การทำงานของเว็บไซต์จะ Peak แค่บางช่วงเวลาเท่านั้น และการเปิด VM ไว้ตลอดก็เท่ากับเป็นการเสียค่าใช้จ่ายโดยไม่จำเป็น เพราะบางช่วงเวลา อาจจะใช้แค่ VM จำนวน 1 เครื่องก็สามารถที่จะรองรับการทำงานได้สบาย ๆ ซึ่งปัญหานี้ Windows Azure จะมีระบบ Auto Scale ทำหน้าที่ เปิด-ปิด จำนวน VM ให้สอดคล้องกับจำนวนผู้ใช้งาน สามารถใช้งาน VM ให้มีประสิทธิภาพสูงสุด ลดค่าใช้จ่ายที่ไม่ได้ใช้ และไม่จำเป็นได้ โดยบทความและเทคนิคการทำ Auto Scale ผมได้เขียนวิธีไว้ในบทความถัดไป