มาทำความเข้าใจ Concept ของ Load Balancer กันเถอะ
กล่าวนำ
ในบทความนี้ผมกะว่าจะพูดสั้น ๆ เกี่ยวกับ Load Balancer ที่เจอใน DigitalOcean แต่ด้วยความเขียนไปก็เติมนู่นนี่มันก็เลยกลัว ssd hosting ที่จะยาวเกินไปผมเลยตัดสินใจที่จะแยก Practice ไปอีกบทความหนึ่ง
คำศัพท์
Client เปรียบเทียบกับ facebook, client ก็คือเราที่เข้าไปใช้บริการเว็บเค้านั่นแหละ
Server เครื่องคอมพิวเตอร์ประสิทธิภาพสูงที่ทำหน้าที่เป็นตัวเก็บข้อมูลของ resource ของ service ssd hosting นั้น ๆ
Scalability ความสามารถในการลด + ขยายบริการเพื่อการรองรับจำนวนคนที่ใช้บริการ(client)
Availability ความสามารถของเว็บ server ที่จะคอยให้บริการ client หรือผู้ใช้บริการนั่นเอง
เปรียบเปรย Load Balancer
คุณเดินเข้าไปในเซเว่นในตอนพักเที่ยง มีเคาน์เตอร์อยู่ 2 เครื่อง คุณเห็นว่าแถวแรกมีคนรอคิดเงินอยู่ 10 คน (ยาวมากกก) แต่อีก 1 เคาน์เตอร์มันว่าง, ณ ตอนนี้ในหัวคุณกำลังคิดว่า ทำไมไม่เจียดพนักงาน 1 คนไปเปิดอีก 1 เคาน์เตอร์ละ ณ ตอนนี้คุณกำลังให้เซเว่นทำ Load Balancing เพื่อไม่ให้เคาน์เตอร์ 1 ทำงานหนักจนเกินไปนั่นเอง
และเมื่อนิทานสั้น ๆ จบลงคุณก็ “อ๋อ” ในทันทีว่า Load Balancer คืออะไร มันก็คือการกระจาย Traffic ของลูกค้า (client) ไปให้แก่เครื่อง(server)อื่นๆ นั่นเอง ถ้าไม่มีเครื่องก็เปิดเครื่อง(server)ขึ้นมาใหม่ซะ
รู้จัก Load Balance ให้มากขึ้น
เมื่อปลายปีที่แล้วจากสถิติของ Facebook จะเห็นว่ามันมี …
Worldwide, there are over 2.13 billion monthly active Facebook users for Q4 2017
คุณกำลังร้อง “โอ้ว ถ้ามันจะเยอะขนาดนี้เครื่องมันจะไหวเหรอจอร์ช” แน่นอนครับว่าโครตมหาซุปเปอร์คอมพิวเตอร์อึดถึกทนเครื่องเดียวมันไม่พอแน่นอน เพราะการที่การเพิ่มประสิทธิภาพของเครื่องมันก็ย่อมมีข้อจำกัดของเทคโนโลยีขณะนั้นด้วยมันก็เลยต้องเพิ่มเครื่องขึ้นมาอีกและต่อ ๆ กันเค้าเรียกว่า server farm เพื่อช่วยกันทำงานนั่นเอง แต่ทีนี้ถ้าเพิ่มเครื่องขึ้นมาแล้วใครจะรู้จักเครื่อง (server) นี้ละ?
เราก็ต้องมีตัวกลางในการกระจายครับ ซึ่งไอ้เจ้าเครื่องตรงที่เขียนว่า Load Balancing ตรงกลางของภาพข้างบนเนี้ย เค้าเรียกว่า Load Balancer ที่คอยเป็นคนกลางในการคอยดูว่ามีเคาน์เตอร์(server)ไหนว่างอยู่หรือเปล่าตอนนี้ ถ้ามีก็ให้ลูกค้า(client)ไปที่เคาน์เตอร์(server)ว่าง ๆ ซะ
ทีนี้มาเปรียบเทียบกับโลกความเป็นจริง ในการที่เราจะเพิ่มเคาน์เตอร์ (server) หรือเครื่องใหม่เนี่ย โดยปกติแล้วเราจะไม่ทราบว่า Public IP นั้นอยู่ที่ไหนในโลกของ The Internet เพราะการเข้าสู่โลกของ Internet นั้นจะต้องใช้ IP Address ในการเข้าถึงดังนั้นเราก็ต้องมีตัวกลางที่คอยเป็นเจ้าบ้านคอยบอกว่าเครื่อง (server) ที่เจ้าจะเข้าไปน่ะอยู่หลังไหน (Public IP) ในในโลกของ The Internet
พอเราเริ่มเห็นภาพกันแล้วเราก็จะมาเข้าสู่ Load Balancing Algorithms หรือการตัดสินใจว่าเราควรจะพาลูกค้าของเรา (client) ไปยังเครื่อง (server) ssd hosting ไหนกันแน่?
Load Balancing Algorithms
มาคุยกันเรื่อง Algorithms สำหรับการทำ Load Balancing หน่อยครับ แต่จริง ๆ เท่าที่หามาก็มีหลากหลายมากกว่านี้ครับแต่หลัก ๆ เอาแค่นี้ไปก่อนละกัน
Algorithms ที่จะพูดถึงนี่ Supported on NGinx นะครับ ฉะนั้นสามารถนำไปปรับใช้ได้จริง แต่โดยรวมพวกการทำ Load Balancing ก็ใช้พวกวิธีนี้ละ
Round Robin
ปรียบเทียบเหมือนเรามีคน 2 คน ครั้งแรกมีงาน 1 เข้ามาเราก็จะส่งต่องาน (request) ให้คนที่ 1 และเมื่อมีงาน 2 เข้ามาอีกก็จะส่งต่อให้คนที่ 2 และเมื่อมีงานที่ 3 เข้ามาอีกก็จะวนไปที่คนที่ 1 และสลับไป 2 เรื่อย ๆ (round)
Least Connected
เป็นการหาเครื่องที่ว่างงานมากที่สุดและโยนให้เครื่องนั้นซะ
IP Hash
เป็นการนำ Source IP หรือ IP เราไปเข้า Hash Function ผลลัพธ์คือเราจะได้ IP ที่เราจะต้องไปต่อ พูดให้ง่ายกว่านั้นก็คือเอา IP เราโยนให้คน ๆ นึงแล้วเค้าจะบอกว่าเราควรจะไปที่ไหน ซึ่งวิธีนี้อาจมีข้อดีก็คือถ้าเรา route ไปยังเครื่อง server ที่อยู่ใกล้ ๆ คน ๆ นั้นได้มันก็จะเร็วมากขึ้นอีก
ข้อดีของการทำ Load Balancing
ลูกค้า (client) ที่ติดต่อเข้ามาจะไม่เห็น behind the scenes ว่าเบื้องหลังของระบบเรามี Server ทั้งหมดกี่เครื่อง? ก็ถือซะว่าป้องกันขั้นต้นได้ระดับหนึ่ง
Seamlessly increase capacity เราสามารถเพิ่ม-ลดจำนวน server ของเราตามที่เราต้องการโดยฝั่ง client แทบจะไม่รู้ตัวซักนิดแถมแต่ละครั้งของการเพิ่มก็จะเป็นการเพิ่ม Availability และ Scalability ไปในตัวด้วยโดยที่ client แทบจะไม่รู้สึกตัวเลยด้วย
Efficient failure management ถ้ามีเครื่อง server ไหนที่เจ๊งเราก็จะนำออกจาก load balancer pool แล้วไปจัดการเครื่องนั้นซะ และหลังจากจัดการแล้วก็ค่อยนำไปเสียบเข้ากับ Load Balancer ใหม่
Automate scaling ถ้าเราใช้บริการ cloud-based hosting เช่นพวก Amazon เราสามารถปรับการตั้งค่า Auto scaling เพื่อรองรับ traffic ที่เป็นช่วงเวลาที่ฮอต ๆ ได้เช่น พักเที่ยง หลังเลิกงาน เมื่ออยู่ในช่วงเวลานี้เราก็จะสร้าง server ขึ้นมารองรับ traffic client ไว้ โดยที่เราไม่จำเป็นต้องมานั่งเพิ่ม – ลดเครื่องเอง
สรุป
เมื่อเว็บเราให้บริการกลุ่มคนที่ใหญ่ขึ้นเราจำเป็นต้องมีการจัดการ client ที่ request เข้ามาซึ่งหนึ่งในวิธีการ scale เว็บของเราก็คือการสร้างเครื่อง(server) ssd hosting ขึ้นมาใหม่เพื่อรองรับ request ของ client ที่เพิ่มขึ้นทุก ๆ วันนั่นเอง
แต่ Load Balancing เป็นแค่หนึ่งในหลาย ๆ วิธีการที่เราจะสามารถรับมือ client ที่เพิ่มขึ้นได้และ Load Balancing หนึ่งในวิธี Scalability (ความสามารถในการลด + ขยายการรองรับ request นั่นเอง) และช่วยเพิ่ม Availability (ความสามารถของเว็บ server ที่จะคอยให้บริการ client) ซึ่งวิธีอื่น ๆ ในการช่วย Scale ก็มีเช่น Caching, Queues, Manging States เป็นต้น
ขอให้สนุกกับการ scale ครับ
เรียบเรียงโดย: MCCONTENT
ที่มา: www.ssdhosting.in.th