รู้จักแนวคิดของ Load Balancer

Ayuth Mangmesap
Ayuth’s Story

--

https://community-cdn-digitalocean-com.global.ssl.fastly.net/assets/tutorials/images/large/load-balancers_twitter___facebook.png?1492794692

ในบทความนี้ผมกะว่าจะพูดสั้น ๆ เกี่ยวกับ Load Balancer ที่เจอใน DigitalOcean แต่ด้วยความเขียนไปก็เติมนู่นนี่มันก็เลยกลัวที่จะยาวเกินไปผมเลยตัดสินใจที่จะแยก Practice ไปอีกบทความหนึ่ง (ยังเขียนไม่เสร็จนะ ถถถ)

คำศัพท์

Client เปรียบเทียบกับ facebook, client ก็คือตัวเราที่เข้าไปใช้บริการเว็บเค้านั่นแหละ

Server เครื่องคอมพิวเตอร์ประสิทธิภาพสูงที่ทำหน้าที่ให้บริการ client

Scalability ความสามารถในการลด + ขยายบริการเพื่อการรองรับจำนวนคนที่ใช้บริการ(client)

Availability ความสามารถของเว็บ server ที่จะคอยให้บริการ client หรือผู้ใช้บริการนั่นเอง

นิทาน Load Balancer

https://assets.digitalocean.com/articles/high_availability/ha-diagram-animated.gif

คุณเดินเข้าไปในเซเว่นในตอนพักเที่ยง มีเคาน์เตอร์อยู่ 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) นี้ละ​?

http://artica-proxy.com/wp-content/uploads/2015/12/load-balancing-proxy.png

เราก็ต้องมีคนกลางในการกระจาย request ที่เข้ามาครับ ซึ่งเจ้าเครื่องตรงที่เขียนว่า Load Balancing ตรงกลางของภาพข้างบนเนี้ย เค้าเรียกว่า Load Balancer ที่คอยเป็นคนกลางในการคอยดูว่ามีเคาน์เตอร์(server)ไหนว่างอยู่หรือเปล่าตอนนี้ ถ้ามีก็ให้ลูกค้า(client)ไปที่เคาน์เตอร์(server)ว่าง ๆ ซะ

ทีนี้มาเปรียบเทียบกับโลกความเป็นจริง ในการที่เราจะเพิ่มเคาน์เตอร์(server)หรือเครื่องใหม่เนี่ย โดยปกติแล้วเราจะไม่ทราบว่า Public IP นั้นอยู่ที่ไหนในโลกของ The Internet (ในกรณีนี้ผมเปรียบเทียบกับคนที่ใช้บริการพวก Amazon EC2 หรือบริการ Cloud Computing ต่าง ๆ นะครับที่เวลาสร้าง Instances ขึ้นมาแล้วจะได้ Public IP ขึ้นมา)เพราะการเข้าสู่โลกของ Internet นั้นจะต้องใช้ IP Address ในการเข้าถึงดังนั้นเราก็ต้องมีตัวกลางที่คอยเป็นเจ้าบ้านคอยบอกว่าเครื่อง(server)ที่เจ้าจะเข้าไปน่ะอยู่หลังไหน (Public IP) ในในโลกของ The Internet

พอเราเริ่มเห็นภาพกันแล้วเราก็จะมาเข้าสู่ Load Balancing Algorithms หรือการตัดสินใจว่าเราควรจะพาลูกค้าของเรา(client)ไปยังเครื่อง(server) ไหนกันแน่?

Load Balancing Algorithms

มาคุยกันเรื่อง Algorithms สำหรับการทำ Load Balancing หน่อยครับ แต่จริง ๆ เท่าที่หามาก็มีหลากหลายมากกว่านี้ครับแต่หลัก ๆ เอาแค่นี้ไปก่อนละกัน

** Algorithms ที่จะพูดถึงนี่ Supported on Nginx นะครับ ฉะนั้นสามารถนำไปปรับใช้ได้จริง ซึ่งพวก Cloud Service Providers ก็มีพวก Algirithm พวกนี้เช่นกัน เวลาไปอ่านเจอจะได้ไม่ช็อค

Round Robin

http://www.myassignmenthelp.net/images/round-robin-scheduling.gif

เปรียบเทียบเหมือนเรามีคน 2 คน ครั้งแรกมีงาน 1 เข้ามาเราก็จะส่งต่องาน (request) ให้คนที่ 1 และเมื่อมีงาน 2 เข้ามาอีกก็จะส่งต่อให้คนที่ 2 และเมื่อมีงานที่ 3 เข้ามาอีกก็จะวนไปที่คนที่ 1 และสลับไป 2 เรื่อย ๆ (round)

Least Connected

https://upload.wikimedia.org/wikipedia/commons/5/5b/Least_Connection.png

เป็นการหาเครื่องที่ว่างงานมากที่สุดและโยนให้เครื่องนั้นซะ

IP Hash

ป็นการนำ Source IP หรือ IP เราไปเข้า Hash Function ผลลัพธ์คือเราจะได้ IP ที่เราจะต้องไปต่อ พูดให้ง่ายกว่านั้นก็คือเอา IP เราโยนให้คน ๆ นึงแล้วเค้าจะบอกว่าเราควรจะไปที่ไหน ซึ่งวิธีนี้อาจมีข้อดีก็คือถ้าเรา route ไปยังเครื่อง server ที่อยู่ใกล้ ๆ คน ๆ นั้น การดาวน์โหลดข้อมูลจะทำได้เร็วมากขึ้นไปอีกนั่นเอง

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

  1. ลูกค้า(client)ที่ติดต่อเข้ามาจะไม่เห็น behind the scenes ว่าเบื้องหลังของระบบเรามี Server ทั้งหมดกี่เครื่อง
  2. Seamlessly increase capacity เราสามารถเพิ่ม-ลดจำนวน server ของเราตามที่เราต้องการโดยฝั่ง client แทบจะไม่รู้ตัวซักนิดแถมแต่ละครั้งของการเพิ่มก็จะเป็นการเพิ่ม Availability และ Scalability ไปในตัวด้วยโดยที่ client แทบจะไม่รู้สึกตัวเลยด้วย
  3. Efficient failure management ถ้ามีเครื่อง server ไหนที่เจ๊งเราก็จะนำออกจาก load balancer pool แล้วไปจัดการเครื่องนั้นซะ และหลังจากจัดการแล้วก็ค่อยนำไปเสียบเข้ากับ Load Balancer ใหม่
  4. Automate scaling ถ้าเราใช้บริการ cloud-based hosting เช่นพวก Amazon เราสามารถปรับการตั้งค่า Auto scaling เพื่อรองรับ traffic ที่เป็นช่วงเวลาที่ฮอต ๆ ได้เช่น พักเที่ยง หลังเลิกงาน เมื่ออยู่ในช่วงเวลานี้เราก็จะสร้าง server ขึ้นมารองรับ traffic client ไว้ โดยที่เราไม่จำเป็นต้องมานั่งเพิ่ม - ลดเครื่องเอง

สรุป

https://expediafranchise.com/wp-content/uploads/2015/06/Screen-Shot-2015-06-01-at-2.52.37-PM.png

เมื่อเว็บเราให้บริการกลุ่มคนที่ใหญ่ขึ้นเราจำเป็นต้องมีการจัดการ client ที่ request เข้ามาซึ่งหนึ่งในวิธีการ scale เว็บของเราก็คือการสร้างเครื่อง(server)ขึ้นมาใหม่เพื่อรองรับ request ของ client ที่เพิ่มขึ้นทุก ๆ วัน

จากที่กล่าวมา Load Balancing เป็นแค่หนึ่งในหลายวิธีการที่เราจะสามารถรับมือ client ที่เพิ่มขึ้นได้และ Load Balancing หนึ่งในวิธี Scalability(ความสามารถในการลด + ขยายการรองรับ request นั่นเอง) และช่วยเพิ่ม Availability ให้กับ service ของเรา แต่มีวิธีอื่นที่สามารถจัดช่วยจัดการกับการ Scale ได้อีกเช่น Caching, Queues, Managing States เป็นต้น

References

Artur Ejsmont. Web Scalability for Startup Engineers, 1st Edition, McGraw-Hill Education, ISBN-13: 978–0071843652

Using nginx as HTTP load balancer. Retrieved March 19, 2018, from NGINX’s Official Site: http://nginx.org/en/docs/http/load_balancing.html

--

--

Ayuth Mangmesap
Ayuth’s Story

A developer who runs everyday because he eats a lot