ฉันกำลังค้นคว้าอัลกอริทึมการทำโหลดบาลานซ์ที่แตกต่างกันสำหรับ HTTP และฉันเพิ่งค้นพบ 3. สุ่ม, Round Robin และ Weighted Round Robin มีตัวเลือกอื่น ๆ อีกไหม?
ขอบคุณพอล
ฉันกำลังค้นคว้าอัลกอริทึมการทำโหลดบาลานซ์ที่แตกต่างกันสำหรับ HTTP และฉันเพิ่งค้นพบ 3. สุ่ม, Round Robin และ Weighted Round Robin มีตัวเลือกอื่น ๆ อีกไหม?
ขอบคุณพอล
คำตอบ:
อัลกอริทึมการโหลดบาลานซ์ที่พบมากที่สุดสำหรับ 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 เป็นอัลกอริธึมที่ง่ายและยืดหยุ่นโดยไม่มีปัญหา 'ฮอตสปอต' เช่นการกระจายโหลดไปยังแบ็กเอนด์ยังคงยุติธรรมในทุกสถานการณ์
คำถามไม่สมบูรณ์:
โหลดยอดคงเหลือคืออะไร
CPU อาจมีความอิ่มตัว มุมมองปกติคือถอยหลัง - ผลักไปที่ทรัพยากรแทนที่จะดึงไปที่มัน
ดิสก์มีโหลดหลากหลายประเภทเพื่อความสมดุลเช่นพื้นที่ว่างความเร็วในการอ่านความเร็วในการเขียนปริมาณงานเป็นต้น
เครือข่ายสามารถโหลดสมดุลตามความล่าช้าหรือปริมาณงานทั้งหมด ...
ผู้คนสามารถโหลดได้อย่างสมดุลโดยขึ้นอยู่กับความสามารถของแต่ละบุคคล งานหลายอย่างดีบางงานก็ทำไม่ได้แล้วมีคุณภาพเทียบกับปริมาณ คุณอาจปรับทรัพยากรมนุษย์ให้เหมาะสมตามปัจจัยหลายประการและด้วยน้ำหนักที่แตกต่างกันตามคุณสมบัติที่แตกต่างกัน
ข้างต้นอยู่ไกลจากครบถ้วนสมบูรณ์; ประเด็นก็คือทรัพยากรที่แตกต่างกันจะมีการทำโหลดบาลานซ์ที่แตกต่างกันอย่างสิ้นเชิง จากคุณสมบัติและความสามารถที่มีอยู่คุณต้องระบุซึ่งมีความสนใจในการสร้างสมดุล
สิ่งที่คุณพยายามสร้างความสมดุลคือเกณฑ์แรกในการสร้างอัลกอริธึมการทรงตัวที่ดี และข้อเสนอแนะที่มีเพียงสามคนคือ ... ไม่ได้รับความสว่าง มันจะคุ้มค่าของปริญญาเอกที่จะทำงานที่เหมาะสมพยายามที่จะอธิบายวิธีการทั้งหมด "โหลดมีความสมดุล"
RT
ไม่ใช่คำตอบสำหรับคำถามของคุณโดยตรง แต่วิธีแก้ไขปัญหาจริงเราพบว่ามีประโยชน์ ใช้ LVS และชีพจรภูตสมดุลภาระ HTTP ของเรามีการกำหนดค่าการเรียกทุบตีสคริปต์ที่กำหนดเองที่กำหนดความเร็วในการโหลดบนเซิร์ฟเวอร์ "ของจริง" ผ่านการเชื่อมต่อที่ง่าย SSH และโทรออกไปยังuptime
จากนั้นขึ้นอยู่กับค่าเฉลี่ยการโหลดของเซิร์ฟเวอร์การกำหนดน้ำหนักจะถูกกำหนดต่อเซิร์ฟเวอร์ ไม่ใช่วิธีการทางวิทยาศาสตร์ส่วนใหญ่เนื่องจากค่าเฉลี่ยการโหลดไม่จำเป็นต้องบ่งบอกถึงการเชื่อมต่อ HTTP หรือโหลด CPU ที่เกิดจากการเชื่อมต่อเหล่านั้น อย่างไรก็ตามเราได้ผลลัพธ์ที่มีประสิทธิภาพอย่างน่าประหลาดใจ
2c ของฉัน YMMV
PS: ลองดูที่โครงการ LVS - คุณจะพบข้อมูลเกี่ยวกับการใช้งานการวางกำหนดการโหลดบาลานซ์แน่นอน