Infra101 — Load Balancing ไม่ตายง่ายๆ แน่นอน

Engiblog
KBTG Life
Published in
2 min readNov 29, 2023

ขอแนะนำซีรีย์ 101 by Engiblog ที่จะพาทุกคนไปทำความรู้จักกับคำศัพท์เบสิกในโลกเทคโนโลยีที่คุณอาจจะรู้อยู่แล้วหรือไม่เคยรู้มาก่อน เรามาเรียนรู้กันไปด้วยกันใน 2 นาทีครับ

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

หากเล่าให้เห็นภาพยิ่งขึ้น…

ขอยกตัวอย่างการทำงานของ Web Server แล้วกัน สมมุติว่าเครื่องที่ทำหน้าที่เป็น Web Server 1 เครื่อง สามารถรองรับผู้เข้าชมเว็บไซต์แบบ Concurrent User ได้ 100 Users

Concurrent User คือ User ที่เข้ามาใช้งานพร้อมๆ กันในช่วงเวลาเดียวกัน

แล้วถ้าเราต้องการให้ Web Server ของเราให้บริการผู้เข้าเว็บไซต์ Concurrent ได้จำนวน 200 Users ล่ะ เราต้องทำอย่างไร?

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

Photo by KOBU Agency on Unsplash

ส่วนประกอบการทำ Load Balancing

Load Balancer

ส่วนที่ทำหน้าที่กระจาย Request ไปที่เครื่อง Backend ต่างๆ โดยมีวิธีคิดการกระจาย Request ที่วิธี ได้แก่

  • Round-Robin วิธีการกระจายโหลดแบบเบสิกที่สุด เป็นการแจกตามคิว เช่น ถ้าเรามี Web Server ที่เป็น Backend 3 เครื่อง เมื่อมีผู้เข้าชมเว็บไซต์จำนวน 4 Users จะทำการกระจาย โดยส่ง User 1 ไปเครื่อง 1 / User 2 ไปเครื่องที่ 2 / User 3 ไปเครื่องที่ 3 / User 4 ไปเครื่องที่ 1 (วนไปเรื่อยๆ ตามคิว)
  • Random คือวิธีการกระจายโหลดไปที่เครื่อง Backend แบบสุ่ม แล้วแต่วิธีการคำนวณของแต่ละ Load Balancer

นอกจากนี้ยังมีวิธีอื่นๆ อีก ขึ้นอยู่กับผลิตภัณฑ์ของแต่ละรายที่ออกแบบ

Backend

ส่วนที่ทำหน้าที่รับ Request และ Response กลับไปทาง Load Balancer จากตัวอย่างของเราคือ Web Server ที่ส่งข้อมูลเว็บไซต์กลับให้ผู้เข้าชมเว็บไซต์

สิ่งที่ต้องรู้ในการทำ Load Balancing

  • โครงสร้างของระบบในทุกๆ ส่วนจำเป็นต้องรองรับการทำงานแบบ Scale-out (เพิ่มจำนวนเครื่อง) เพื่อไม่ให้เกิด Limitation ของโครงสร้างระบบ
  • การออกแบบโครงสร้างของระบบต้องคำนึงถึงเรื่อง Session ต่างๆ ที่ใช้ภายในระบบหรือแอปพลิเคชัน เช่น ระบบที่มีการล็อกอิน เพราะถ้า User วิ่งไปล็อกอินระบบที่ Backend คนละเครื่องกับเครื่องอื่นๆ ที่ใช้งาน Session หลังจากล็อกอิน ก็อาจทำให้เกิดปัญหาได้
  • การ Scale ของ Backend จะต้องดูเรื่องประสิทธิภาพของ Load Balancer ด้วย ไม่เช่นนั้นตัว Load Balancer จะไปกระจุกกันตรงจุดที่เป็นคอขวด (Bottleneck) ของระบบแทน
  • ในระบบที่มีการใช้งานร่วมกับ Database ควรมีการคำนึงถึงขีดจำกัดของ Database ด้วย ไม่เช่นนั้นการ Scale-out ของเราจะไม่มีผลเลย เพราะสุดท้าย Limitation ที่เกิดอาจจะตันที่ Database อยู่ดี

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

  • F5 แบบ Commercial เป็นที่นิยมและรองรับการทำงาน Load Balancing Algorithm ในหลายๆ รูปแบบ รวมถึงมีความสามารถอื่นๆ มากกว่า Load Balancer เช่น SSL Offloading, Proxy SSL เป็นต้น
  • NginX แบบ Open Source และ Commercial เป็นที่นิยมเช่นกัน เพราะมี Open Source ให้ใช้งานด้วย และมีความยืดหยุ่นในการทำงานนอกเหนือจากการใช้เป็น Load Balancer เช่น Reverse Proxy Server, Mail Proxy Server หรือ TCP/UDP Proxy Server เป็นต้น
F5
NginX

แม้ว่า Load Balancer จะช่วยให้เราสามารถเพิ่มขีดความสามารถในการรองรับผู้ใช้งานจำนวนมากขึ้น แต่ก่อนจะนำมาใช้ ควรมีการคำนวณปริการการใช้งานของผู้เข้างานเว็บไซต์ อีกทั้งควรมีการออกแบบโครงสร้างให้รองรับการทำ Scale-out เพื่อที่จะไม่ต้องมาแก้ไขโครงสร้างใหม่ทั้งหมดนะครับ (จะได้ไม่ต้องปวดหัวทีหลังด้วย)

สำหรับใครที่ชื่นชอบบทความนี้ อย่าลืมกดติดตาม Medium: KBTG Life เรามีสาระความรู้และเรื่องราวดีๆ จากชาว KBTG พร้อมเสิร์ฟให้ที่นี่ที่แรก

--

--