จบปัญหาเว็บสมัครสอบระดับประเทศล่ม ด้วย Load Balancer จาก NIPA Cloud
กรณีศึกษา : การลงทะเบียนสอบวัดผลความรู้ความสามารถทั่วไป เพื่อคัดเลือกบุคคลเข้าทำงานในหน่วยงานราชการ
อุตสาหกรรม : หน่วยงานราชการ (Government Agency)
ผลิตภัณฑ์ที่ใช้ : NIPA Public Cloud (Load Balancer) & Solution Team Consulting
ภาพรวม (Overview)
หน่วยงานราชการเป็นองค์กรในกำกับรัฐบาลที่รับผิดชอบในการปฏิบัติหน้าที่ดูแลและบริหารงานเฉพาะด้าน ซึ่งต้องการแรงงานจากพลเรือนเข้ามาปฏิบัติงานและพัฒนาจำนวนมาก อย่างไรก็ตาม ในแต่ละปีก็มีผู้สนใจและต้องการเข้ามารับราชการในจำนวนที่มากกว่าหลายเท่า หน่วยงานฯ จึงจำเป็นต้องมีการสอบคัดเลือกเพื่อรับผู้ที่ผ่านเกณฑ์เข้ารับราชการ ทำให้เกิดหน่วยงานที่ดูแลการสอบคัดเลือกดังกล่าวนี้ขึ้น
การสอบจะแบ่งออกเป็นภาคต่าง ๆ ตามระดับความรู้และความเชี่ยวชาญในแต่ละสาขา โดยจะเปิดรับสมัครเพียงปีละ 1 ครั้งเท่านั้น ดังนั้นแล้ว สนามสอบนี้จึงเป็นสนามสอบที่มีผู้ที่สนใจเป็นข้าราชการสมัครจำนวนมากถึง 400,000-500,000 คนต่อปี
ความท้าทาย (Challenge)
เนื่องจากการสอบเข้ารับราชการเป็นการสอบที่ได้รับความนิยมสูงมาก เปิดรับผู้สมัครทั่วประเทศไทยอย่างไม่จำกัดจำนวน และมีสนามสอบกระจายอยู่ทั่วทุกภูมิภาค ด้วยการเปิดรับสมัครจำนวนมหาศาลนี้ การสมัครสอบผ่านเว็บไซต์จึงมักประสบปัญหาความหน่วงและล่มจากจำนวนผู้ใช้ที่มากเกินไปอยู่เสมอในทุก ๆ ปี
ดังนั้นแล้ว โจทย์ที่ทีมงาน NIPA Cloud ต้องได้รับก็คือ การสร้างระบบที่รองรับผู้ใช้งานที่ใช้งานพร้อมกันได้หลักแสนคน เพื่อรองรับการสมัครสอบวัดความรู้ความสามารถทั่วไป จำนวน 500,000 ที่นั่ง โดยที่เว็บไซต์รับสมัครไม่หน่วงหรือล่มอย่างที่ผ่านมา
ด้วยเหตุนี้ ทาง NIPA Cloud จึงเสนอแนวทางการออกแบบระบบสมัครสอบระดับประเทศ โดยใช้ cloud infrastructure เพื่อให้สามารถรองรับผู้ใช้งานที่เข้าใช้พร้อมกันเป็นจำนวนมากได้
การแก้ปัญหา (Solution)
การสร้างระบบที่ต้องรองรับ traffic ผู้ใช้งานที่เข้ามาจำนวนมหาศาลนั้น จะต้องมีการจัดการตั้งแต่ database ไปจนถึงการวางระบบ cloud infrastructure ที่สามารถรองรับ traffic ได้อย่างเพียงพอ
ผู้เชี่ยวชาญจาก NIPA Cloud จึงดำเนินการทั้งหมด ดังนี้
เราเริ่มต้นจากการให้คำแนะนำเรื่อง database ที่ใช้ในการลงทะเบียน โดยได้แนะนำให้มีการทำ index เพื่อให้เว็บสามารถโหลดข้อมูลได้รวดเร็วขึ้น และต้องเป็น database ที่มีขนาดใหญ่เพียงพอ ต่อมาก็จัดเตรียมโครงสร้างพื้นฐาน (infrastructure) ในการวางระบบทั้งหมด ทั้งเครื่องเซิร์ฟเวอร์ในการประมวลผล และ network โดยทีมงาน NIPA Cloud ได้เลือกใช้เครื่องเซิร์ฟเวอร์ขนาดต่าง ๆ เพื่อให้รองรับการใช้งานที่แตกต่างกัน ได้แก่ database server, file server, payment server, VPN server, monitor server, load balance server และ load test server ตลอดจนใช้ traffic bandwidth ของ network ขนาด 50 Gbps เพื่อให้รองรับ traffic จำนวนมากได้อย่างราบรื่น
รูปที่ 1 : การวางโครงสร้าง infrastructure ผ่าน firewall
ณ จุดเริ่มต้น ทาง NIPA Cloud ได้ดำเนินการติดตั้ง firewall เพื่อป้องกันการโจมตี DDoS (Distributed Denial of Service) และได้วางเส้นทางให้ traffic ที่เข้ามาทั้งหมด ผ่านการกรอง traffic ที่ตรวจพบว่าเป็น traffic ที่ไม่ดีทิ้งไป NIPA Cloud มีเกณฑ์ในการกรอง traffic ไม่ดีด้วยการใช้ firewall โดย firewall ที่ NIPA Cloud ใช้งานมีค่า throughput ถึง 20 Gbps และพัฒนาขึ้นจากซอฟต์แวร์ open source ที่ดูแลจัดการโดยผู้เชี่ยวชาญจาก NIPA Cloud จึงมีราคาต่ำกว่าซอฟต์แวร์สำเร็จรูปในท้องตลาดอย่างมาก
รูปที่ 2 : traffic ที่ถูกกรองจะผ่านไปยัง load balancer
เมื่อ traffic ผ่านมายังขั้นนี้ NIPA Cloud ได้ติดตั้ง load balancer ต่อจากชั้น firewall เพื่อกระจายโหลดให้เครื่องเซิร์ฟเวอร์แต่ละเครื่อง ทำให้เซิร์ฟเวอร์ไม่ต้องรองรับโหลดมากเกินไปจนหน่วงหรือล่มอย่างที่ผ่านมา โดย load balancer ทาง NIPA Cloud จะมีการกำหนดการวิ่งของ traffic ให้เป็นวิธีการแบบ round robin (คำขอ (request) จะถูกส่งไปยังแต่ละเซิร์ฟเวอร์ตามลำดับ) สาเหตุที่ไม่เลือกวิธีแบบ least connection (คำขอจะถูกส่งไปยังเซิร์ฟเวอร์ที่มีจำนวนการเชื่อมต่อที่ใช้งานน้อยที่สุด) ก็เพราะต้องการให้ดำเนินการได้ง่ายที่สุด เพื่อลดภาระงานของ load balancer ทำให้มีความเสถียรและรวดเร็วมากขึ้น
Round robin แตกต่างจาก least connection คือ เซิร์ฟเวอร์จะรู้ตำแหน่งล่วงหน้าว่า traffic ลำดับต่อไปที่จะเข้ามาต้องไปที่ใด โดยรู้ก่อนคำขอที่ระบุตำแหน่งปลายทางของ traffic ซึ่งจะเข้ามาภายหลัง ขณะที่ least connection คือ load balancer จะต้องวิ่งหาเซิร์ฟเวอร์ที่มีโหลดน้อยที่สุด และถึงแม้จะส่งไปยังเซิร์ฟเวอร์นั้น ก็อาจใช้เวลาสักพักในการประมวลผล ซึ่งทำให้เกิดความล่าช้าได้ ส่งผลให้ความเสถียรลดลง
สุดท้ายคือ การ source IP โดยคำขอของผู้ใช้งาน (user) จะถูกส่งไปยังเซิร์ฟเวอร์เดิมที่ผู้ใช้งานเข้ามาก่อนหน้านี้ เพื่อป้องกันการมี 2 เซสชันใน 1 ยูสเซอร์ อาทิ การสมัครสอบและกรอกข้อมูลถึงขั้นชำระเงินแล้วอินเทอร์เน็ตหลุด เมื่อกลับเข้ามาหน้าเดิมใหม่ เซสชันก่อนหน้าจะหายไป และเริ่มต้นเซสชันใหม่ทันที แต่ถ้าไม่มีการ source IP ไว้ การเข้ามาครั้งที่สองจะทำให้ยูสเซอร์มี 2 เซสชัน ซึ่งทำให้เปลือง traffic โดยไม่จำเป็น ดังนั้น การ source IP จะช่วยให้เราลดจำนวน traffic ลงได้ และช่วยลดโอกาสเว็บไซต์ล่มได้อีกด้วย
รูปที่ 3 : การกระจายโหลดของ load balancer ไปยัง VM
หลังจากที่ load balancer กระจายโหลดเพื่อไม่ให้เซิร์ฟเวอร์ เครื่องใดเครื่องหนึ่งทำงานหนักเกินไปเรียบร้อยแล้ว บุคลากรของเราก็จะมอนิเตอร์ระบบอยู่ตลอดเวลา เพื่อปรับเพิ่ม-ลดการทำงานให้รองรับการใช้งานจริง ป้องกันความเสียหายจากเหตุการณ์ไม่คาดคิดต่าง ๆ และประหยัดค่าใช้จ่ายและทรัพยากร โดยในส่วนหลังบ้าน (backend) ก็จะมีการเก็บข้อมูลต่าง ๆ จากผู้สมัครรวมไว้ในฐานข้อมูลเดียว เป็นอันเสร็จสิ้นระบบการสมัครสอบ
จึงกล่าวได้ว่า ผู้เชี่ยวชาญจาก NIPA Cloud ได้ช่วยวางระบบสมัครสอบ ตั้งแต่การให้คำปรึกษาเรื่องการจัดการ database ตลอดจนทำระบบการรับสมัครโดยใช้ cloud infrastructure จาก NIPA Cloud เพื่อให้ระบบสมัครสอบระดับประเทศ ที่เริ่มต้นตั้งแต่ปี 2565 เป็นต้นมา สามารถรองรับผู้ใช้งานจำนวนมหาศาลได้
ผลลัพธ์ (Outcome)
รูปที่ 4 และ 5 : ผลลัพธ์ในโซเชียลมีเดียเกี่ยวกับการวางระบบของทีมงาน NIPA Cloud
นับตั้งแต่ ปี 2565 หลังจากนำ cloud infrastructure ของ NIPA Cloud มาใช้กับระบบสมัครสอบหน่วยงานราชการ เห็นได้ชัดว่า ระบบสามารถรองรับผู้สมัครจำนวนมากได้เป็นอย่างดี คิดเป็นจำนวนสูงสุดเกือบ 100,000 คน ใน 1 ชั่วโมงแรกที่เปิดรับสมัคร และมีผู้สมัครโดยรวมราว 500,000 คน โดยปราศจากปัญหาช้าหรือล่มอย่างที่เคยประสบในหลายปีที่ผ่านมา และผู้ที่เข้ามาสมัครสอบก็ไม่ต้องเสียเวลามานั่งสมัครสอบหลาย ๆ รอบ ส่งผลดีกับทุกฝ่ายอย่างชัดเจน
หากคุณต้องการระบบที่เสถียร รวดเร็ว และสามารถรองรับผู้ใช้จำนวนมากได้โดยไม่หน่วงหรือล่ม สามารถติดต่อทีมงาน NIPA Cloud เพื่อรับคำปรึกษาและเริ่มวางระบบหาโซลูชันบน cloud infrastructure ของ NIPA Cloud ได้ทันที
ภาคผนวก
รูปที่ 6 : traffic max ของ load balancer ในช่วงเวลา 08:32 น. วันรับสมัครสอบ โดย bandwidth ขึ้นไปสูงถึง 4.89 Gbps
รูปที่ 7 : จำนวน connections per second สูงสุดที่ 500 connections
รูปที่ 8 : จำนวน requests per second สูงสุดที่ประมาณ 17,000 requests
รูปที่ 9 : จำนวน connection ณ เวลานั้น ๆ สูงสุดที่ 71,800 connections
We—as a team of Thai people—are assured that Thai cloud is the absolute answer for driving your business in the digital era.