อะไรคือวิธีการทั่วไปในการแยกแยะโหลดบาลานเซอร์ของซอฟต์แวร์?


22

ฉันมักจะเห็นสถาปัตยกรรมแอปเว็บด้วย SLB / reverse-proxy หน้าเซิร์ฟเวอร์แอพจำนวนมาก

จะเกิดอะไรขึ้นเมื่อจำนวนการเชื่อมต่อกับ SLB ต้องการทรัพยากรมากเกินไปสำหรับSLB เดียวเพื่อจัดการอย่างมีประสิทธิภาพ สำหรับตัวอย่างที่เป็นรูปธรรม แต่ไม่ซับซ้อนให้พิจารณาการเชื่อมต่อ HTTP 2 ล้านแบบถาวร เห็นได้ชัดว่าSLB เดียวไม่สามารถจัดการกับสิ่งนี้ได้

การกำหนดค่าที่แนะนำสำหรับการปรับคืออะไรออก SLB?

เป็นเรื่องปกติที่จะสร้างกลุ่ม / กลุ่มของ LB หรือไม่? ถ้าเป็นเช่นนั้นโหลดของลูกค้าจะกระจายออกไประหว่างกลุ่ม LB อย่างไร?


z8000, คุณสามารถพูดได้ว่าซอฟต์แวร์ load-balancer ที่คุณใช้อยู่คืออะไร? นอกจากนี้หากเป็นไปได้ว่าจะใช้อัลกอริธึม / โปรโตคอลใดสำหรับการทำโหลดบาลานซ์
Martin

ฉันไม่มีความชอบ ฉันอัปเดตคำถามให้ชัดเจนขึ้น
z8000

มันไม่ชัดเจนสำหรับฉันว่าทำไม load balancer ภายในไม่สามารถจัดการการเชื่อมต่อ HTTP ถาวร 2 ล้าน
womble

คำตอบ:


10

ตัวปรับสมดุลโหลดไม่สามารถปรับขนาดได้อย่างง่ายดายโดยตัวโหลดบาลานซ์อื่น ๆ เนื่องจากจะมีโหลดบาลานเซอร์เดี่ยวบนโซ่ที่มีการเชื่อมต่อ ที่กล่าวว่า balancers เช่น LVS หรือ HAProxy มีความสามารถไร้สาระในช่วง Gbps เมื่อคุณได้รับเกินขีดความสามารถของ load balancer เดียว (ซอฟต์แวร์, ฮาร์ดแวร์, อะไรก็ตาม) แล้วคุณจะต้องย้ายไปใช้เทคนิคอื่น ๆ เช่น round robin DNS


ขวา! การมี LB ตัวเดียวคือ "ปัญหา" ฉันยอมรับว่าปริมาณงานจะไม่เป็นปัญหาโดยทั่วไป แต่ฉันกังวลเกี่ยวกับทรัพยากรอื่น ๆ เช่น RAM ซึ่งในกรณีของฉันมี จำกัด มีการเชื่อมต่อมากมายที่สามารถโฮสต์บน SLB เดียวก่อนที่ RAM จะหมด
z8000

HAProxy สามารถจัดการเซสชันที่ทำงานประมาณ 20k-60k ต่อ GB of RAM ฉันเชื่อว่า LVS สามารถทำได้มากกว่านี้เนื่องจากข้อมูลเซสชันที่เก็บไว้มีขนาดเล็กลง หากคุณไม่มี RAM ให้อัปเกรดหรือสร้าง load balancer อื่นที่อยู่ด้านหน้าโดยระบบ DNS แบบรอบตัว
Hyppy

1
"load balancer ไม่สามารถปรับขนาดได้อย่างง่ายดายโดย load balancer อื่น" - ที่จริงแล้วตัวโหลดบาลานซ์ L4 แบบ ASIC เดียวสามารถวางไว้ด้านหน้า L7 HTTP ที่มีโหลดบาลานซ์สองตัวพร้อมผลลัพธ์ที่ยอดเยี่ยม หลักการพื้นฐานเดียวกันนี้ใช้สำหรับการใช้งานเฉพาะซอฟต์แวร์เช่น Linux LVS หน้า nignx
Jesper M

19

ตกลงมีคำตอบที่ได้รับการยอมรับอยู่แล้ว แต่มีบางอย่างที่ต้องเพิ่ม .. วิธีการทั่วไปในการปรับขนาดเทียร์บาลานเซอร์โหลดคือ (ตามลำดับโดยเฉพาะ):

  • DNS Round Robinเพื่อเผยแพร่ที่อยู่ IP หลายแห่งสำหรับโดเมน สำหรับแต่ละที่อยู่ IP ให้ใช้คู่เซิร์ฟเวอร์ที่มีความพร้อมใช้งานสูง (2 เซิร์ฟเวอร์ที่ร่วมมือกันเพื่อให้ที่อยู่ IP หนึ่งทำงานตลอดเวลา) แต่ละ IP สอดคล้องกับคลัสเตอร์ตัวโหลดบาลานซ์หนึ่งคลัสเตอร์โดยใช้อุปกรณ์หรือเซิร์ฟเวอร์ที่มีซอฟต์แวร์โหลดบาลานซ์ ปรับขนาดแนวนอนโดยเพิ่มคู่โหลดบาลานเซอร์เพิ่มเติมตามต้องการ

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

  • ชั้นของIP โหลด balancers ระดับในด้านหน้าของชั้นของโหลด balancers การทำโหลดบาลานซ์ของเลเยอร์ IP สามารถนำไปใช้ใน ASICs / ซิลิคอนและสามารถชั่วร้ายได้อย่างรวดเร็วสำหรับบางสิ่ง ดังนั้นคู่ IP load balancer คู่หนึ่งสามารถ 'ติดตาม' กับ load balancer ระดับ HTTP / HTTPS หลายตัวและให้ระดับประสิทธิภาพหลายกิกะบิตในขณะที่รักษาสถาปัตยกรรมที่ดีและเรียบง่าย

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

ไม่ว่าคุณจะเลือกใช้ form factor ของอุปกรณ์ (F5, Cisco, A10) หรือเซิร์ฟเวอร์ทั่วไป (ซอฟต์แวร์ Windows / Linux +) มีความสำคัญน้อยกว่า ข้อควรพิจารณาที่สำคัญเมื่อปรับขนาดเลเยอร์โหลดบาลานซ์คือ:

  • รัฐเต็มกับรัฐไร้ คุณต้องการช่วงเวลาที่เหนียวหรือคุณจะอยู่ได้โดยปราศจาก? การไม่รักษาสถานะทำให้ทุกอย่างง่ายขึ้น
  • 'ฮาร์ดแวร์' (ASICs) กับ 'ซอฟต์แวร์' (เซิร์ฟเวอร์เอนกประสงค์) สำหรับการทำโหลดบาลานซ์ แต่ละคนมีข้อดีข้อเสียโปรดดูเอกสารภาพรวม HAProxy ที่ลิงก์ด้านบน
  • L3 / 4 (IP / TCP / IP) โหลดบาลานซ์เทียบกับ L7 (HTTP)โหลดบาลานซ์ ข้อดีและข้อเสียอีกครั้งเอกสาร HAProxy ให้ภาพรวมที่ดี
  • การยกเลิก SSL , ที่, บนเว็บโหนดหรือบน load balancer

โดยทั่วไปคุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้ก่อนที่เว็บไซต์ของคุณจะมีขนาดใหญ่มาก - เซิร์ฟเวอร์สมัยใหม่ที่มี fx nginx จะจัดการกับคำขอ HTTP ธรรมดานับหมื่นต่อวินาที ดังนั้นอย่าเพิ่มประสิทธิภาพก่อนวัยอันควรอย่าจัดการกับสิ่งนี้ก่อนที่คุณจะต้องทำ


คุณไม่ต้องการให้ที่อยู่ IP แต่ละรายการใช้งานได้จริงโดยใช้ DNS RR โดยทั่วไปแล้วเบราว์เซอร์จะถอยกลับไปที่ IP อื่นหากมีเมื่อไม่สามารถเชื่อมต่อได้ แต่ถ้าคุณมีบริการเว็บสาธารณะคุณจะต้อง HA สำหรับแต่ละที่อยู่ IP เนื่องจากห้องสมุดบริการเว็บจำนวนมากจะไม่จัดการกับ IP อื่น ๆ ที่ล้มเหลวโดยอัตโนมัติ
rmalayter

9

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

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

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

สิ่งที่ฉันอธิบายที่นี่เป็นเรื่องยากที่จะนำไปปฏิบัติมากกว่าที่อธิบายไว้ในคำตอบอื่น ๆ แต่นี่คือสิ่งที่ล้ำสมัยหากคุณมีเว็บไซต์ที่มีการดูแลการแสดงสูงที่มีปัญหาเรื่องความยืดหยุ่นและความพร้อมใช้งานมากกว่า 99.9% . หากคุณมีวิศวกรเครือข่ายแล้วก็มีค่าใช้จ่ายน้อยกว่าในการติดตั้งและใช้งาน (ทั้งแบบ capex และ opex) กว่าอุปกรณ์ load balancer และสามารถปรับขนาดได้เกือบจะไม่มีค่าใช้จ่ายเพิ่มเติม (เทียบกับการซื้อแบบใหม่มากยิ่งขึ้น เครื่องใช้ไฟฟ้าราคาแพงเมื่อคุณโตเกินรุ่นปัจจุบันของคุณ)

กลยุทธ์แรก: ด้วยไฟร์วอลล์

สมมุติว่าคุณมีเราเตอร์สองตัวที่เชื่อมต่อ ISP ของคุณ ISP ของคุณมี 2 ลิงก์ (active / passive โดยใช้ VRRP) บนเราเตอร์ของคุณคุณใช้ VRRP และคุณกำหนดเส้นทางการรับส่งข้อมูลไปยังเครือข่ายสาธารณะของคุณไปยังไฟร์วอลล์ ไฟร์วอลล์ ( FW 1และFW 2ด้านล่าง) ยังทำงานอยู่ / ไม่โต้ตอบและจะกรองการรับส่งข้อมูลและส่งแต่ละขั้นตอนไปยังเซิร์ฟเวอร์ส่วนหน้าที่ดีต่อสุขภาพ (โหลดบาลานเซอร์ HTTP ของคุณFE 1และFE 2ด้านล่าง)

      + -------------- + + -------------- +
      | ISP เราเตอร์ A | | ISP เราเตอร์ B |
      + -------------- + + -------------- +
             | |
           == # ====================== # == (เครือข่ายสาธารณะ)
             | |
      + --------------- + + --------------- +
      | เราเตอร์ของคุณ | เราเตอร์ของคุณ B |
      + --------------- + + --------------- +
             | |
           == # ===== # ========== # ===== # == (เครือข่ายส่วนตัว RFC 1918)
             | | | |
       + ------ + + ------ + + ------ + + ------ +
       | FW 1 | | FE 1 | | FE 2 | | FW 2 |
       + ------ + + ------ + + ------ + + ------ +

เป้าหมายคือมีลักษณะดังนี้:

  1. ISP กำหนดเส้นทางการรับส่งข้อมูลไปยัง IP ของคุณไปยังเราเตอร์ที่ใช้งานอยู่ของคุณ
  2. เราเตอร์ของคุณกำหนดเส้นทางการรับส่งข้อมูลไปยัง VIP ที่ใช้ที่อยู่RFC 1918 วีไอพีนี้เป็นของไฟร์วอลล์ที่ใช้งานอยู่ซึ่งคล้ายกับ VRRP หากคุณใช้ OpenBSD สำหรับความต้องการไฟร์วอลล์ของคุณคุณสามารถใช้CARPซึ่งเป็นทางเลือกที่ไม่มีสิทธิบัตรสำหรับ VRRP / HSRP
  3. ไฟร์วอลล์ของคุณใช้ตัวกรอง (เช่น "อนุญาตเพียง 80 / tcp และ 443 / tcp ไปยังที่อยู่ IP นี้โดยเฉพาะ")
  4. ไฟร์วอลล์ของคุณยังทำหน้าที่เป็นเราเตอร์และส่งต่อแพ็คเก็ตไปยังส่วนหน้าแข็งแรง
  5. ส่วนหน้าของคุณยุติการเชื่อมต่อ TCP

ตอนนี้ความมหัศจรรย์เกิดขึ้นในขั้นตอนที่ 4 และ 5 ดังนั้นเรามาดูรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่พวกเขาทำ

ไฟร์วอลล์ของคุณรู้รายการของส่วนหน้า ( FE 1และFE 2) และจะเลือกหนึ่งในนั้นตามลักษณะเฉพาะของโฟลว์ (เช่นโดยการแปลง IP ต้นทางและพอร์ตในส่วนหัวอื่น ๆ ) แต่มันก็ต้องทำให้แน่ใจว่ามันกำลังส่งต่อทราฟฟิกไปยังส่วนหน้าที่แข็งแรงไม่เช่นนั้นคุณจะเป็นทรัคของ blackhole ถ้าคุณใช้ OpenBSD relaydตัวอย่างเช่นคุณสามารถใช้ อะไรrelaydทำง่าย: มันตรวจสุขภาพของคุณทั้งหมด (เช่นโดยการส่งคำขอ HTTP โพรบให้พวกเขา) และเมื่อใดก็ตามที่ส่วนหน้ามีสุขภาพดีมันจะเพิ่มเข้าไปในตารางที่ไฟร์วอลล์ใช้เพื่อเลือก hop ถัดไปของแพ็กเก็ตของโฟลว์ที่กำหนด . หากส่วนหน้าล้มเหลวในการตรวจสอบสุขภาพก็จะถูกลบออกจากตารางและไม่มีแพ็กเก็ตจะถูกส่งไปอีกต่อไป เมื่อส่งต่อแพ็กเก็ตไปยังส่วนหน้าไฟร์วอลล์ทั้งหมดจะทำการสลับที่อยู่ MAC ปลายทางของแพ็กเก็ตให้เป็นส่วนที่เลือกไว้

ในขั้นตอนที่ 5 แพ็คเก็ตจากผู้ใช้จะได้รับโดย load balancer ของคุณ (ไม่ว่าจะเป็น Varnish, nginx หรืออะไรก็ตาม) ณ จุดนี้แพ็คเก็ตยังคงอยู่ในที่อยู่ IP สาธารณะของคุณดังนั้นคุณต้องนามแฝง VIP ของคุณบนอินเทอร์เฟซวนรอบ สิ่งนี้เรียกว่าDSR (Direct Server Return) เนื่องจากส่วนหน้าของคุณยุติการเชื่อมต่อ TCP และไฟร์วอลล์ในระหว่างนั้นจะเห็นเฉพาะทราฟฟิกทราฟฟิก (เฉพาะแพ็กเก็ตที่เข้ามา) เราเตอร์ของคุณจะกำหนดเส้นทางแพ็กเก็ตขาออกโดยตรงกลับไปที่เราเตอร์ของ ISP นี่เป็นสิ่งที่ดีสำหรับการรับส่งข้อมูล HTTP เนื่องจากคำขอมีขนาดเล็กกว่าการตอบสนอง เพื่อให้ชัดเจน: นี่ไม่ใช่สิ่งเฉพาะของ OpenBSD และใช้กันอย่างแพร่หลายในเว็บไซต์ที่มีการดูแลการแสดงโฆษณาสูง

gotchas:

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

กลยุทธ์ที่สอง: ไม่มีไฟร์วอลล์

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

คุณจะต้องมีเราเตอร์ที่รองรับ ACLs L3 / L4 ต่อพอร์ตBGPและECMPและการกำหนดเส้นทางตามนโยบาย (PBR) มีเพียงเราเตอร์ระดับสูงเท่านั้นที่สนับสนุนคุณสมบัติเหล่านี้และพวกเขามักจะมีค่าธรรมเนียมใบอนุญาตเพิ่มเติมในการใช้ BGP โดยทั่วไปแล้วจะยังคงราคาถูกกว่าตัวโหลดบาลานซ์ของฮาร์ดแวร์และยังปรับขยายได้ง่ายกว่า สิ่งที่ดีเกี่ยวกับเราเตอร์ระดับไฮเอนด์เหล่านี้คือพวกเขามักจะเป็นอัตราสาย (เช่นพวกเขาสามารถเชื่อมโยงได้สูงสุดแม้ในอินเทอร์เฟซ 10GbE เพราะการตัดสินใจทั้งหมดจะทำในฮาร์ดแวร์โดย ASIC)

ในพอร์ตที่คุณมี ISP ของคุณอัปโหลดให้ใช้ ACL ที่เคยอยู่ในไฟร์วอลล์ (เช่น "อนุญาต 80 / tcp และ 443 / tcp ไปยังที่อยู่ IP นี้เท่านั้น") จากนั้นให้แต่ละส่วนหน้าของคุณรักษาเซสชัน BGP กับเราเตอร์ของคุณ คุณสามารถใช้ที่ดีเยี่ยมOpenBGPD (ถ้าส่วนหน้าของคุณอยู่ใน OpenBSD) หรือQuagga เราเตอร์ของคุณจะ ECMP ปริมาณการใช้งานไปยังส่วนหน้าที่มีสุขภาพดี (เพราะพวกเขากำลังรักษาเซสชัน BGP ของพวกเขา) เราเตอร์จะกำหนดเส้นทางทราฟฟิกให้เหมาะสมโดยใช้ PBR

การปรับแต่ง

  • ด้วยโซลูชันการจับคู่ไฟร์วอลล์จะดีถ้าคุณสามารถซิงโครไนซ์สถานะ TCP ข้ามไฟร์วอลล์ดังนั้นเมื่อไฟร์วอลล์หนึ่งล้มเหลวทุกอย่างจะล้มเหลวอย่างราบรื่นกับอีกอันหนึ่ง pfsyncคุณสามารถบรรลุนี้กับ
    • โปรดทราบว่าpfsyncโดยทั่วไปแล้วจะเพิ่มอัตราแพ็กเก็ตเป็นสองเท่าในไฟร์วอลล์ของคุณ
    • HTTP เป็นโปรโตคอลไร้สัญชาติจึงไม่สิ้นสุดของโลกถ้าคุณตั้งค่าการเชื่อมต่อทั้งหมดในระหว่างการ failover pfsyncไฟร์วอลล์เพราะคุณไม่ได้ใช้
  • หากคุณขยายไฟร์วอลล์มากกว่าหนึ่งครั้งคุณสามารถใช้ ECMP บนเราเตอร์ของคุณเพื่อกำหนดเส้นทางการรับส่งข้อมูลของคุณไปยังไฟร์วอลล์มากกว่าหนึ่งคู่
  • หากคุณใช้ไฟร์วอลล์มากกว่าหนึ่งคู่คุณอาจทำให้พวกมันใช้งานได้ / ใช้งานอยู่ คุณสามารถทำได้โดยการให้ไฟร์วอลล์รักษาเซสชัน BGP กับเราเตอร์เหมือนกับที่ frontends จำเป็นต้องรักษาไว้ในการออกแบบที่ 2 โดยไม่มีไฟร์วอลล์

ตัวอย่างrelaydการตั้งค่า

ดู HOWTO ได้ที่https://calomel.org/relayd.html

vip = "1.2.3.4" # ที่อยู่ IP สาธารณะของคุณ
               # (คุณสามารถมีได้มากกว่าหนึ่ง แต่ไม่จำเป็นต้อง)
FE1 = "10.1.2.101"
Fe2 = "10.1.2.102"
Fe3 = "10.1.2.103"
fe4 = "10.1.2.104" # คุณสามารถมีส่วนหน้าได้จำนวนเท่าใดก็ได้
int_if = "em0"
ตาราง <fe> ลองลองอีกครั้ง {$ fe1 2, ลองอีก $ fe2 2, ลองอีก $ $ fe3 2, $ fe4 ลองอีก 2}
ตาราง <fallback> {127.0.0.1}

webtraffic เปลี่ยนเส้นทาง {
        ฟังบนพอร์ต $ vip 80
        หมดเวลาเซสชัน 60
        เส้นทางไปที่ <fe> ตรวจสอบ http "/healthcheck.html" digest "(sha1sum of healthcheck.html)" ส่วนต่อประสาน $ int_if
}

2

โดยส่วนตัวแล้วฉันจะไปที่เครื่องปรับสมดุลโหลดฮาร์ดแวร์ที่เรียบง่ายและกำหนดค่าได้น้อยกว่า ณ จุดนั้น - สิ่งต่าง ๆ เช่น ACE / ASAs ของ Cisco, Foundry ServerIrons, หรือแม้แต่ Zeus ZXTMs (SW LB ที่ออกแบบมาเพื่อรับภาระหนักมาก)


ในคำอื่น ๆ ขนาดขึ้น ? LB ดังกล่าวจะยังคงได้รับการขยายสูงสุดที่การเชื่อมต่อจำนวนหนึ่ง (ฯลฯ ) ถ้าเช่นนั้นจะเป็นอย่างไร นั่นเป็นคำถามของฉัน ขอบคุณ!
z8000

1
ไซต์ขนาดใหญ่จริง ๆ ใช้ LBs ที่ใช้งานหนักจำนวนมากที่ทำงานภายใต้รูปแบบ DNS round-robin บางรูปแบบ - มันดีพอสำหรับช่วงเวลาส่วนใหญ่และสามารถจัดการการเชื่อมต่อหลายร้อยล้านรายการ ที่กล่าวว่ามีคำถามว่าทำไมการเชื่อมต่อจำนวนมากต้องยังคงเปิดแน่นอน ...
Chopper3

คือว่าภายใน RRDNS คุณหมายความว่าอย่างไร เรียบร้อยฉันไม่คิดอย่างนั้น เรื่องการเชื่อมต่อแบบเปิด ... ฉันกำลังสำรวจตัวเลือกสำหรับแอพที่ต้องการส่งการอัปเดตไปยังลูกค้าที่เชื่อมต่อเมื่อเวลาผ่านไปเนื่องจากมีเหตุการณ์เกิดขึ้นที่ใดที่หนึ่งในแบ็กเอนด์ ฉันขาดระหว่างเซิร์ฟเวอร์ TCP ที่กำหนดเองหรือการเชื่อมต่อ HTTP แบบเปิดจำนวนมากที่อยู่ด้านหลัง SLB ขอบคุณสำหรับความคิดเห็นของคุณ
z8000

ฉันคิดว่ามันจะต้องเป็น RRDNS ภายนอก ตัวอย่างเช่น Twitter.com จะใช้ RRDNS เพื่อแก้ไขและแจกจ่ายคำขอไปยัง LB ขนาดใหญ่จำนวนมากซึ่งจะกระจายโหลดไปยังเซิร์ฟเวอร์
Robert

ใช่ Robert คุณพูดถูกเช่นเราใช้กล่อง Cisco GSS เพื่อทำ RR ในแต่ละไซต์
Chopper3

1

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

สิ่งที่คุณกำลังทำจริง ๆ ต้องการการตอบสนองนี้เป็นมิลลิวินาทีมากหรือลูกค้าสามารถรอ 15/20 วินาทีจนกว่าจะถึงระยะเวลาการเลือกตั้งครั้งต่อไปหรือไม่


0

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

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


สิ่งที่คุณเรียกร้องเกี่ยวกับปลาคาร์พนั้นยังห่างไกลจากวิธีการทำงานฉันไม่รู้จะเริ่มอย่างไร! + -0 สำหรับการกล่าวถึง IPVS
3molo

@ 3molo ... ฮะ? ดูที่ net.inet.carp.arpbalance ที่ linux.com/archive/feed/35482 "..CARP source-hashes IP ต้นทางของคำขอจากนั้นแฮชจะถูกใช้เพื่อเลือกโฮสต์เสมือนจากพูลที่มีอยู่เพื่อจัดการคำขอ ."
พอล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.