प्रोटोबॉफ बनाम जीआरपीसी


101

मैं प्रोटोबुफ़ और जीआरपीसी को समझने की कोशिश करता हूं और मैं दोनों का उपयोग कैसे कर सकता हूं। क्या आप मुझे निम्नलिखित समझने में मदद कर सकते हैं:

  • OSI मॉडल को ध्यान में रखते हुए, क्या है, उदाहरण के लिए, लेयर 4 में प्रोटोबॉफ़ है?
  • एक संदेश हस्तांतरण के माध्यम से सोचकर कि "प्रवाह" कैसा है, जीआरपीसी क्या करता है जो प्रोटोबोफ़ याद करता है?
  • यदि प्रेषक प्रोटोबुफ़ का उपयोग करता है तो सर्वर जीआरपीसी का उपयोग कर सकता है या जीआरपीसी कुछ ऐसा जोड़ देता है जो केवल एक जीआरपीसी ग्राहक ही वितरित कर सकता है?
  • यदि जीआरपीसी समकालिक और अतुल्यकालिक संचार को संभव बना सकता है, तो प्रोटोबॉफ़ सिर्फ मार्शलिंग के लिए है और इसलिए राज्य के साथ इसका कोई लेना-देना नहीं है - सच या गलत?
  • क्या मैं REST या GraphQL के बजाय संचार करने वाले फ्रंटएंड एप्लिकेशन में gRPC का उपयोग कर सकता हूं?

मुझे पहले से ही पता है - या मान लें कि मैं -

Protobuf

  • डेटा इंटरचेंज के लिए बाइनरी प्रोटोकॉल
  • Google द्वारा डिज़ाइन किया गया
  • क्लाइंट और सर्वर पर विवरण की तरह "संरचना" उत्पन्न का उपयोग करता है - / - मार्शल संदेश

gRPC

  • प्रोटोबुफ़ (v3) का उपयोग करता है
  • फिर से गूगल से
  • आरपीसी कॉल के लिए रूपरेखा
  • HTTP / 2 का भी उपयोग करता है
  • तुल्यकालिक और अतुल्यकालिक संचार संभव

मैं फिर से किसी को पहले से ही प्रौद्योगिकी का उपयोग करने के लिए एक आसान सवाल मान लेता हूं। मैं अब भी धन्यवाद दूंगा कि आप मेरे साथ धैर्य रखें और मेरी मदद करें। मैं प्रौद्योगिकियों के किसी भी नेटवर्क के गहन गोता लगाने के लिए भी वास्तव में आभारी रहूंगा।

जवाबों:


85

प्रोटोकॉल बफ़र्स (हैं?) एक इंटरफ़ेस परिभाषा भाषा और क्रमांकन पुस्तकालय:

  • आप इसकी आईडीएल में अपनी डेटा संरचनाओं को परिभाषित करते हैं अर्थात उन डेटा ऑब्जेक्ट्स का वर्णन करते हैं जो आप उपयोग करना चाहते हैं
  • यह आपके डेटा ऑब्जेक्ट को बाइनरी से और बाइनरी से अनुवाद करने के लिए प्रदान करता है, जैसे डिस्क से डेटा लिखने / पढ़ने के लिए

gRPC समान IDL का उपयोग करता है, लेकिन वाक्यविन्यास "rpc" जोड़ता है, जो आपको Protobuf डेटा संरचनाओं का उपयोग डेटा प्रकारों के रूप में दूरस्थ प्रक्रिया कॉल विधि हस्ताक्षरों को परिभाषित करने देता है:

  • आप अपनी डेटा संरचनाओं को परिभाषित करते हैं
  • आप अपनी आरपीसी विधि परिभाषाएँ जोड़ें
  • यह एक नेटवर्क पर विधि हस्ताक्षरों की सेवा और कॉल करने के लिए कोड प्रदान करता है
  • यदि आप की जरूरत है तो आप अभी भी मैन्युअल रूप से प्रोटोबॉफ़ के साथ डेटा ऑब्जेक्ट को क्रमबद्ध कर सकते हैं

सवालों के जवाब में:

  1. gRPC लेयर 5, 6 और 7 पर काम करता है। Protobuf लेयर 6 पर काम करता है।
  2. जब आप "मैसेज ट्रांसफर" कहते हैं, तो प्रोटोबॉफ़ का खुद के ट्रांसफर से कोई सरोकार नहीं है। यह केवल किसी भी डेटा ट्रांसफर के अंत में काम करता है, बाइट्स को ऑब्जेक्ट में बदल देता है
  3. डिफ़ॉल्ट रूप से gRPC का उपयोग करने का मतलब है कि आप Protobuf का उपयोग कर रहे हैं । आप अपने खुद के क्लाइंट को लिख सकते हैं जो प्रोट्रूफ़ का उपयोग करता है लेकिन जीआरपीसी के साथ इंटरप्रेट करने के लिए जीआरपीसी का उपयोग नहीं करता है, या जीआरपीसी के लिए अन्य धारावाहिकों को प्लग इन करता है - लेकिन जीआरपीसी का उपयोग करना आसान होगा
  4. सच
  5. हाँ तुम कर सकते हो

क्या आप मुझे बता सकते हैं कि आप किस "लेयर्स" के बारे में बात कर रहे हैं? कृपया मुझे इस अवधारणा को विस्तार से समझने के लिए लिंक दें। धन्यवाद।
मिल्ली हडसन

इसका OSI मॉडल - प्रश्न में एक लिंक जोड़ा गया है। इसकी डिबेटेबल है कि क्या gRPC परतों 5 और 6 से संबंधित है क्योंकि यह एक लेयर 7 प्रोटोकॉल ( HTTP/2) का उपयोग करता है , लेकिन यह निश्चित रूप से उन परतों के काम करता है।
पीटर विसारट

67

दरअसल, gRPC और Protobuf 2 पूरी तरह से अलग चीजें हैं। मुझे सरल बनाने दें:

  • gRPC एक क्लाइंट और सर्वर को इंटरैक्ट कर सकती है (एक वेब क्लाइंट / सर्वर जैसे REST API के साथ)
  • प्रोटोबॉफ़ सिर्फ एक क्रमांकन / डीसेरिएलाइज़ेशन उपकरण है (सिर्फ JSON की तरह)

gRPC में 2 पक्ष हैं: एक सर्वर साइड, और एक क्लाइंट साइड, जो एक सर्वर डायल करने में सक्षम है। सर्वर RPC को उजागर करता है (यानी ऐसे कार्य जिन्हें आप दूरस्थ रूप से कॉल कर सकते हैं)। और आपके पास बहुत सारे विकल्प हैं: आप संचार (टीएलएस का उपयोग करके) को सुरक्षित कर सकते हैं, प्रमाणीकरण परत (इंटरसेप्टर्स का उपयोग करके), जोड़ सकते हैं ...

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

कहा जा रहा है, आप एक अच्छे क्लाइंट / सर्वर sytem के निर्माण के लिए दोनों को जोड़ सकते हैं: gRPC आपका क्लाइंट / सर्वर कोड होगा, और आपके डेटा प्रोटोकॉल को संरक्षित करेगा।

पुनश्च: मैंने इस पत्र को यह दिखाने के लिए लिखा है कि कैसे एक ग्राहक / सर्वर को जीआरपीसी और प्रोटोबुफ़ के साथ गो, स्टेप बाय स्टेप बना सकते हैं।


3
धन्यवाद, यह मुझे एक नमूना लागू करने में मदद करता है।
19

7

grpc google द्वारा निर्मित एक फ्रेमवर्क है और इसका उपयोग google से ही प्रोडक्शन प्रोजेक्ट्स में किया जाता है और #HyperledgerFabric को grpc के साथ बनाया गया है। grpc के साथ निर्मित कई ओपन सोर्स एप्लिकेशन हैं

protobuff की तरह एक डेटा प्रतिनिधित्व है json इस वे है प्रोटो फ़ाइल के कुछ हजारों उनके उत्पादन परियोजनाओं में उत्पन्न कर रहे हैं वास्तव में गूगल द्वारा भी है

grpc

  • gRPC गूगल द्वारा विकसित एक ओपन-सोर्स फ्रेमवर्क है
  • यह हमें RPC के लिए अनुरोध और प्रतिक्रिया बनाने और ढांचे द्वारा आराम करने की अनुमति देता है
  • REST CRUD उन्मुख है लेकिन grpc एपीआई उन्मुख है (कोई बाधा नहीं)
  • HTTP / 2 के ऊपर बनाएँ
  • >>>>> प्रामाणिक, भारोत्तोलन, निगरानी, ​​लॉगिंग प्रदान करता है
  • [HTTP / 2]
    • HTTP1.1 बहुत पहले 1997 में जारी किया गया था
    • HTTP1 प्रत्येक अनुरोध पर एक सर्वर के लिए एक नया टीसीपी कनेक्शन खोलता है
    • यह हेडर को संपीड़ित नहीं करता है
    • कोई सर्वर पुश, यह सिर्फ रेक, रेस के साथ काम करता है
    • HTTP2 2015 में जारी किया गया (SPDY)
    • मल्टीप्लेक्सिंग का समर्थन करता है
    • क्लाइंट और सर्वर समान टीसीपी कनेक्शन पर समानांतर में संदेशों को आगे बढ़ा सकते हैं
    • काफी विलंबता को कम करता है
    • HTTP2 हेडर संपीड़न का समर्थन करता है
    • HTTP2 बाइनरी है
      • प्रोटो बफ बाइनरी है, इसलिए यह HTTP2 के लिए एक शानदार मैच है
  • [प्रकार]
    • एकल
    • ग्राहक स्ट्रीमिंग
    • सर्वर स्ट्रीमिंग
    • द्वि दिशात्मक स्ट्रीमिंग
    • grpc सर्वर डिफ़ॉल्ट रूप से Async हैं
    • grpc क्लाइंट सिंक या Async हो सकते हैं

protobuff

  • प्रोटोकॉल बफ़र्स भाषा अज्ञेय हैं
  • पार्सिंग प्रोटोकॉल बफ़र्स (बाइनरी प्रारूप) सीपीयू गहन कम है
  • [नामकरण]
    • संदेश नामों के लिए ऊंट मामले का उपयोग करें
    • खेतों के लिए underscore_seperated
    • मूल्य नाम के लिए Enums और CAPITAL_WITH_UNDERSCORE के लिए ऊंट का उपयोग करें
  • [टिप्पणियाँ]
    • सहयोग //
    • सहयोग /* */
  • [लाभ]
    • डेटा पूरी तरह से टाइप किया गया है
    • डेटा पूरी तरह से संपीड़ित है (कम बैंडविड्थ उपयोग)
    • कोड उत्पन्न करने और कोड को पढ़ने के लिए स्कीमा (संदेश) की आवश्यकता होती है
    • दस्तावेज़ को स्कीमा में एम्बेड किया जा सकता है
    • डेटा को किसी भी भाषा में पढ़ा जा सकता है
    • स्कीमा किसी भी समय सुरक्षित तरीके से विकसित हो सकती है
    • XML से तेज है
    • कोड स्वचालित रूप से आपके लिए उत्पन्न होता है
    • Google ने प्रोटो बफ़ का आविष्कार किया, वे 48000 प्रोटोबॉफ़ संदेशों और 12000.प्रोटो फ़ाइलों का उपयोग करते हैं
    • RPC ढांचे के बहुत सारे, जिसमें grpc सहित डेटा का आदान-प्रदान करने के लिए प्रोटोकॉल बफ़र्स का उपयोग किया जाता है

3
संपीड़न CPU उपयोग को कम नहीं करता है। आप संपीड़ित करने के लिए है और इसे भेजने या serialization- जो सीपीयू जलता में डेटा का उपयोग करने को संपीड़ित कर कि .. क्या संपीड़न आप पदचिह्न धारावाहिक के लिए किया जाता है को कम करने, संभावित स्मृति दबाव, डिस्क उपयोग को कम करने अगर डिस्क पर क्रमानुसार करने के लिए इस्तेमाल किया, या अधिक करता है तार संकेतन।
Svartalf

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