จะมีทรัพยากรระบบจำนวนเท่าใดสำหรับการเปิดเว็บพ็อกเก็ต 1,000,000 เว็บ [ปิด]


122

Websocket เป็นสิ่งที่ดี แต่จะสามารถรองรับการเชื่อมต่อพร้อมกัน 1,000,000 ครั้งได้หรือไม่?
จะมีทรัพยากรระบบจำนวนเท่าใดสำหรับการเปิดเว็บพ็อกเก็ต 1,000,000 เว็บ

คำตอบ:


65

คำตอบที่อัปเดต

คำตอบสั้น ๆ : ใช่ แต่ราคาแพง

คำตอบยาว :

คำถามนี้ไม่ซ้ำกับ WebSockets เนื่องจาก WebSockets เป็นซ็อกเก็ต TCP ที่มีอายุการใช้งานยาวนานโดยพื้นฐานพร้อมด้วยการจับมือแบบ HTTP และการจัดกรอบข้อความน้อยที่สุด

คำถามที่แท้จริงคือเซิร์ฟเวอร์เดียวสามารถจัดการการเชื่อมต่อซ็อกเก็ตพร้อมกัน 1,000,000 ครั้งได้หรือไม่และทรัพยากรเซิร์ฟเวอร์ใดที่จะใช้? คำตอบนั้นซับซ้อนจากปัจจัยหลายประการ แต่การเชื่อมต่อซ็อกเก็ตที่ใช้งานพร้อมกัน 1,000,000 ครั้งนั้นเป็นไปได้สำหรับระบบที่มีขนาดเหมาะสม (CPU, RAM และเครือข่ายที่รวดเร็ว) และด้วยระบบเซิร์ฟเวอร์ที่ปรับแต่งและซอฟต์แวร์เซิร์ฟเวอร์ที่ปรับให้เหมาะสม

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

ดูคำตอบของ Alessandro Alinone เกี่ยวกับการใช้ทรัพยากรโดยประมาณสำหรับการเชื่อมต่อ 500,000 ครั้ง

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


1
รองรับการเชื่อมต่อซ็อกเก็ต 12 ล้านครั้งบน JVM เดียว ดูวิธีที่พวกเขาทำmrotaru.wordpress.com/2013/10/10/…
Jacques Koorts

@JacquesKoorts thx
BG BRUNO

159

ในระบบปัจจุบันการจัดการการเชื่อมต่อ TCP พร้อมกัน 1 ล้านรายการไม่ใช่ปัญหา

ฉันสามารถยืนยันได้จากการทดสอบของเราเอง (การเปิดเผยข้อมูลทั้งหมด: ฉันเป็น CTO ที่ Lightstreamer)

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

เราติดตั้ง Lightstreamer Server (ซึ่งเป็นเซิร์ฟเวอร์ WebSocket เหนือสิ่งอื่นใด) บนอินสแตนซ์ m2.4xlarge ซึ่งหมายความว่า 8 คอร์และหน่วยความจำ 68.4 GiB

เราเปิดตัวเครื่องไคลเอนต์ 11 เครื่องเพื่อสร้างการเชื่อมต่อ 500,000 พร้อมกันไปยังเซิร์ฟเวอร์ Lightstreamer การทดสอบได้รับการกำหนดค่าเพื่อให้ปริมาณงานขาออกทั้งหมดจากเซิร์ฟเวอร์คือ 90,000 อัปเดต / วินาทีส่งผลให้แบนด์วิดท์ขาออกสูงสุด 450 Mbit / s

เซิร์ฟเวอร์ไม่เคยใช้ RAM เกิน 13 GiB และ CPU มีความเสถียรประมาณ 60%

ด้วยแรมอย่างน้อย 30 GiB คุณสามารถรองรับซ็อกเก็ตพร้อมกัน 1 ล้านซ็อกเก็ต CPU ที่จำเป็นขึ้นอยู่กับปริมาณข้อมูลที่คุณต้องการ


7
ฉันคิดว่านี่เป็นรสชาติของลินุกซ์ คุณช่วยกรุณาแบ่งปันข้อมูลเพิ่มเติมเกี่ยวกับวิธีปรับแต่งเคอร์เนลได้หรือไม่? คำอธิบายไฟล์สูงสุด / ขนาดหน้าต่าง tcp ฯลฯ ?
quixver

14
มันคือวานิลลา Amazon Linux ตัวอธิบายไฟล์เพิ่มขึ้นสูงสุด บัฟเฟอร์การส่ง TCP ลดลงเหลือ 1600 ไบต์ (โดยค่าเริ่มต้นโดย Lightstreamer แม้ว่าจะสามารถปรับจูนด้วยตนเองได้) MSS เป็นค่าเริ่มต้น
Alessandro Alinone

ซอฟต์นี้ฟรีหรือต้องเสียค่าธรรมเนียมในการใช้งานหรือไม่?
Avtandil Kavrelishvili

@AvtandilKavrelishvili: มีทั้งรุ่นฟรีและรุ่นจ่าย
Alessandro Alinone

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