Load balance คือ Service ที่เราเอาไว้รับ traffic จากคนเข้า แล้วคอยกระจายไปยัง server หลายๆตัว ซึ่ง Server หลายๆตัวนั่นแหละที่เรานิยมใช้ Docker เพราะมัน scale ง่าย
Load Balance ทำได้หลาย Layer มาก
ไล่จากบนลงล่างก็ตั้งแต่ layer 7 ลงมา เช่น http load balance ทีมผมนิยมใช้ Nginx หลายท่านนิยม HA-Proxy ก็แล้วแต่ถนัด
ต่ำลงมาอีกหน่อยก็ Layer 4 พวก tcp เปิด port ซัดกันเลยไม่ต้องสนใจ header ใดๆ อันนี้ HA-Proxy จะได้รับความนิยมมาก ส่วน Nginx ก็เพิ่มมี Nginx stream
ต่ำลงมาอีกหน่อยคือ IPVS อันนี้จริงมันทำ load balance ที่ layer 4 แต่ว่ามัน inside Linux kernel เลย ทำให้สามารถเข้า 1 ออก N ได้ ตอนออกไปนี่พิศดารมาก ลงไปถึง layer 3 , layer 2 เลย ล่าสุด K8s ใน version ใหม่มี IPVS ให้เลือกด้วย
Docker มีเรื่อง load balance อยู่ด้วย มันคือ Docker Swarm
Swarm คือ tool ที่เอาไว้จัดการ Docker ให้รวมกันเป็น Cluster ก่อนนั้นมันอยู่ข้างนอก ต่อมามันมี Swarm mode อยู่ใน Docker engine เลย
load balance เป็นเทคนิคทางด้าน network ที่นำมาใช้แก้ปัญหา Limit ความสามารถในการรองรับจำนวนผู้ใช้งานที่จำกัดของเครื่อง server โดยต่อให้เครื่อง server แรงแค่ไหนก็ตาม แต่เมื่อมีปริมาณผู้ใช้จำนวนมากตัว Application ของ Web Server ก็ย่อมที่จะทำงานหนักมาก และอาจจะเกิด Connection เต็ม การรอ Queue ก็เกิดขึ้น อันเนื่องจากปริมาณ Limit ของ Server ปัญหาที่ตามมาก็คือ Server Load ตัว CPU ทำงานสูง ทำให้ Web Server ค้างหรือแฮ้ง โดยปัญหานี้เว็บไซต์ใหญ่ ๆ จะเจอปัญหากันอย่างแน่นอน
หลักการทำ load balance
load balance จะทำโดยเอา server หลาย ๆ เครื่องมาทำงานร่วมกัน กระจาย load ไปแต่ละเครื่อง เพื่อให้มีประสิทธิภาพในการรับงานที่เข้ามาจาก User จำนวนมากๆ ได้ ดังนั้นจึงทำงานได้มากกว่าในเวลาเท่ากัน และโดยทั่วไปผู้ใช้ทั้งหมดได้รับบริการเร็วขึ้น load balance สามารถใช้กับฮาร์ดแวร์ ซอฟต์แวร์ หรือการผสมทั้งคู่ นอกจากนี้ยังมีคุณสมบัติของ Fail Over คือหากมีคอมพิวเตอร์ภายในกลุ่มไม่สามารถทางานได้ เช่น Down อยู่ หรือไม่สามารถรับงานหรือ user เพิ่มได้เนื่องจาก Resource ที่ใช้ทำงานไม่พอ ตัว load balance ที่เป็นตัวแจก Load ให้คอมพิวเตอร์ภายในกลุ่มก็จะส่ง load ไปยังคอมพิวเตอร์เครื่องอื่นๆ แทน จนกว่าคอมพิวเตอร์เครื่องนั้นจะกลับมาใช้งานได้ใหม่
โดยปกติระบบ load balance จะนิยมใช้กับเว็บไซด์, เครือข่ายสำหรับการแช็ตขนาดใหญ่, เว็ปไซด์สำหรับส่งไฟล์ที่ใช้ bandwidth สูงๆ, NNTPเซิร์ฟเวอร์ และDNSเซิร์ฟเวอร์ ขณะที่จะมีประโยชน์ในการรักษาความปลอดภัยโดยการซ่อนโครงสร้างของเครือข่ายภายใน และยับยั้งการเข้าถึงแกนกลางของเครือข่ายหรือบริการที่ทำงานอยู่พอร์ตอื่น
การทำ load balance สามารถทำได้หลากหลายวิธี ไม่ว่าจะเป็นการใช้ DNS ในลักษณะแบบ round robin (มี A record หลายอัน) หรือจะเป็นการใช้ Load Balancer เช่น HAProxy หรือ Ultra Monkey โดยเราจะมี Load Balancer หนึ่งตัว ข้างหน้า เซิร์ฟเวอร์ภายในกลุ่ม เพื่อรอรับการร้องขอจากผู้ใช้ เมื่อมีร้องขอเข้ามาตัว Load Balancer จะทำการ ส่งต่อการร้องขอนั้นไปยังเซิร์ฟเวอร์ภายในกลุ่ม โดยการทำงานจะเป็นการเปรียบเทียบสมรรถนะของเครื่องแล้วกระจายงานสู่เครื่องเซิร์ฟเวอร์ เพื่อให้เซิร์ฟเวอร์แต่ละเครื่องมีทำงานที่สมดุลกัน
การทำ load balance ปัจจุบันที่ใช้กันมีอยู่ 3 วิธี คือ
1. Round-robin เป็นการส่ง traffic ไปยัง Server ภายในกลุ่มวนไปเรื่อยๆ
ปกติแล้ว 1 domain name จะมีแค่ 1 ip address แต่ในการทำ DNS Round Robin ใน 1 domain name จะมีหลาย ip address สามารถทดลองได้โดยการทำ nslookup หรือ ลอง ping ไปยัง domain นั้นหลายๆรอบ จะเห็นว่า ip ที่เรา ping ไปแต่ละรอบนั้นไม่เหมือนกัน (ลองกับ facebook หรือ google ก็ได้)
ข้อดีของวิธีนี้คือง่ายที่สุดและใช้งบประมาณน้อยที่สุด แต่เป็นวิธีนี้มีข้อเสียค่อนข้างมากข้อเสียที่สำคัญคือไม่สามารถควบคุมการทำงานได้ เนื่องจากการทำงานด้วยวิธีนี้จะมีแต่การทำ Round Robinเท่านั้น ไม่กระจายงานสู่เครื่องเซิร์ฟเวอร์ให้เท่าเทียมกันได้
2. Sticky เป็นการส่ง traffic โดยยึดติดกับ Session ที่ user เคยเข้าไปใช้งาน เช่น ถ้า user เคยเข้าไปใช้ใน server ที่ 1 ภายในกลุ่ม traffic ของ user คนนั้นก็จะถูกส่งไปยัง server 1 เท่านั้น
3. Work load เป็นการส่ง traffic โดยดูที่ performance ของ server ภายในกลุ่มเป็นสำคัญ เช่นหาก server 1 มีงานมากกว่า server 2 ตัว load balancer ก็จะส่ง traffic ไปยัง server 2
https://www.techtalkthai.com/introduction-to-application-delivery-controller-and-load-balancer-technologies/