MQTT สามารถปรับขนาดได้กับลูกค้ามากกว่า 1,000 รายหรือไม่


10


อุปกรณ์สถานการณ์ IoT (อุปกรณ์ IPv4 ในปัจจุบัน) ที่ส่งผ่านทางซ็อกเก็ต TCP จะบรรจุข้อมูลลงในเซิร์ฟเวอร์หนึ่งครั้งต่อวัน เซิร์ฟเวอร์มีที่อยู่ IP สาธารณะอุปกรณ์อยู่หลังเราเตอร์ / NAT ฉันจะใช้โมดูลตาม ESP8266 (เช่น Olimex หนึ่ง)

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

ข้อกำหนดอื่น ๆ
อุปกรณ์ IoT อาจโตได้หลายพันเครื่อง การเชื่อมต่ออินเทอร์เน็ตของพวกเขานั้นมีให้โดยเราเตอร์ / โมเด็มที่รองรับ 4G หลายตัว แต่ละคนจะจัดการกับลูกค้า 10-20

โซลูชันที่เสนอ
เท่าที่ฉันเข้าใจโซลูชันทั่วไปคือ MQTT ลูกค้าส่งข้อมูลไปยังนายหน้า (เช่น Mosquitto ที่ทำงานบนเซิร์ฟเวอร์โฮสติ้ง) เป็นระยะซึ่งในทางกลับกันจะอัปเดตแอปพลิเคชันเว็บหลักที่ทำงานบนเซิร์ฟเวอร์เดียวกัน

คำถาม
วิธีการ MQTT เหมาะสำหรับอุปกรณ์ "ขนาดใหญ่" (1,000+) ส่วนใหญ่อยู่ด้านหลังเราเตอร์ 4G หรือไม่


อาจเป็นการดีกว่าถ้าคุณถามคำถาม (1) แยกต่างหากและเพียงแค่ถามคำถาม (2) ที่ตรงกับชื่อของคุณในเนื้อหาคำถาม ด้วยวิธีนี้เราสามารถตอบคำถามของคุณแยกกันอย่างละเอียด คุณสามารถรวมบริบทของคุณอีกครั้งในคำถามใหม่หรือลิงก์ไปยังเนื้อหานี้หากมันช่วยได้
Aurora0001

1
คำถามมีการเปลี่ยนแปลงและเพิ่มคำถามที่สอง
ทำเครื่องหมาย

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

คำตอบ:


7

ลูกค้า 1,000 รายสามารถจัดการได้โดยนายหน้า MQTT ที่มีคุณภาพ มีมาตรฐานจากScalagentซึ่งแสดงให้เห็นว่าพีซีที่มี:

  • โปรเซสเซอร์ 3 GHz Intel Core 2 Duo
  • RAM 4 GB

สามารถจัดการผู้เผยแพร่ 60,000 รายที่ใช้งาน Mosquitto ได้ นี่เกินกว่าที่ผู้เผยแพร่โฆษณาของคุณต้องการ 1,000 รายดังนั้นแม้กระทั่งบนเซิร์ฟเวอร์ที่ค่อนข้างอ่อนแอคุณก็ควรจะสามารถจัดการกับจำนวนที่ต้องการได้

โบรกเกอร์รายอื่นบางรายเรียกร้องประสิทธิภาพที่ดียิ่งขึ้น (ซึ่งแน่นอนว่ามีกำลังงานเซิร์ฟเวอร์ที่สูงกว่าเช่นกัน) เช่นHiveMQซึ่งอ้างว่าจัดการกับผู้เผยแพร่10 ล้านคน

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

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


ฉันอธิบายผิดอย่างแน่นอน เฉพาะเซิร์ฟเวอร์ (บริการโฮสติ้งเชิงพาณิชย์) ควรจัดการกับลูกค้ามากกว่า 1,000 คน มีเราเตอร์ 4G จำนวนมากในหลาย ๆ ที่และแต่ละแห่งจะรองรับลูกค้าเพียง 10-20 คน
ทำเครื่องหมาย

โอ้ฉันอ่านผิด - ความผิดของฉัน @ Mark ฉันคิดว่าคุณหมายถึงพวกเขาทั้งหมดที่อยู่เบื้องหลังเราเตอร์ 4G หนึ่งเครื่อง ฉันจะแก้ไขสิ่งนี้ในกรณีนั้น
Aurora0001

ฉันยังไม่เข้าใจรหัสพื้นฐานของ MQTT - ฉันกลัวการเชื่อมต่อ 4G: MQTT ต้องใช้การเชื่อมต่ออินเทอร์เน็ตแบบถาวรหรือไม่? ดูเหมือนว่าเครือข่ายจะไม่เสถียร ...
ทำเครื่องหมาย

ฉันแก้ไขด้วยคำแนะนำแล้ว @Mark; แจ้งให้เราทราบหากคุณชี้ไปในทิศทางที่ถูกต้อง
Aurora0001

1
ใช่มันชัดเจนขึ้นแล้ว ฉันจะทำการค้นหาเพิ่มเติมเกี่ยวกับหัวข้อนี้และหากฉันยังต้องการความช่วยเหลือฉันจะถามคำถามอื่น ขอบคุณมาก.
ทำเครื่องหมาย

5

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

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

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


ฉันไม่คิดว่านายหน้า SaaS MQTT นั้นดีที่สุดสำหรับการผลิตเสมอ โบรกเกอร์ MQTT มืออาชีพส่วนใหญ่ (เป็นโฮสต์ด้วยตนเอง) สนับสนุน HA, ความซ้ำซ้อนและความล้มเหลวในระดับขณะที่ยังคงความเข้ากันได้ของ MQTT แบบเต็ม โบรกเกอร์ SaaS บางรายไม่สนับสนุนคุณสมบัติ MQTT ทั้งหมด หากคุณทดสอบกับ mosquitto ในพื้นที่แล้วไปที่ผู้ให้บริการ SaaS โอกาสที่สิ่งต่างๆจะไม่ทำงานตามที่ตั้งใจไว้
Dominik Obermaier

ตามปกติมีข้อดีข้อเสียของตัวเลือกทั้งสอง เห็นได้ชัดว่านายหน้า SaaS ต้องการทีมการสื่อสารที่สมบูรณ์แบบการทดสอบระยะยาวในระยะแรกของการพัฒนาผลิตภัณฑ์การรับประกันความพร้อมใช้งานที่ชัดเจนและ SLA ต่างๆ การรักษานายหน้าของตัวเองเป็นวิธีที่ดี แต่โลกกำลังก้าวเข้าสู่บริการ ไม่ว่าคุณจะพยายามและมีความสามารถมากที่สุดกับผลิตภัณฑ์ของคุณที่ใช้นายหน้าเป็นส่วนหนึ่งของมันหรือคุณจะใช้เวลาและเงินในการเป็นผู้ดูแล MQTT-broker ที่มีประสบการณ์สุดยอด (และไม่เคยเป็นนักพัฒนาเลย!) เพียงแค่เรื่องของการเลือกที่ +)
Shal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.