JSON से प्रोटोबॉफ़ तक जाएं। यह इसके लायक है?


23

हमारे पास अन्य वेबसर्विस हैं जो XML या JSON (WCF) की सेवा कर सकते हैं। मैं Protobufs लागू करने के विचार के साथ कर रहा हूँ। क्यूं कर?

पेशेवरों

  1. सर्वर पर कम लोड।
  2. छोटे संदेश का आकार - कम ट्रैफ़िक।
  3. बाद की तुलना में अब स्विच करना आसान है।

कान्स

  1. लागू करने की आवश्यकता है
  2. डिबगिंग के लिए संदेशों का समस्या निवारण / सूँघना कठिन हो जाता है।
  3. मैं सर्वर पर GZip को सक्षम कर सकता हूं और JSON अधिक ट्रैफ़िक का उपभोग करेगा

इस पर आपका क्या सुझाव और / या अनुभव है?


1
मैंने विकिपीडिया पृष्ठ को देखा, और वास्तव में कुंजी-मूल्य जोड़ी प्रति अधिक वर्ण था, इसलिए इसमें छोटे संदेश क्यों हैं?
रामजी कहिल

क्रमबद्धता के कारण। बाइनरी डेटा बाइनरी के रूप में आता है (उदाहरण के लिए बाइट एरे)। इसके अलावा, यह एक संदेश में संपत्ति के नाम नहीं ले जाता है। वे संपत्ति अध्यादेशों द्वारा जाते हैं। Developers.google.com/protocol-buffers/docs/encoding#structure
katit

10
तकनीकी रूप से आपने अपने प्रश्न का उत्तर दिया, JSON को संपीड़ित करें और इसके साथ किया जाए। सबसे महत्वपूर्ण बात यह है कि आपने इस गतिविधि पर पैसा और समय खर्च करने के लिए वास्तविक व्यवसाय के मामले का उल्लेख नहीं किया है ।

जवाबों:


39

क्या उन्हें लागू करने का व्यावसायिक मूल्य लागत से अधिक है?

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

तो क्या मूल्य इससे अधिक है? क्या आप "हमारी बैंडविड्थ लागत हमारे राजस्व का X% हैं और हम उस का समर्थन नहीं कर सकते" के विकल्प के साथ सामना कर रहे हैं? या यहां तक ​​कि "हमें JSON का समर्थन करने के लिए सर्वर को जोड़ने के लिए $ 20,000 खर्च करने की आवश्यकता है"?

जब तक आपको एक दबाने वाली व्यावसायिक आवश्यकता नहीं होती है, तब तक आपके "पेशेवरों" पर वास्तव में कोई मुकदमा नहीं होता है, बस समय से पहले अनुकूलन।


23

मैं एपिस और किसी को इससे पहले कि मैं protobuf जोड़ा (क्योंकि यह "तेज" था) बनाए रखें। छोटे पेलोड की वजह से तेजी से केवल एक ही चीज आरटीटी होती है, और इसे जज़पसन JSON के साथ तय किया जा सकता है।

जो हिस्सा मेरे लिए अरुचिकर है, वह प्रोटोबुफ़ (JSON की तुलना में) बनाए रखने के लिए सापेक्ष कार्य है। मैं जावा का उपयोग करता हूं इसलिए हम JSON के लिए जैक्सन ऑब्जेक्ट मैपिंग का उपयोग करते हैं। प्रतिक्रिया में जोड़ने का मतलब है कि POJO में फ़ील्ड जोड़ना। लेकिन प्रोटोबुफ़ के लिए मुझे .proto फ़ाइल को संशोधित करना होगा, फिर क्रमांकन और डीरिएलाइज़ेशन तर्क को अपडेट करना होगा जो डेटा को प्रोटोकॉल बफ़र्स में और पीओजेओ में / बाहर ले जाता है। यह एक से अधिक बार हुआ है कि एक रिलीज हुआ है जहां किसी ने एक फ़ील्ड जोड़ा और प्रोटोकॉल बफ़र्स के लिए या तो क्रमांकन या डीरिएलाइज़ेशन कोड डालना भूल गया।

अब जब क्लाइंट ने प्रोटोकॉल बफ़र्स के विरुद्ध कार्य किया है, तो इससे दूर होना लगभग असंभव है।

आप शायद यह अनुमान लगा सकते हैं, मेरी सलाह यह नहीं है।


5
यदि आप POJOs से डेटा को अंदर / बाहर स्थानांतरित करने के लिए क्रमांकन कोड लिख रहे हैं, तो आप इसे गलत कर रहे हैं। सीधे प्रोटोबॉफ़-जनरेट किए गए वर्गों का उपयोग करें।
मार्सेलो कैंटोस

मुझे लगता है कि उस स्थिति में मैं POJOs से बाहर जा रहा था क्योंकि कोडबेस ने JSON, XML और Protobuf दोनों के अनुरोधों / प्रतिक्रियाओं का समर्थन किया था, और यह दिया कि मैं जैक्सन और / या JAXB एनोटेशन को प्रोटोबॉफ़ उत्पन्न कक्षाओं में नहीं जोड़ सकता, और मैं चाहता हूँ पूरे कोड में एक ही मॉडल ऑब्जेक्ट का उपयोग करने के लिए, मुझे नहीं पता कि मेरे पास केवल उत्पन्न कक्षाओं का उपयोग करने के लिए विकल्प हैं। मैं देख सकता हूं कि यह कैसे संभव होगा यदि मैं लिख रहा था जीआरपीसी सेवाएं जो केवल प्रोटोबॉफ़ की बात करती हैं।
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.