Load Balancing คือ อะไร

Load Balancing คือ อะไร?

Load Balancing คือ อะไร
Load Balancing คือ อะไร

Load Balancing คือ วิธีการที่ทำให้ระบบสามารถรองรับโหลดงาน หรือ ปริมาณการใช้งานระบบได้มากกว่าเดิม ซึ่งมีเบื้องหลังที่ทำงานโดยอุปกรณ์ หรือซอฟต์แวร์ที่เรียกว่า Load Balancer ที่ช่วยในกระจายงานให้เครื่องต่าง ๆ ทำงานได้แบบทั่วถึง

เล่าให้เห็นภาพยิ่งขึ้น จากตัวอย่างของการทำงาน Web Server เช่น
สมมุติว่าเครื่อง Web Server 1 เครื่อง สามารถรองรับผู้เข้าชมเว็บไซต์แบบ concurrent ได้ 100 users
แต่ถ้าต้องการให้เว็บไซต์ของเราจะรองรับ concurrent ได้จำนวน 200 users ล่ะ เราต้องทำอย่างไร?

คิดแบบง่ายๆ ก็คือ เพิ่มเครื่องอีก 1 เครื่องสิไม่น่ายากเลย (วิธีการ tuning เพื่อให้รองรับได้มากขึ้น ขอไม่พูดในบทความนี้นะ ทดไว้ในใจก่อน) การเพิ่ม Web Server อีก 1 เครื่องก็เป็นวิธีการเบื้องต้นในการทำงานแบบ load balancing และหลังจากนั้นเราก็เอาทั้ง 2 เครื่องวางไว้หลัง load balancer เพื่อให้ผู้เข้าชมเว็บไซต์เข้ามาที่ load balancer และให้ load balancer เป็นคนจัดคิวในการเข้าใช้งานต่อเอง ว่าจะส่งให้ผู้เข้าชมเว็บไซต์นั้นไปที่เครื่อง Web Server เครื่องที่ 1 หรือ 2
ซึ่งถ้าต้องการเพิ่ม concurrent มากกว่าเดิมเราก็ต้องทำการเพิ่มเครื่อง Web Server ไปเรื่อยๆ

ส่วนประกอบของการทำ load balancing

  • Load balancer คือ ส่วนที่ทำหน้าที่กระจาย request ไปที่เครื่อง backend ต่าง ๆ โดยมีวิธีคิดการกระจาย request ด้วยวิธีต่าง ๆ (อ่านต่อหัวข้อข้างล่าง)
  • Backend คือ ส่วนที่ทำหน้าที่รับ request และ response กลับไปทาง load balancer จากตัวอย่างของเรา คือ web server ที่ส่งข้อมูลเว็บไซต์กลับให้ผู้เข้าชมเว็บไซต์

ขั้นตอนวิธีการกระจาย (Load Balancing Algorithm)

  • Round-Robin คือ วิธีการกระจายโหลดแบบเบสิคที่สุด คือ แจกตามคิว เช่น ถ้ามี web server ที่เป็น backend 3 เครื่อง และเมื่อมีผู้เข้าชมเว็บไซต์จำนวน 4 users จะทำการกระจายดังนี้
    user 1 ไปเครื่อง 1, user 2 ไปเครื่องที่ 2, user 3 ไปเครื่องที่ 3 และ user 4 ไปเครื่องที่ 1 (วนไปเรื่อยๆ ตามคิว)
  • Random คือ วิธีการกระจายโหลดไปที่เครื่อง backend แบบสุ่มแล้วแต่วิธีการคำนวณของแต่ละ load balancer
  • วิธีอื่นๆ อีกมากมาย แล้วแต่ละผลิตภัณฑ์จะออกแบบ

ข้อจำกัดของการทำ Load Balancing

  • โครงสร้างของระบบต้องรองรับการทำงานแบบ Scale-out
  • การออกแบบโครงสร้างของระบบต้องคำนึงถึงเรื่องของ seesion ต่าง ๆ ที่ใช้ภายในระบบเช่น ในระบบที่มีการ login เข้าระบบ เนื่องจากจะมีปัญหาถ้า user วิ่งเข้า backend คนละเครื่อง

สิ่งที่ต้องคิดถึงเมื่อนำ Load Balancing มาใช้งาน

  • การ Scale ของ backend จะต้องดูเรื่องประสิทธิภาพของ load balancer ด้วย ไม่งั้นตัว load balancer จะเป็นจุดที่เป็นคอขวด (bottle-neck) ของระบบแทน
  • ในระบบที่มีการใช้งานร่วมกับ database ควรมีการคำนึงถึงขีดจำกัดของ database ด้วย ไม่งั้นการ scale-out ของเราจะไม่มีผลเลย เพราะสุดท้ายก็ต้องมาตันที่ database อยู่ดี

Load Balancer ที่นิยมใช้งาน

  • F5 ที่เป็นแบบ commercial
  • Nginx ที่มีทั้งแบบ Opensource และ commercial