हाल ही में एक प्रोजेक्ट अपडेट मीटिंग के दौरान, मेरी टीम ने इस बारे में बात की कि हम इस एप्लिकेशन से डेटा को आगे और पीछे भेजने के लिए क्रमांकन का उपयोग कैसे करने जा रहे हैं।
एक इंजीनियर जो सॉफ्टवेयर परियोजनाओं में और अधिक काम करना चाह रहा था, उसने मुझे बताया कि वे इस शब्द से अपरिचित थे।
इस तरह की आवश्यक प्रक्रियाओं को याद करना आसान है जो तब तक सामने नहीं आती जब तक आप अधिक व्यापक परियोजनाओं में डुबकी नहीं लगाते। इस व्यक्ति का भी यही हाल था, जैसा कि एक समय मेरे लिए था।
इसलिए मैं इसके बारे में लिखना चाहता था। मैंने उस दिन अपने सहयोगी को क्रमांकन के बारे में जानने में मदद की, और आप आज इसके बारे में जानने वाले हैं।
सीरियलाइजेशन क्या है?
सीरियलाइजेशन वह प्रक्रिया है जिसमें एक सेवा डेटा संरचना लेती है, जैसे कि पायथन में एक शब्दकोश, इसे लपेटता है, और इसे पढ़ने के लिए दूसरी सेवा में पहुंचाता है। यही सरल परिभाषा है।
कल्पना कीजिए कि मुझे किसी को संदेश भेजने की आवश्यकता है। इसलिए मैं पहले से इकट्ठी पहेली पर पाठ लिखता हूं। मैं टुकड़ों को अलग करता हूं, पहेली को फिर से इकट्ठा करने के बारे में कुछ निर्देश जोड़ता हूं, और इसे साथ भेजता हूं।
संदेश प्राप्तकर्ता तब पहेली के टुकड़े प्राप्त करता है, उन सभी को वापस एक साथ रखता है, और अब उनके पास मेरा संदेश है।
तकनीकी परिभाषा थोड़ी अधिक मजेदार है। बुद्धि के लिए, क्रमांकन डेटा ऑब्जेक्ट को बाइट स्ट्रीम में परिवर्तित करने की प्रक्रिया है, और ऑब्जेक्ट की स्थिति को डिस्क पर संग्रहीत करने या नेटवर्क पर प्रसारित करने के लिए सहेजना है। यह आवश्यक भंडारण आकार में कटौती करता है और नेटवर्क पर जानकारी स्थानांतरित करना आसान बनाता है।
मार्शलिंग और क्रमांकन - क्या अंतर हैं?
मार्शलिंग की प्रक्रिया दिमाग में आ सकती है। मार्शलिंग किसी वस्तु के स्मृति प्रतिनिधित्व को संचरण के लिए उपयुक्त रूप में बदलने की प्रक्रिया है।
हालांकि मार्शलिंग और क्रमांकन ढीले हैं पर्यायवाची, एक महत्वपूर्ण अंतर है। उदाहरण के लिए, गोलंग डेटा संरचना में JSON डेटा को पढ़ने के लिए गोलांग प्रोग्राम बनाते समय, आप JSON कुंजी मानों को गोलांग कुंजी मानों में अनुवाद करने के लिए मार्शलिंग का उपयोग कर सकते हैं।
अंतर यह है कि डेटा का अनुवाद करने के लिए मार्शलिंग का उपयोग किया जा सकता है। इसके विपरीत, क्रमांकन एक बाइट स्ट्रीम में डेटा भेजता या संग्रहीत करता है और इसे अपने मूल रूप में फिर से इकट्ठा करता है। दोनों क्रमांकन करते हैं, लेकिन इन दो प्रक्रियाओं में इरादे में अंतर है।
कार्रवाई में मार्शलिंग के उदाहरण के रूप में आप नीचे ट्विटर डेटा के साथ बातचीत करने के लिए बनाई गई इस संरचना को देख सकते हैं। गोलंग में, आप गोलंग की अंतर्निर्मित मार्शलिंग सेवा का उपयोग करके आसानी से इस ऑब्जेक्ट को JSON डेटा में परिवर्तित करके टैग नामक संकेत दे सकते हैं।
एंडियननेस क्या है?
मैं अंतहीनता के विषय पर भी हल्के से स्पर्श करना चाहूंगा। एंडियननेस एक शब्द है जिसका उपयोग मेमोरी में बाइट्स के क्रम का वर्णन करने के लिए किया जाता है।
आप मेमोरी को एक ब्लॉक के रूप में सोच सकते हैं जहां डेटा के काटने को संग्रहीत किया जाता है। काम करने के लिए क्रमांकन के लिए, बाइट स्ट्रीम को एक सिस्टम से दूसरे सिस्टम में बदलती अंतहीनता की परवाह किए बिना डेटा प्रकारों को स्थानांतरित करने की आवश्यकता होती है।
आप नीचे छोटे और बड़े-एंडियन अंतर देख सकते हैं। यह आवश्यक है कि एंडियननेस एक सिस्टम से दूसरे सिस्टम में मेल खाता हो या किसी तरह परिवर्तित हो, क्योंकि सभी सिस्टम अपने बिट्स को एक ही तरह से ऑर्डर नहीं करते हैं।
सीरियलाइज़ेशन के लिए केस का उपयोग करें
हमारा उपयोग मामला इन सुविधाओं का पूरा फायदा उठाता है। हम अपने द्वारा स्कैन किए जा रहे हार्डवेयर से कुछ जानकारी लेने की योजना बनाते हैं, उस जानकारी को एक बाइट स्ट्रीम में पैकेज करते हैं, और इसे नेटवर्क के साथ किसी अन्य सेवा को भेजते हैं जो डेटा का पुनर्निर्माण करेगी।
क्रमांकन प्रक्रिया को उलटने और डेटा को उसके मूल रूप में वापस लाने की प्रक्रिया को deserialization कहा जाता है ।
इसके लिए अन्य उपयोग के मामले हैं। उदाहरण के लिए, REST API या मैसेजिंग प्रोटोकॉल जैसे AMQP डेटा को संपीड़ित और भेजने के लिए क्रमांकन का उपयोग कर सकते हैं।
एएमक्यूपी एक मैसेजिंग प्रोटोकॉल है जहां आप एएमक्यूपी ब्रोकर को संदेश भेजते हैं, और प्राप्त करने वाली सेवा इस ब्रोकर को संदेश के लिए "सुन" रही है। बैकएंड इंजीनियर इसे अच्छी तरह से जान सकते हैं, क्योंकि इसका उपयोग अक्सर वितरित सिस्टम के भीतर डेटा को आगे और पीछे भेजने के लिए किया जाता है।
कई प्रोग्रामिंग भाषाओं में कुछ क्रमांकन को आसानी से स्पिन करने की क्षमता शामिल है। तो यह एक भाषा-अज्ञेय विषय है।
सीरियलाइज़ेशन उदाहरण
आइए एक त्वरित उदाहरण दें। यह कोड AMQP के माध्यम से संदेश भेजने के लिए लाइब्रेरी कोम्बू का उपयोग करता है। हम इसका उपयोग नेटवर्क पर एक सॉफ्टवेयर पैकेज से दूसरे में संदेश भेजने के लिए कर रहे हैं। यह कोड AMQP ब्रोकर को संदेश भेजने वाली सेवा के लिए है:
def send_message(self, payload, sender_serializer):
...
try:
producer.publish(
{'payload': message},
...
serializer = 'json',
...
)
return
publish
पर ध्यान दें तरीका। हम क्रमबद्धता विधि में तर्क के रूप में गुजर रहे हैं ताकि पुस्तकालय जानता हो कि हम जिस डेटा को पास कर रहे हैं उसे क्रमबद्ध कैसे करें।
डेटा संदेश बाइट्स की एक धारा में परिवर्तित हो जाता है, जिसे यदि आप इसे देखते हैं, तो अक्षरों और संख्याओं की एक लंबी स्ट्रिंग की तरह दिखता है, और हम संदेश भेजते हैं।
संबंधित सेवा डेटा को उसकी मूल स्थिति में फिर से संगठित करने के लिए उसी क्रमांकन पद्धति का उपयोग करेगी। यह एक महत्वपूर्ण विशेषता है क्योंकि हम ऐसे टूल का एक सूट बना रहे हैं जो एक दूसरे को काम करने के लिए संदेश भेजने में सक्षम होना चाहिए।
सीरियलाइज़ेशन डेटा फ़ॉर्मेट
जब भी हाथ में कार्य इसके लिए कॉल करता है तो मैं क्रमबद्धता के लिए JSON का उपयोग करता हूं। हालाँकि, आप कुछ अन्य का भी उपयोग कर सकते हैं।
JSON में बहुत अधिक ओवरहेड है, लेकिन मानव पठनीयता इसे मेरे लिए आदर्श बनाती है। आप प्रोटोबफ्स, वाईएएमएल, या एक्सएमएल का भी उपयोग कर सकते हैं। वे केवल कुछ डेटा ऑब्जेक्ट प्रारूप हैं जिनका आप उपयोग कर सकते हैं।
निष्कर्ष
मुझे खुशी है कि मैंने इसे अपने सिस्टम से बाहर कर दिया। मुझे इस बारे में सोचना बंद करना पड़ा, और उम्मीद है कि किसी ने इससे कुछ सीखा होगा।
जब आप अपनी संचार पाइपलाइन को एक साथ रख रहे हों तो क्रमांकन आवश्यक हो जाता है। उचित पृष्ठभूमि ज्ञान के साथ आप जिस भी टूल का उपयोग कर रहे हैं, उसके पास आत्मविश्वास महसूस करने के लिए इस विषय के बारे में जानना अच्छा है।
-जॉर्ज