อัลกอริธึมการทำโหลดบาลานซ์ชนิดใดที่มี


32

ฉันกำลังค้นคว้าอัลกอริทึมการทำโหลดบาลานซ์ที่แตกต่างกันสำหรับ HTTP และฉันเพิ่งค้นพบ 3. สุ่ม, Round Robin และ Weighted Round Robin มีตัวเลือกอื่น ๆ อีกไหม?

ขอบคุณพอล

คำตอบ:


33

อัลกอริทึมการโหลดบาลานซ์ที่พบมากที่สุดสำหรับ HTTP load balancer คือ IMHO:

  • Round Robin (บางครั้งเรียกว่า "Next in Loop")

  • ถ่วงน้ำหนัก Round Robin - เหมือน Round Robin แต่เซิร์ฟเวอร์บางเครื่องได้รับส่วนแบ่งการเข้าชมโดยรวมที่มากขึ้น

  • สุ่ม

  • แฮชIP ต้นทาง การเชื่อมต่อถูกแจกจ่ายไปยังเซิร์ฟเวอร์แบ็กเอนด์ตามที่อยู่ IP ต้นทาง ถ้า webnode ล้มเหลวและถูกยกเลิกการให้บริการการแจกจ่ายจะเปลี่ยนแปลงไป ตราบใดที่เซิร์ฟเวอร์ทั้งหมดใช้ที่อยู่ IP ไคลเอนต์ที่กำหนดจะไปที่เว็บเซิร์ฟเวอร์เดียวกันเสมอ

  • แฮชURL เช่นเดียวกับการแฮช IP ของแหล่งข้อมูลยกเว้นการแฮชจะทำใน URL ของคำขอ มีประโยชน์เมื่อทำการปรับสมดุลโหลดหน้าแคชพร็อกซีเนื่องจากคำขอสำหรับวัตถุที่กำหนดจะไปที่แคชแบ็กเอนด์หนึ่งเสมอ วิธีนี้จะหลีกเลี่ยงการทำสำเนาแคชโดยมีวัตถุเดียวกันเก็บอยู่ในแคชหลายแห่ง / ทั้งหมดและเพิ่มความจุที่มีประสิทธิภาพของแคชแบ็กเอนด์

  • การเชื่อมต่ออย่างน้อยน้ำหนักการเชื่อมต่อน้อยที่สุด ตัวโหลดบาลานซ์ตรวจสอบจำนวนการเชื่อมต่อที่เปิดอยู่สำหรับแต่ละเซิร์ฟเวอร์และส่งไปยังเซิร์ฟเวอร์ที่ยุ่งน้อยที่สุด

  • การจราจรน้อยที่สุดการจราจรน้อยที่สุด ตัวโหลดบาลานซ์ตรวจสอบบิตเรตจากแต่ละเซิร์ฟเวอร์และส่งไปยังเซิร์ฟเวอร์ที่มีทราฟฟิกขาออกน้อยที่สุด

  • แฝงน้อย Perlbalทำการร้องขอ HTTP OPTIONS อย่างรวดเร็วเพื่อแบ็กเอนด์เซิร์ฟเวอร์และส่งคำขอไปยังเซิร์ฟเวอร์แรกที่จะตอบ

เนื้อหาข้างต้นไม่ใช่อัลกอริทึมในแง่วิทยาศาสตร์คอมพิวเตอร์ที่เข้มงวด แต่เป็นคำอธิบายทั่วไปของวิธีการทั่วไป นี่คือกระดาษเล็ก ๆ น้อย ๆ จากซิสโก้ซึ่งจะอธิบายบางส่วนของขั้นตอนวิธีการที่พวกเขาใช้ในรายละเอียดเพิ่มเติม การใช้งานจากผู้ขายรายอื่นจะแตกต่างกันเล็กน้อย

มีกรณีขอบที่อัลกอริทึมที่แปลกใหม่มีประโยชน์มากขึ้นตัวอย่างเช่นการสตรีมวิดีโออาจให้ประโยชน์กับ "การรับส่งข้อมูลน้อยที่สุด" แต่โดยทั่วไปแล้วสำหรับเว็บแอปพลิเคชั่นและเว็บไซต์ส่วนใหญ่ทางออกที่ดีที่สุดคือ:

  • รวม / ระบบการกระจายเซสชั่นเพื่อให้ Webnode ใด ๆ ที่สามารถตอบคำขอของผู้ใช้ใด ๆ (เช่นข้อมูลเซสชันของผู้ใช้เช่นคุกกี้เซสชั่นสามารถใช้ได้อย่างเท่าเทียมกันในทุกเซิร์ฟเวอร์)

  • โหลดบาลานซ์โดยใช้Round Robin (เป็นทางเลือกถ่วงน้ำหนัก Round Robin) หรือการกระจายแบบสุ่ม Round Robin และ Random เป็นอัลกอริธึมที่ง่ายและยืดหยุ่นโดยไม่มีปัญหา 'ฮอตสปอต' เช่นการกระจายโหลดไปยังแบ็กเอนด์ยังคงยุติธรรมในทุกสถานการณ์


5

คำถามไม่สมบูรณ์:

โหลดยอดคงเหลือคืออะไร

CPU อาจมีความอิ่มตัว มุมมองปกติคือถอยหลัง - ผลักไปที่ทรัพยากรแทนที่จะดึงไปที่มัน

ดิสก์มีโหลดหลากหลายประเภทเพื่อความสมดุลเช่นพื้นที่ว่างความเร็วในการอ่านความเร็วในการเขียนปริมาณงานเป็นต้น

เครือข่ายสามารถโหลดสมดุลตามความล่าช้าหรือปริมาณงานทั้งหมด ...

ผู้คนสามารถโหลดได้อย่างสมดุลโดยขึ้นอยู่กับความสามารถของแต่ละบุคคล งานหลายอย่างดีบางงานก็ทำไม่ได้แล้วมีคุณภาพเทียบกับปริมาณ คุณอาจปรับทรัพยากรมนุษย์ให้เหมาะสมตามปัจจัยหลายประการและด้วยน้ำหนักที่แตกต่างกันตามคุณสมบัติที่แตกต่างกัน

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

สิ่งที่คุณพยายามสร้างความสมดุลคือเกณฑ์แรกในการสร้างอัลกอริธึมการทรงตัวที่ดี และข้อเสนอแนะที่มีเพียงสามคนคือ ... ไม่ได้รับความสว่าง มันจะคุ้มค่าของปริญญาเอกที่จะทำงานที่เหมาะสมพยายามที่จะอธิบายวิธีการทั้งหมด "โหลดมีความสมดุล"

RT


2
คุณไม่มีคำถามของ Richard เลยขั้นตอนวิธีเป็นพื้นฐานของวิธีการหรือการนำไปใช้งาน
monomyth

2
ขอโทษ monomyth ฉันไม่ได้พลาดสิ่งที่ถูกสาป เปิดใจของคุณ.
Richard T

@monomyth @Richard ถูกต้อง - ตัวเลือกอัลกอริทึมขึ้นอยู่กับสิ่งที่คุณทำสมดุลภาระ คุณสามารถพัฒนาอัลกอริทึมในการโหลดการใช้พื้นที่ดิสก์ยอดคงเหลือและอาจไม่นำไปใช้กับสิ่งอื่นใดเช่นคำขอ HTTP
Josh

@Josh, @ Richard แนวคิดของการทำ load balance นั้นเหมือนกัน คุณยังอาจใช้ Round Robin เพื่อปรับสมดุลการใช้ดิสก์ iSCSI, HTTP, CPU, อะไรก็ได้
Mark Henderson

@ Farseeker ฉันเห็นด้วย Round Robin เป็นคนค่อนข้างดี แต่ไม่มีอัลกอริทึมการโหลดบาลานซ์ที่เฉพาะเจาะจงกับงานหรือไม่
Josh

0

ไม่ใช่คำตอบสำหรับคำถามของคุณโดยตรง แต่วิธีแก้ไขปัญหาจริงเราพบว่ามีประโยชน์ ใช้ LVS และชีพจรภูตสมดุลภาระ HTTP ของเรามีการกำหนดค่าการเรียกทุบตีสคริปต์ที่กำหนดเองที่กำหนดความเร็วในการโหลดบนเซิร์ฟเวอร์ "ของจริง" ผ่านการเชื่อมต่อที่ง่าย SSH และโทรออกไปยังuptime

จากนั้นขึ้นอยู่กับค่าเฉลี่ยการโหลดของเซิร์ฟเวอร์การกำหนดน้ำหนักจะถูกกำหนดต่อเซิร์ฟเวอร์ ไม่ใช่วิธีการทางวิทยาศาสตร์ส่วนใหญ่เนื่องจากค่าเฉลี่ยการโหลดไม่จำเป็นต้องบ่งบอกถึงการเชื่อมต่อ HTTP หรือโหลด CPU ที่เกิดจากการเชื่อมต่อเหล่านั้น อย่างไรก็ตามเราได้ผลลัพธ์ที่มีประสิทธิภาพอย่างน่าประหลาดใจ

2c ของฉัน YMMV

PS: ลองดูที่โครงการ LVS - คุณจะพบข้อมูลเกี่ยวกับการใช้งานการวางกำหนดการโหลดบาลานซ์แน่นอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.