โหลดสมดุลเซิร์ฟเวอร์ UDP


10

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

คำถามของฉันคือฉันจะใช้สมดุลภาระระหว่างเซิร์ฟเวอร์ได้อย่างไร ฉันต้องการกระจายคำร้องขออย่างสม่ำเสมอเท่าที่เป็นไปได้ระหว่างเซิร์ฟเวอร์ ฉันอยากจะมีความซื่อสัตย์ฉันหมายความว่าถ้าไคลเอนต์ X ถูกส่งไปยังเซิร์ฟเวอร์ y จากนั้นฉันต้องการให้คำขอ X ถัดไปทั้งหมดไปที่เซิร์ฟเวอร์ Y ตราบใดที่มันสมเหตุสมผลและไม่เกิน Y

โดยวิธีการที่มันเป็นระบบ. NET ... สิ่งที่คุณจะแนะนำ?


สถานะเป็นภายในภายในเซิร์ฟเวอร์ไม่ใช่ธุรกรรมบางประเภท สถานะคือข้อมูลบางส่วนที่เซิร์ฟเวอร์รวมจากข้อมูลที่ได้รับและสามารถทำได้ด้วย WCF WebService แบบง่าย แอปพลิเคชั่นนี้ใช้ UDP และแม้ว่าฉันจะไม่เห็นด้วยกับการตัดสินใจ แต่มันก็คือ "เหนือระดับการจ่ายเงิน"

ขณะนี้ฉันกำลังลองใช้ NLB ของ MS ใช้งานได้มันทำสิ่งที่น่าเชื่อถือนอกกรอบ แต่มันสร้างเสียงรบกวนบนเครือข่ายทั้งหมด ...

ยังไม่มี DNS ... โอ้และเป็นโปรโตคอลชุดสมบูรณ์


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

คำตอบ:


4

ฉันมีเซิร์ฟเวอร์ udp, [... ] เซิร์ฟเวอร์เกือบไร้สัญชาติทั้งหมด [.. ] มีความน่าเชื่อถือบางอย่างฉันหมายความว่าถ้าไคลเอนต์ X ถูกส่งไปยังเซิร์ฟเวอร์ y จากนั้นฉันต้องการคำขอ X ถัดไปทั้งหมดเพื่อไปยังเซิร์ฟเวอร์ Y ตามที่ ตราบใดที่มันสมเหตุสมผลและไม่โอเวอร์โหลดวาย

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

ฉันเห็น 3 แนวทางที่ใกล้เคียงกับการจัดหาสิ่งที่คุณต้องการ:

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

  • ใช้ DNS และใช้ DNS Round Robin ดังที่ Matt Simmons แนะนำไว้แล้ว

  • ใช้ Windows ในตัวNetwork Load Balancing (NLB) สุจริตฉันไม่ทราบว่าสถานการณ์ความล้มเหลวจะเล่นกับ NLB และบริการกึ่ง UDP ของคุณได้อย่างไรคุณจะต้องตรวจสอบด้วยตัวคุณเองตามวิธีที่แอปพลิเคชันของคุณจัดการกับสถานะ ในด้านบวก NLB นั้นติดตั้งได้ง่ายโดยไม่เสียค่าใช้จ่ายกับใบอนุญาต Windows, เป็นผู้ใหญ่และมีประสิทธิภาพดี


ฉันแก้ไขคำถามของฉัน
Hellfrost

6

Linux Virtual Serverเป็นเซิร์ฟเวอร์ที่ปรับขนาดได้และพร้อมใช้งานสูงที่สร้างขึ้นบนคลัสเตอร์ของเซิร์ฟเวอร์จริง LVS รองรับโปรโตคอล UDP และอัลกอริธึมการแฮชแหล่งที่มา (ใช้เมื่อคุณต้องการให้ไคลเอนต์ปรากฏบนเซิร์ฟเวอร์ reals เดียวกันเสมอ)

ฉันใช้ LVM เพื่อปรับสมดุล DNS (rr), SIP (sh)


4

น่าสนใจ ซอฟต์แวร์พร็อกซีส่วนใหญ่ที่ฉันเห็นเป็นที่ยอมรับตาม TCP

โหลดบาลานซ์เฉพาะ UDP ส่วนใหญ่ที่ฉันเคยเห็นในประสบการณ์ขาดแคลนของฉันนั้นใช้ DNS (เช่น: เซิร์ฟเวอร์เวลาเซิร์ฟเวอร์ DNS ฯลฯ ) มีวิธีใดในการจัดทำเรกคอร์ด A หลายรายการ? หากใช้งานได้ DNS Round Robin ปกติจะรับรองการกระจายของการร้องขออย่างยุติธรรม (อาจยุติธรรมเพียงพอแล้ว) และการแคชไคลเอ็นต์จะทำให้มั่นใจได้ว่าความถูกต้องยังคงอยู่ (สมมติว่าคุณกำลังใช้แพลตฟอร์มแคชตามปลายไคลเอนต์)


ไม่มี DNS เลย
Hellfrost

2

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

ตัวโหลดบาลานซ์ระดับ 3:จะโหลดยอดดุลเท่านั้นโดยดูที่ IP ขาเข้าและ IP ส่วนแบ็คเอนด์ที่มีอยู่ตัวโหลดบาลานเซอร์ประเภทนี้จะรับรองความหนืดโดยการส่งที่อยู่ IP ขาเข้าเดียวกันไปยังแบ็กเอนด์เดียวกันเสมอแม้ว่ากลยุทธ์ประเภทนี้ ของแบ็กเอนด์ถ้าลูกค้าจำนวนมากมาจาก IP เดียวกัน (ไม่ว่าจะเป็นพร็อกซีหรือเกตเวย์องค์กร)

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

เมื่อพิจารณาว่าคุณกำลังใช้ UDP balancer ทั้งสองควรให้ประสิทธิภาพที่ดีนอกจากนี้การตรวจสอบแพ็คเก็ตลึกใน UDP นั้นมีข้อ จำกัด มากกว่าบน TCP เล็กน้อย (เนื่องจากเหตุผลโปรโตคอล)

ขึ้นอยู่กับงบประมาณของคุณคุณสามารถเริ่มต้นโดยใช้ load balancer ซอฟต์แวร์ (ตัวอย่างเช่น linux + IPVS) จากนั้นเริ่มขึ้นไปที่ load balancer เช่นฮาร์ดแวร์ที่ Cisco หรือ Netapp เสนอให้


-1 สำหรับส่วน L7 เลเยอร์ / ระดับ 7 balancer โหลดทำงานที่ชั้นสมัคร - แต่ตั้งแต่ OP ใช้ UDP, เขาไม่ได้ใช้ HTTP เก่าธรรมดาและเขาไม่ได้เปิดเผยว่าโปรแกรมที่เขาจะใช้ เราไม่สามารถทราบได้ว่ามี L7 load balancer สำหรับโปรโตคอล OP ที่ใช้อยู่
Jesper M

1
ฉันเป็นเพียงการแสดงความคิดเห็นตัวเลือกของเขาในการโหลด balancers และเราไม่ทราบว่าเขาใช้มากกว่า UDP ผมคิดว่าคุณกำลังตัดคนนี้แน่นเกินไป;)
lynxman

มีบางอย่างระหว่าง NLB / linux และ Cisco / netapp: KEMP loadbalancer คุณสามารถรับฉบับเสมือนจริงซึ่งไม่เสียค่าใช้จ่ายมากมายเราใช้มันและเรามีความสุขมาก
pauska

2

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

มีจำหน่ายในรุ่น nginx-1.9.13

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