GRPC REST से कैसे भिन्न है?


98

मैं जीआरपीसी के इस स्पष्टीकरण को पढ़ रहा हूं और यह आरेख रुचि का है:

यहां छवि विवरण दर्ज करें

ट्रांसपोर्ट लेयर कैसे काम करता है? यदि यह नेटवर्क पर है ... तो इसे RPC क्यों कहा जाता है? इससे भी महत्वपूर्ण बात यह है कि यह REST से अलग कैसे है, जो सेवा-परत के लिए एपीआई लागू करता है (क्लाइंट में वर्ग जिसमें http अनुरोध करने के तरीके हैं)?


20
«यदि यह नेटवर्क पर है ... तो इसे RPC क्यों कहा जाता है» - क्योंकि RPC एक दूरस्थ प्रक्रिया कॉल है, और 'रिमोट' का मतलब पूरी तरह से 'दूसरे होस्ट पर' हो सकता है।
14

जवाबों:


104

TCP / IP के ऊपर HTTP / 2 का उपयोग करके ट्रांसपोर्ट लेयर काम करती है। यह कम विलंबता (तेज) कनेक्शन की अनुमति देता है जो क्लाइंट से सर्वर तक एकल कनेक्शन का लाभ ले सकता है (जो कनेक्शन का अधिक कुशल उपयोग करता है और परिणामस्वरूप सर्वर संसाधनों का अधिक कुशल उपयोग हो सकता है।

HTTP / 2 भी द्विदिश कनेक्टिविटी और अतुल्यकालिक कनेक्टिविटी का समर्थन करता है। इसलिए सर्वर को संदेश भेजने के लिए क्लाइंट के साथ कुशलता से संपर्क करना संभव है (async प्रतिक्रिया / सूचनाएं, आदि)।)

जबकि, REST और gRPC दोनों क्लाइंट / सर्वर स्टब्स (REST के लिए कुछ स्वैगर की तरह उपयोग करके) उत्पन्न कर सकते हैं, REST के पास प्राथमिक 'फ़ंक्शन' कॉल (या क्रिया) का एक सीमित सेट है:

+ ----------- + ---------------- +
| HTTP वर्ब | CRUD |
+ ----------- + ---------------- +
| GET | पढ़ें |
| PUT | अद्यतन / बदलें |
| PATCH | अद्यतन / संशोधित करें |
| DELETE | हटाओ |
+ ----------- + ---------------- +

जबकि जीआरपीसी आप किसी भी प्रकार के फंक्शन कॉल्स को समकालिक / एसिंक्रोनस, यूनी-दिशा / द्विदिश (स्ट्रीम), आदि को परिभाषित कर सकते हैं।

GRPC का उपयोग करके ग्राहक एक स्थानीय विधि से कॉल करता है। प्रोग्रामर के लिए, ऐसा लगता है कि आप एक स्थानीय कॉल कर रहे हैं, लेकिन अंतर्निहित परत (ऑटो-जनरेट क्लाइंट स्टब) कॉल को सर्वर पर भेजती है। सर्वर के लिए ऐसा लगता है कि इसकी विधि को स्थानीय स्तर पर कहा जाता है।

जीआरपीसी सभी अंतर्निहित पाइपलाइन की देखभाल करता है और प्रोग्रामिंग प्रतिमान को सरल करता है। हालाँकि, कुछ समर्पित REST शुद्धतावादियों के लिए, यह एक अति-जटिलता की तरह लग सकता है। YMMV


2
तो, त्वरित प्रश्न: आरईएसटी में, आप किसी भी प्रकार के फ़ंक्शन को कॉल कर सकते हैं। उदाहरण के लिए, रेल में, मैं एक अंतिम बिंदु के लिए एक जीईटी अनुरोध भेज सकता हूं जो गैर-रेस्टफुल है और केवल एक संसाधन प्राप्त करने के अलावा कुछ करें। मैं उस नॉन-रेस्टफुल एंडपॉइंट से वास्तव में किसी भी फ़ंक्शन को किक कर सकता हूं। मैं REST में सेवाएँ भी बना सकता हूँ जो एक स्थानीय पद्धति को कहते हैं, लेकिन वास्तव में हुड के तहत एक समापन बिंदु के लिए एक http कॉल कर रहा है। इसलिए अंतर यह नहीं है कि वे महान हैं ... कम से कम परिवहन परत पर। या क्या वे?
Jwan622

2
REST / RESTful HTTP पर चलता है, gRPC HTTP / 2 (एक WebSocket की तरह) पर चलता है। स्वैगर से एक कोड जनरेटर का उपयोग करना आरईएसटी के लिए क्लाइंट और सर्वर स्टब्स उत्पन्न करना संभव है, जीआरपीसी एक स्टैनो फ़ाइल का उपयोग करता है ताकि यह स्टब्स (पुराने डब्ल्यूएसडीएल / एसओएपी दृष्टिकोण के विपरीत) उत्पन्न न हो। प्रोटो फ़ाइल प्रकार को परिभाषित करती है, इसलिए उत्पन्न क्लाइंट / सर्वर स्टब्स सुरक्षित हैं। मोबाइल डिवाइस पर gRPC कनेक्शन कुशल है क्योंकि यह मोबाइल ऐप से किसी भी अन्य समवर्ती कनेक्शन के साथ उसी अंतर्निहित HTTP / 2 सॉकेट को साझा कर सकता है।
एममेकबे

: यहाँ gRPC के लिए एक अच्छा परिचय है medium.com/square-corner-blog/grpc-reaches-1-0-85728518393b यहाँ gRPC का एक डेमो है: github.com/mmcc007/go
mmccabe

1
Jwan622 और mmccabe: Superglue 2.1 लाइब्रेरी का उपयोग करके, मैं सेब और संतरे के साथ एक घर बना सकता हूं। कुछ बिंदु पर, हमें नौकरी के लिए सही उपकरण चुनना होगा और हमेशा अपने सॉफ़्टवेयर सिस्टम की जटिलता को कम करना होगा। याद रखें, कोड हटाना हमेशा एक प्रदर्शन अनुकूलन है;)
मार्टिन एंडरसन

4
मेरे दृष्टिकोण से, पुराने प्रोटोकॉल जैसे सामान पुराने प्रोटोकॉल पर सवारी करने के लिए हमेशा "हैक" रहे हैं। अगर कुछ ऐसा होता है, जो मुझे आधुनिक भाषाओं के लिए अधिक उपयुक्त स्टैक का उपयोग करने देता है और फिर भी अज्ञेय होना चाहिए कि किस भाषा का विशेष रूप से क्लाइंट द्वारा उपयोग किया जा रहा है और नाटकीय रूप से प्रदर्शन बढ़ाता है, तो मैं बैंडवागन पर कूदने वाला पहला व्यक्ति बनने जा रहा हूं!
मार्टिन एंडरसन

42

REST को JSON या HTTP / 1.1 की आवश्यकता नहीं है

आप HTTP / 2 के ऊपर प्रोटेस्ट संदेश (या जो भी) भेजता है, एक तुच्छ सेवा का निर्माण कर सकते हैं

आप RESTful सेवाओं का निर्माण कर सकते हैं जो JSON को HTTP / 2 पर भेजती हैं

आप RESTful सेवाओं का निर्माण कर सकते हैं जो HTTP / 1.1 पर प्रोटोबॉफ़ संदेश भेजती हैं

Restful सेवाएं HTTP / xx के शीर्ष पर "हैक" नहीं हैं, वे मूलभूत आर्किटेक्चर प्रिंसिपलों का अनुसरण करने वाली सेवाएं हैं जिन्होंने HTTP के किसी भी संस्करण को सफल बनाया है (जैसे GET अनुरोधों की कैशबिलिटी और PUT अनुरोधों की पुनरावृत्ति)।

जीआरपीसी, सोप, एट। अल हैक की तरह अधिक हैं - फ़ायरवॉल और फ़ायरफ़ॉक्स प्रतिबंध के आसपास मार्ग करने के लिए HTTP पर सुरंग RPC- शैली सेवाओं के लिए HTTP के शीर्ष पर हैक। जरूरी नहीं कि वह बुरी चीज हो। कभी-कभी आप REST के बजाय RPC- शैली सेवा चाहते हैं, और हम ऐसी दुनिया में रहते हैं, जहां मिडबॉक्स को प्रतिस्थापित करना कठिन है।

यदि आपके पास REST की वास्तविक परिभाषा पर पढ़ने का समय नहीं है: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

हमेशा TLDR होता है; विकिपीडिया पर संस्करण:

https://en.wikipedia.org/wiki/Representational_state_transfer

यदि आपको RPC- शैली सेवा की आवश्यकता है, तो निश्चित रूप से, gRPC बढ़िया है। यदि आप वेब पर रहना चाहते हैं, या आप चाहते हैं कि एक RESTful शैली सेवा के साथ आने वाले सभी लाभ हों, तो एक RESTIN शैली सेवा बनाएँ। और अगर यह आपकी बाकी सेवा में JSON प्रारूप में डेटा को क्रमांकित / डिस्क्रिअलाइज़ करने के लिए बहुत धीमा है, तो प्रोटोबॉफ़ या जो भी उपयोग करना पूरी तरह से ठीक है।

यदि gRPC किसी भी चीज का संस्करण 2 है, तो यह SOAP का संस्करण 2 है। एक जो भयानक नहीं है, सोप की तरह।

और, नहीं, आप अपने GET अनुरोध में केवल "किसी भी फ़ंक्शन को कॉल नहीं कर सकते" और एक RESTful सेवा है।

एक आखिरी बात: यदि आप किसी RESTful सेवा पर प्रोटोबोफ़्स का उपयोग करने जा रहे हैं, तो कृपया इसे सही करें, सामग्री प्रकार हेडर इत्यादि का उपयोग करके, इसके साथ ही आप JSON और प्रोटोबॉफ़ दोनों का आसानी से समर्थन कर सकते हैं।

अब मेरे SOAP बॉक्स से नीचे जा रहे हैं ..;)


क्या आप अनुमान लगा रहे हैं कि GRPC का उपयोग करके एक RESTful सेवा नहीं बनाई जा सकती है?
केविन एस

1
आरटीएफएम ने फील्डिंग के शोध प्रबंध का हवाला देते हुए कहा, लेकिन अन्यथा बहुत अच्छी प्रतिक्रिया मिली।
रम्हरिसन

4

REST पर gRPC का सबसे बड़ा लाभ इसके HTTP / 2 का दादाजी HTTP 1.1 पर समर्थन है। तब HTTP 1.1 पर HTTP / 2 का सबसे बड़ा फायदा है, 'HTTP / 2 सर्वर को सामग्री "पुश" करने की अनुमति देता है ...


1
सर्वर पुश को HTTP / 2 की आवश्यकता नहीं है।
रॉबिन ग्रीन

क्या आप अधिक विस्तार से बताएंगे? यह HTTP / 2 सर्वर पुश: en.wikipedia.org/wiki/HTTP/2_Server_Push
Denis Wang

2
क्षमा करें, मेरा मतलब HTTP 2 सर्वर पुश नहीं था, मेरा मतलब था कि उत्तरों को स्ट्रीमिंग करना। उदाहरण के लिए आदरणीय लंबे मतदान, या वेबस्केट जैसे स्ट्रीमिंग उत्तर देने के अन्य तरीके हैं।
रॉबिन ग्रीन

1
gRPC सर्वर HTTP / 2 "पुश नहीं भेजता है और gRPC क्लाइंट HTTP / 2" पुश "को अनदेखा करता है। इसलिए HTTP / 2 से विरासत में प्राप्त GRPC के लाभों में" पुश "शामिल नहीं होना चाहिए।
user675693
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.