क्या XMPP में IoT उपकरणों के लिए एक बड़ा ओवरहेड है, जो छोटे, लगातार संदेश भेज रहा है?


10

मैं IoT उपकरणों के लिए संभावित संचार प्रोटोकॉल के रूप में XMPP के बारे में पढ़ रहा हूं, लेकिन, एक स्रोत को पढ़ने के बाद, मैं अनिश्चित हूं कि क्या यह वास्तव में एक उपयुक्त प्रोटोकॉल है यदि आप प्रत्येक संदेश के लिए ओवरहेड के बारे में चिंतित हैं।

यह स्रोत बताता है:

हालाँकि, XMPP में कई समस्याएं हैं जो इसे EMBEDDED IOT PROTOCOLS के लिए कुछ हद तक अवांछनीय बनाती हैं। एक्सएमएल-आधारित प्रोटोकॉल के रूप में, एक्सएमपीपी बहुत ही वर्बोज़ है, यहां तक ​​कि एचटीटीपी से भी अधिक, और भारी डेटा ओवरहेड है। IOT CONNECTED DEVICE से सर्वर पर डेटा का एक बाइट भेजने के लिए एक एकल अनुरोध / प्रतिक्रिया विनिमय 0.5B से अधिक है।

एक मसौदा विनिर्देश है जो एक XML एन्कोडिंग का उपयोग करके XMPP को संपीड़ित करेगा जिसे कुशल XML इंटरचेंज (EXI) कहा जाता है। लेकिन EXI के साथ भी, डेटा का एक ही बाइट XMPP अकेले प्रोटोकॉल ओवरहेड के सैकड़ों बाइट्स प्राप्त करता है। EXI अब उपलब्ध अन्य विकल्पों की तुलना में प्रक्रिया करने के लिए बहुत कठिन प्रारूप है। इन अंतर्निहित समस्याओं के कारण, आमतौर पर एम्बेडेड IoT अनुप्रयोगों में XMPP का उपयोग करने से बचने की सिफारिश की जाती है।

हालाँकि, XMPP स्वयं को IoT अनुप्रयोगों के लिए उपयुक्त के रूप में बढ़ावा देता है (हालाँकि यह विशेष रूप से यह नहीं कहता है कि यह कम-ओवरहेड है), इसलिए यह अजीब लगता है कि IoT उपकरणों के लिए इतने बड़े, प्रतीत होने वाले वर्बोज़ प्रोटोकॉल की सिफारिश / प्रचार किया जाएगा।

क्या XMPP का ओवरहेड वास्तव में उतना ही बड़ा है जितना स्रोत छोटी मात्रा में डेटा के लिए सुझाता है? उदाहरण के लिए, 8-बाइट संदेश भेजने पर कितना ओवरहेड होगा?

इसके अलावा, अगर EXI संपीड़न का उपयोग किया जाता है तो ओवरहेड इतना बढ़िया है (जैसा कि स्रोत में बताया गया है)? क्या यह भी कुछ नुकसान के साथ आएगा?


4
दिलचस्प सवाल। जबकि मैं एक्सएमपीपी से अपरिचित हूं, यह ध्यान रखना महत्वपूर्ण है कि ईएक्सआई को एक स्कीमा के लिए दोनों अंत बिंदुओं की आवश्यकता होती है जिसे सिंक्रनाइज़ करना पड़ता है। इसके अलावा IoT डिवाइस को उस xml को en- / decode करना पड़ता है जो 8-बाइट संदेश भेजने के लिए अपने आप में भयानक रूप से जटिल लगता है।
Helmar

1
@ हेलमर वास्तव में, एक्सएमपीपी के साथ ऐसा लगता है कि आप पैकेट के आकार में क्या हासिल करते हैं, आप कम्प्यूटेशनल जटिलता में खो जाते हैं।
Aurora0001

1
मुझे लगता है कि यह सवाल आम तौर पर ठीक है लेकिन: "उदाहरण के लिए, हर मिनट में 8-बाइट संदेश भेजते समय कितना ओवरहेड होगा?" -> "दो मिनट" मूर्त है और प्रमुख चीजों से भटक जाता है। आप वास्तव में क्या पूछ रहे हैं कि एक 8 बाइट संदेश कितना ओवरहेड होगा (मुझे लगता है, अगर यह डेटा का सिर्फ एक टुकड़ा है, 1 बाइट संदेश के समान)। एक समय घटक के संबंध में यह केवल बैंडविड्थ पर निर्भर है और किसी के लिए एक नेटवर्क प्रोटोकॉल के उपयोग पर विचार करना है जो मृत सरल गणित होना चाहिए।
गोल्डीलॉक्स

1
@delicateLatticeworkFever मैं अगर आप इसे प्रासंगिक है नहीं लगता कि यह बाहर संपादित करेंगे (मैं पूरी तरह से आश्वस्त नहीं था, लेकिन मैं और अधिक सोचा विस्तार कम से बेहतर है)
Aurora0001

2
यह एक सुझाव है, हाँ। बस पढ़ने कि मैं चला गया, "यह निर्भर नहीं करता है कि बाइट्स का निर्धारण करने के लिए पूरी तरह से अनिर्दिष्ट उपकरण लेने में कितना समय लगता है?" जैसे, यदि उत्तर यह है कि संदेश ~ 0.5 kB है, तो इकाइयों में समय का कोई तत्व नहीं है;) यह अनिर्दिष्ट उपकरण की बैंडविड्थ में है।
गोल्डीलॉक्स

जवाबों:


8

हालांकि यह कहना उचित है कि XML वर्बोज़ है, जिसे इस जागरूकता के साथ सम्‍मिलित होना चाहिए कि यह क्रियाशीलता सामग्री के संबंध में "ओवरहेड" नहीं है क्‍योंकि यह शब्दार्थ को सम्‍मिलित करता है; यह ओवरहेड है जो किसी भी प्रोटोकॉल का रोगसूचक है जो स्थिर संरचना के विपरीत एक गतिशील पर जोर देता है। उदाहरण के लिए, HTML वास्तव में XML का एक सुकून भरा रूप है जो एक गतिशील संरचना, संरचना के साथ सामग्री को व्यक्त करता है जिसे सामग्री का एक पहलू माना जा सकता है। आप तालिका से एक तालिका की सामग्री को अलग कर सकते हैं, लेकिन यह तथ्य कि सामग्री विशिष्ट संबंधों के साथ सारणीबद्ध डेटा है, सामग्री का अभिन्न अंग है; अगर मैंने प्रत्येक सेल लिया और यह सब एक लंबी स्ट्रिंग के रूप में प्रसारित किया, तो वह संरचना और वे संबंध समाप्त हो गए हैं, और इसलिए मैंने जानकारी खो दी है और क्या यह सामग्री नहीं है?

आइए एक 8 बाइट संदेश पर विचार करें जो कुछ टैबलर डेटा का गठन कर सकता है। यदि मैं एक बहुत ही स्थिर प्रोटोकॉल का उपयोग करता हूं, तो मैं न्यूनतम रूप से इस तरह के प्रोटोकॉल को परिभाषित करके कोई अतिरिक्त ओवरहेड के साथ संचारित कर सकता हूं:

  • प्रत्येक संदेश ठीक 8 बाइट्स है, इसलिए हमें लंबाई को इंगित करने या किसी भी समाप्ति अनुक्रम को शामिल करने की आवश्यकता नहीं है।
  • आठ बाइट्स हमेशा एक 2 x 2 ग्रिड को संदर्भित करने के लिए लिए जाते हैं जहां प्रत्येक सेल में 16-बिट मान होता है।

यदि मेरे सभी संदेश बिल्कुल उसी तरह हैं, तो XML, HTML या XMPP का उपयोग करना मूर्खतापूर्ण माना जा सकता है - मैं संरचनात्मक घटकों पर बैंडविड्थ को बर्बाद कर रहा हूं जो हमेशा समान और पूर्वनिर्धारित होते हैं, और इसे बनाने और पार्स करने वाले दोनों सिरों पर संगत गणना समय बर्बाद कर रहे हैं। एक न्यूनतम, उचित HTML पृष्ठ जिसमें प्रत्येक कक्ष में कुछ वर्णों के साथ सिर्फ एक 2 x 2 तालिका है, शायद स्वरूपण और प्रोटोकॉल ओवरहेड को समायोजित करने के लिए कम से कम 100 बाइट्स होने जा रहा है।

हालांकि, यदि मेरे सभी संदेश ठीक नहीं हैं, तो यह निर्दिष्ट करना कि यह किस प्रकार का संदेश है, "पेलोड" का शाब्दिक हिस्सा नहीं हो सकता है, लेकिन यह एक आवश्यक घटक है, सामग्री-वार। मैं बस एक अतिरिक्त दो बाइट्स के साथ ऐसा कर सकता हूं और बहुत अधिक गतिशीलता ला सकता हूं:

  • संदेश अब चर लंबाई, 0-255 बाइट्स हैं, और पहली बाइट लंबाई इंगित करता है।
  • विभिन्न पूर्वनिर्धारित संदेश प्रकारों के लिए (ऊपर) 256 कोड हैं, जिनमें से एक "2 x 2 तालिका" है, जो दूसरा बाइट है।

अब टेबल सामग्री के मेरे 8 बाइट्स को ओवरहेड के 2 बाइट्स की आवश्यकता होती है, लेकिन इस कस्टम प्रोटोकॉल के साथ किस प्रकार के संदेश भेजे जा सकते हैं, इसके संदर्भ में संभावनाओं की एक व्यापक रेंज है।

यह अभी भी एक HTML पृष्ठ या XML नाम स्थान विनिर्देश की संभावनाओं के करीब है (या इसके सेट, जो कि XMPP अनिवार्य रूप से है )।

तो, उसके आधार पर, यदि आप जो भी कर रहे हैं, वह सरल 8 बाइट संदेश भेज रहा है, तो XMPP शायद ओवरकिल है। हालांकि, जरूरी नहीं कि इतना ही। दावा है कि "एक एकल अनुरोध / प्रतिक्रिया एक्सचेंज एक आईओटी कनेक्टेड डिवाइस से डेटा को एक बाइट भेजने के लिए 0.5 kB से अधिक है" मुझे लगता है, प्रासंगिक RFC पर नज़र रखना , एक संभावित अतिशयोक्ति (लेकिन नायब, सभी) मैंने किया था कि मैं इसे देख रहा हूं, मैंने कभी भी एक्सएमपीपी को लागू नहीं किया है या उपयोग नहीं किया है)। मुझे संदेह नहीं है कि आप इस तरह के एक उदाहरण का निर्माण कर सकते हैं, लेकिन यह शायद एक न्यूनतम उदाहरण नहीं है ।

चूंकि प्रोटोकॉल टीसीपी ओरिएंटेड है, इसलिए "जैबर: क्लाइंट 'नेमस्पेस द्वारा योग्य एक्सएमएल स्ट्रीम स्थापित करना" केवल संदेश का हिस्सा माना जाना चाहिए, अगर हम एक बंद चीजें कर रहे हैं - डिवाइस एक सर्वर से 8 बाइट भेजने के लिए संपर्क करता है, भेजता है " डेटा, डिस्कनेक्ट करता है। यदि संबंध अधिक स्थायी है, जो अक्सर एक IoT संदर्भ में होता है, तो हम यह मान सकते हैं कि डिवाइस पहले से ही गंतव्य के लिए एक स्थापित कनेक्शन है। इस स्थिति में, यदि संदेश का अंतिम गंतव्य सर्वर है (किसी अन्य क्लाइंट के विपरीत सर्वर संदेश को पास करने जा रहा है), तो प्रोटोकॉल ओवरहेड संभवतः न्यूनतम है।

<message><body>8 bytes.</body></message>

"ओवरहेड" का एक औसत रूप से 33 बाइट्स। यहां यह इंगित करने योग्य है कि XML पाठ है, और इसलिए यदि आपके संदेश अक्सर द्विआधारी होते हैं, तो यह बहुत कम उपयुक्त होने जा रहा है, क्योंकि उस डेटा को इनकोड किया जाना चाहिए (जैसे, बेस 64 ), जो आगे उपरि और कम्प्यूटेशनल जोड़ता है आवश्यकताओं।

तो, अंततः:

क्या XMPP में IoT उपकरणों के लिए एक बड़ा ओवरहेड है, जो छोटे, लगातार संदेश भेज रहा है?

यदि कोई लगातार कनेक्शन है और संदेश काफी हद तक असंरचित हैं, तो मुझे नहीं लगता। हालांकि, अगर आपको इसकी आवश्यकता नहीं है कि यह क्या है (संरचना के संबंध में गतिशीलता), तो संभवतः अधिक उपयुक्त तरीके हैं।

इसके कारण, यदि हमारे पास एक संदर्भ है जहां एक एकल केंद्रीय सर्वर विभिन्न उपकरणों के बीच संदेशों को संसाधित और / या भरोसा कर रहा है, भले ही उन उपकरणों में से कोई एक जो हमेशा कर रहा है वह सरल और सीधा हो सकता है, एक प्रोटोकॉल जो एक एनकैप्सलेट कर सकता है संदेशों की विविधता अभी भी उपयोगी होगी। यदि किसी क्लाइंट डिवाइस में सीमित संसाधन हैं, तो हम बहुत सारे प्रोटोकॉल को हार्डकोड कर सकते हैं, और उस छोर से प्रत्येक संदेश को लपेटना एक बहुत ही सरल कार्य बन जाता है; मेरा मानना ​​है कि कई HTTP उपकरण जो HTTP सर्वर को तैनात करते हैं, वे करते हैं (जो "सरल क्लाइंट, जटिल सर्वर" का उलटा है)। वे सर्वर किसी भी प्रकार के HTTP रिक्वेस्ट को नहीं संभाल सकते हैं (पूर्वनिर्मित अस्वीकृति को छोड़कर) और उनके पास बहुत अच्छी तरह से परिभाषित, केंद्रित चीजें हैं जो वे करेंगे और प्रतिक्रियाएं जो वे भेजेंगे, लेकिन चूंकि वे HTTP सर्वर के रूप में सही ढंग से कार्य नहीं करते हैं,


3

सबसे पहले, मुझे यह कहना चाहिए कि एक्सएमएल का उपयोग रियलटाइम संदेशों को कुछ सफलता के साथ और बड़े पैमाने पर, विशेष रूप से आईएम को संप्रेषित करने और एक्सएमपीपी में उपस्थिति के लिए किया जाता है। वहाँ भी कुछ कंपनियों को लगता है कि इस डेटा प्रतिनिधित्व प्रणाली के लिए अभी तक एक और आवेदन क्षेत्र को खोजने की कोशिश करने के लिए अपने XML ज्ञान का लाभ उठाने पर आमादा हैं।

हालांकि, हर कोई यह आश्वस्त नहीं है कि एक्सएमएल मैसेजिंग सिस्टम की हर चीज का जवाब है। उदाहरण के लिए, हाल के वर्षों में ऑनलाइन सिस्टम में एक ध्यान देने योग्य बदलाव आया है जो JSON का उपयोग XML के बजाय डेटा को अनुक्रमित करने के तरीके के रूप में करता है, और अगर मैं अपने डेवलपर टोपी को एक पल के लिए डाल देता हूं तो मैं कहूंगा कि देशी से एन्कोड / डिकोड करने के लिए उपकरण प्रतिनिधित्व (उदाहरण के लिए पायथन, पीएचपी, जावास्क्रिप्ट) XML के लिए अपने समकक्षों की तुलना में JSON के लिए उपयोग करना बहुत आसान लगता है, भले ही XML के पास उन उत्तरों को सही करने के लिए अधिक समय हो।

XML कंप्यूटर को संभालने के लिए एक कठिन प्रतिनिधित्व है, क्योंकि इसके लिए अपेक्षाकृत जटिल पाठ पार्सर की आवश्यकता होती है, और फिर किसी प्रोग्राम में इसके डेटा को निकालने की अनुमति देने के लिए कुछ प्रकार के पदानुक्रमित प्रतिनिधित्व। क्योंकि इसमें बहुत अधिक पाठ शामिल है, आपको एन्कोडिंग / डिकोडिंग के लिए उपलब्ध थोड़ी मेमोरी की आवश्यकता है।

अक्सर यह स्पष्ट नहीं होता है कि XML डेटा के प्रतिनिधित्व के लिए बहुत अधिक मूल्य जोड़ रहा है: यदि कोर संदेश गहराई से पदानुक्रमिक नहीं है, तो बहुत अधिक पाठ अव्यवस्था जोड़ना अनावश्यक लगता है, लेकिन विरोधाभासी रूप से यदि बहुत अधिक पदानुक्रम है तो संदेश को डिकोड करना इसका पाठीय प्रतिनिधित्व कड़ी मेहनत करने वाला है और इसके लिए बहुत सारे संसाधनों की आवश्यकता है। इसके अलावा, पाठ में प्रतिनिधित्व करने का लाभ मेरे लिए स्पष्ट नहीं है: जब हम पहली बार लिखते हैं और संचार प्रणालियों को डीबग करते हैं, तो यह देखने के लिए कि क्या गलत हो रहा है, यह पता लगाने के लिए मॉनिटरिंग / डिकोडिंग टूल्स (उदाहरण के लिए विंडसर) का उपयोग करना आम है। लंबे समय में, सब कुछ ठीक काम कर रहा है, और किसी भी मानव को आगे और पीछे जाने वाले संदेशों (केवल कंप्यूटर) पर विस्तार से देखने की आवश्यकता नहीं होगी। कंप्यूटर बाइनरी प्रतिनिधित्व पसंद करते हैं। शाब्दिक प्रतिनिधित्व किसी भी चरण में तैनाती में शामिल नहीं है।

एक ही समय में कंप्यूटर के लिए कड़ी मेहनत करते हुए XML मनुष्य को पढ़ना (और मैन्युअल रूप से निर्माण करना) कठिन है; इसलिए यह एक ऐसी प्रणाली है जो न तो कंप्यूटर के लिए उपयुक्त है और न ही यह मनुष्यों के लिए उपयुक्त है।

महत्वपूर्ण रूप से, IoT में कुछ विशेष अड़चनें हैं जो कुशल होने के लिए वांछनीय बनाती हैं। IoT उपकरणों में आमतौर पर सीमित प्रसंस्करण शक्ति और भंडारण (आमतौर पर कोई बड़े पैमाने पर द्वितीयक भंडारण, केवल कुछ रैम और EEPROM) नहीं होगा। एक IoT डिवाइस में सबसे सरल संभव संचार लिंक हो सकते हैं, शायद एक टीसीपी / आईपी स्टैक भी नहीं। इसमें कई प्रकार के माइक्रोकंट्रोलर डिज़ाइन होंगे, न कि परिष्कार के स्तर पर जहां एक मानक ऑपरेटिंग सिस्टम (जैसे लिनक्स, एंड्रॉइड) उपयोग में होगा; यह ऑफ-द-शेल्फ उपकरण की संख्या को सीमित करता है जो उपयोग करने के लिए आसान XML इंटरफेस की पेशकश के आसपास झूठ होगा।

सारांश में, मुझे संदेह है कि IoT के साथ, डेटा का प्रतिनिधित्व केस-बाय-केस के आधार पर, हार्डवेयर की कमी, संचार की शैली (जैसे प्रसारण, डेटाग्राम, विश्वसनीय आदि), संचार की आवृत्ति और इतने पर छोड़ दिया जाता है। XML निश्चित रूप से IoT के लिए साइन क्वालिफिकेशन नॉन के रूप में नहीं सोचा जाना चाहिए ।


3
  1. कई साल पहले मैंने उपयोग करने के लिए अंतर का विश्लेषण किया था

    भुगतान लेनदेन के प्रतिनिधित्व के लिए भुगतान नेटवर्क में एक्सएमएल (कार्ड_नंबर, दिनांक, समय, टर्मिनल_ और अतिरिक्त तत्वों की सूची) पारंपरिक तुलना में

    बिट-मैपेड ISO8583

  2. एक्सएमएल में भारी ओवरहेड है। यदि आप 10000+ नोड्स वाले नेटवर्क में प्रभाव पर विचार करते हैं, तो उनमें से प्रत्येक केंद्रीय होस्ट को प्रति घंटा / प्रतिदिन 10+ संदेश भेजते हैं, फिर XML बाहर हो जाता है और आपको वास्तव में कुछ अधिक कुशल होने की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.