เมื่อโปรเจกต์ของคุณเป็นที่ต้องการและมีผู้เยี่ยมชมมาก คุณจะประสบปัญหา – ความจำเป็นในการเพิ่มประสิทธิภาพการทำงานของฮาร์ดแวร์ เนื่องจากควรจะสามารถจัดการและตอบสนองคำขอของผู้ใช้ที่เข้ามาทั้งหมดได้อย่างรวดเร็ว การเพิ่มทรัพยากรเพิ่มเติมจะช่วยเพิ่มประสิทธิภาพในสถานการณ์นั้นได้ชั่วคราว ช่วยป้องกันเซิร์ฟเวอร์จากการล้มเหลว แต่จะไม่สามารถแก้ปัญหาที่เป็นสาเหตุได้ และส่งผลให้จำเป็นต้องตั้งค่า clustering solution ที่มีการทำโหลดบาลานซ์แบบอัตโนมัติในตัว
การปรับคลัสเตอร์แอปพลิเคชันนั้นค่อนข้างง่ายด้วยการใช้ Ruk-Com Cloud เพียงเพิ่มแอปพลิเคชันเซิร์ฟเวอร์ instance อีกไม่กี่ตัวให้กับ Environment ของคุณ นอกจากนี้คุณจะเปิดใช้งานเซิร์ฟเวอร์ NGINX-balancer โดยอัตโนมัติในส่วนของหน้าโปรเจกต์ จะทำหน้าที่รับผิดชอบในการกระจายโหลดอย่างสม่ำเสมอระหว่างจำนวนโหนดเซิร์ฟเวอร์แอปที่ระบุ ซึ่งดำเนินการโดยอาศัยการ load balancing

ด้วยวิธีนี้ประสิทธิภาพแอปพลิเคชันของคุณจะเพิ่มขึ้นอย่างมากโดยเพิ่มจำนวนคำขอที่สามารถให้บริการได้ในภายครั้งเดียว เป็นโบนัสที่ดีที่คุณสามารถลดความเสี่ยงของการไม่สามารถเข้าถึงแอปได้เนื่องจากหากมีเซิร์ฟเวอร์หนึ่งล้มเหลว แต่ส่วนที่เหลือทั้งหมดจะยังคงทำงานต่อไป
เพื่อพิสูจน์ว่าโครงการนี้มีประสิทธิภาพนั้น เราจะแสดงวิธีการทดสอบการจัดสรรภาระงานด้วยการใช้เครื่องมือ link # ApacheBench (ab) เป็นตัวช่วย มีความเป็นไปได้หลายประการในการทดสอบความสามารถของเซิร์ฟเวอร์ในการรับมือกับโหลดที่เพิ่มขึ้นและเปลี่ยนแปลงได้ แม้ว่า ab ได้รับการออกแบบมาสำหรับการทดสอบการติดตั้ง Apache แต่ก็สามารถใช้เพื่อเปรียบเทียบเซิร์ฟเวอร์ HTTP ต่าง ๆ ได้
มาเริ่มและทดสอบกันแบบเรียลไทม์กัน
สร้าง Environment และ Deploy แอปพลิเคชัน
1. เข้าสู่ระบบ Ruk-Com Platform และคลิกปุ่ม Create environment ที่มุมบนซ้ายของแดชบอร์ด

2. หน้าต่างไดอะล็อก Environment topology จะปรากฏขึ้นทันที คุณสามารถเลือกภาษาโปรแกรมมิ่ง แอปพลิเคชัน/เว็บเซิร์ฟเวอร์และฐานข้อมูลที่ต้องการได้
ในขณะที่เรากำลังจะทดสอบการโหลดเซิร์ฟเวอร์ Apache PHP ให้เลือกและระบุลิมิตการใช้ทรัพยากรโดยใช้แถบเลื่อน cloudlets จากนั้นแนบ Public IP address สำหรับเซิร์ฟเวอร์นี้และพิมพ์ชื่อของ Env ใหม่ (เช่น balancer) คลิก Create.

3. ในเวลาเพียงไม่กี่นาที Env ของคุณจะปรากฏที่แดชบอร์ด

4. เมื่อสร้าง Env สำเร็จแล้วคุณสามารถปรับใช้ (deploy) แอปพลิเคชันของคุณได้ เราจะใช้แพ็กเกจ HelloWorld.zip เป็นค่าเริ่มต้น ดังนั้นคุณเพียงแค่ต้องปรับใช้ (deploy) กับ Env ที่ต้องการด้วยปุ่มที่เกี่ยวข้องและยืนยันการปรับใช้ (deploy) ในเฟรมที่เปิดอยู่

การทดสอบ Control Point
ในการวิเคราะห์ผลลัพธ์คุณจะต้องมีบางสิ่งเพื่อเปรียบเทียบ ดังนั้นเรามาทำการทดสอบจุดควบคุมโดยใช้ Environment ที่สร้างขึ้นเป็นแบบแอพพลิเคชั่นเซิร์ฟเวอร์แบบโหนดเดียว
ดังที่ได้กล่าวไว้ข้างต้นเราจะใช้เครื่องมือ ApacheBench (ab) เพื่อวัตถุประสงค์เหล่านี้ สามารถสร้างการโหลดแบบซิงเกิล้เธรดได้โดยการส่งคำขอพร้อมกันตามจำนวนที่ระบุไปยังเซิร์ฟเวอร์
ดังนั้น ให้ทำตามขั้นตอนด้านล่างนี้
1. ApacheBench เป็นส่วนหนึ่งของการแจกจ่ายซอร์ส Apache มาตรฐาน ดังนั้นหากคุณยังไม่มี ให้ใช้คำสั่งต่อไปนี้ผ่านเทอร์มินัล (หรือข้ามขั้นตอนนี้ไปถ้าคุณมี)
apt-get install apache2-utils
รอจนกว่าการติดตั้งจะเสร็จสมบูรณ์
หมายเหตุ :
สามารถดูข้อมูลโดยละเอียดเกี่ยวกับคำสั่ง ab ที่ใช้เพิ่มเติมได้ตาม link
2. ป้อนบรรทัดถัดไปนี้ในเทอร์มินัล:
ab -g res1.tsv -n 500 -c 10 {URL_to_your_env}
แทนที่ส่วน {URL_to_your_env} ด้วยลิงก์ที่ไปยัง Env ของคุณ (เช่น ในกรณีของเราคือ http://balancer.app.ruk-com.cloud/) ในการรับให้คลิกปุ่ม Open in Browser ถัดจาก Env และคัดลอก URL ที่เกี่ยวข้องจากแถบที่อยู่ของเบราว์เซอร์

คำสั่งที่ระบุจะส่งจำนวนคำขอทั้งหมด 500 คำขอไปยัง Env ที่ระบุ ซึ่งแบ่งออกเป็นชุดของคำขอพร้อมกัน 10 รายการในครั้งเดียว ผลลัพธ์ทั้งหมดจะถูกเก็บไว้ในไฟล์ res1.tsv ภายในโฟลเดอร์ home ของคุณ (หรือป้อนพาธแบบเต็มไปยังไดเร็กทอรีที่ต้องการหากคุณต้องการเปลี่ยนตำแหน่งไฟล์)
นอกจากนี้คุณสามารถระบุพารามิเตอร์ที่กำหนดเองสำหรับคำสั่งที่กล่าวถึงข้างต้นได้หากต้องการ

การทดสอบนี้อาจใช้เวลาสักครู่ขึ้นอยู่กับพารามิเตอร์ที่ตั้งไว้ดังนั้นโปรดอดใจรอ
3. ไฟล์ที่ถูกสร้างขึ้นผลลัพธ์ควรมีลักษณะดังภาพด้านล่าง

เปลี่ยนการตั้งค่า Environment
1. กลับไปที่แดชบอร์ด Ruk-Com Cloud แล้วคลิก Change environment topology สำหรับ environment balancer ของคุณ

2. ภายในกรอบ Environment topology ที่เปิดอยู่ ให้เพิ่มแอปพลิเคชันเซิร์ฟเวอร์เพิ่มเติม (เช่น เพิ่ม instance Apache อีกสักหนึ่งอัน) – ใช้ปุ่ม + ในส่วน Horizontal scaling wizard จากนั้นเปิดใช้งานคุณสมบัติ Public IP และระบุลิมิตทรัพยากรสำหรับโหนด NGINX-balancer ที่เพิ่มโดยอัตโนมัติ เนื่องจากจะกลายเป็นจุดเริ่มต้นของแอปพลิเคชันของคุณ คลิก Apply เพื่อดำเนินการต่อ


3. เมื่อนำการเปลี่ยนแปลงที่จำเป็นทั้งหมดไปใช้สำเร็จ คุณควรปิดใช้งาน sticky sessions สำหรับเซิร์ฟเวอร์ balancer มิฉะนั้นคำขอทั้งหมดจาก IP address นั้นจะถูกเปลี่ยนเส้นทางไปยัง instance เดียวกันของแอปพลิเคชันเซิร์ฟเวอร์
ดังนั้นคลิกปุ่ม Config ถัดจากโหนด Nginx

4. ไปที่ไฟล์ conf > nginx-jelastic.conf ไม่สามารถแก้ไขได้ ดังนั้นให้คัดลอกเนื้อหาทั้งหมดและวางลงในไฟล์ nginx.conf (อยู่ในโฟลเดอร์เดียวกัน) แทนที่จะรวม /etc/nginx/nginx-jelastic.conf; ตามเส้น (ที่วงไว้ตามภาพต่อไปนี้)

5. จากนั้นค้นหาพารามิเตอร์ sticky path 2 รายการในโค้ด (ในส่วน DEFAULT UPSTREAM และ UPSTREAMS LIST) และคอมเมนต์ตามที่แสดงด้านล่าง

หมายเหตุ :
อย่าลืมใส่วงเล็บปีกกาปิดหลังสตริง sticky path และไม่ควรใส่เครื่องหมายคอมเมนต์ไว้
6. บันทึกการเปลี่ยนแปลงที่ใช้และรีสตาร์ทเซิร์ฟเวอร์ NGINX

การทดสอบ Balancer และเปรียบเทียบผลลัพธ์
1. เปลี่ยนกลับไปที่เทอร์มินัลของคุณและเรียกใช้การทดสอบ ab อีกครั้งด้วยพารามิเตอร์เดียวกัน (ยกเว้นไฟล์ที่มีผลลัพธ์เป็น – ให้ระบุชื่ออื่น เช่น res2.tsv)
ab -g res2.tsv -n 500 -c 10 {URL_to_your_env}
ตอนนี้เรามาดำเนินการทดสอบ load balancing โดยตรงกัน

2. เพื่อชี้แจงผลลัพธ์ที่ได้เราจะใช้ข้อมูลจากไฟล์ res1.tsv และ res2.tsv นำเข้าไปยัง spreadsheet และใช้ plot กราฟออกมา

คล้ายกับภาพต่อไปนี้:

เนื่องจากตัวเลือกที่ระบุไว้กราฟสีน้ำเงินจะแสดงประสิทธิภาพของเซิร์ฟเวอร์ Apache แบบเดี่ยวที่ไม่มีตัว balancer (ผลการทดสอบจุดควบคุม [control point]) และเซิร์ฟเวอร์สีแดง จะเป็นสองเซิร์ฟเวอร์ที่มี NGINX load balancer (ผลการทดสอบขั้นที่สอง)
Note: The received testing results (response time for each sent requests) are shown in the ascending order, i.e. not chronologically.
หมายเหตุ :
ผลการทดสอบที่ได้รับ (เวลาตอบสนองสำหรับแต่ละคำขอที่ส่งไป) จะแสดงตามลำดับจากน้อยไปหามากกล่าวคือไม่เรียงตามลำดับเวลา
อย่างที่คุณเห็นในขณะที่ให้บริการ low load ประสิทธิภาพของการกำหนดค่าทั้งสองเกือบจะเท่ากัน แต่เมื่อจำนวนคำขอเพิ่มขึ้นเวลาตอบสนองสำหรับ Environment ที่มี instance เซิร์ฟเวอร์แบบซิงเกิ้ลแอปจะเพิ่มขึ้นอย่างมากซึ่งส่งผลให้แสดงคำขอน้อยลงในเวลาเดียวกัน ดังนั้นหากคุณคาดหวังว่าแอปพลิเคชันเซิร์ฟเวอร์ของคุณจะมีภาระงานสูง (high load) การเพิ่มจำนวน instance ในบันเดิล (bundle) ด้วยเซิร์ฟเวอร์ balancer จะเป็นวิธีที่ดีที่สุดในการทำให้ลูกค้าของคุณพึงพอใจ
เพลิดเพลินไปกับข้อดีทั้งหมดของคลาวด์!