क्या GRPC (HTTP / 2) HTTP / 2 के साथ REST से तेज है?


96

लक्ष्य एक परिवहन और अनुप्रयोग परत प्रोटोकॉल शुरू करना है जो इसकी विलंबता और नेटवर्क थ्रूपुट में बेहतर है । वर्तमान में, एप्लिकेशन HTTP / 1.1 के साथ REST का उपयोग करता है और हम एक उच्च विलंबता का अनुभव करते हैं। मुझे इस विलंबता समस्या को हल करने की आवश्यकता है और मैं gRPC (HTTP / 2) या REST / HTTP2 का उपयोग करने के लिए खुला हूं

HTTP / 2:

  1. मल्टिप्लेक्स
  2. सिंगल टीसीपी कनेक्शन
  3. पाठ के बजाय द्विआधारी
  4. हैडर सम्पीडन
  5. सर्वर पुश

उपरोक्त सभी फायदों से मैं अवगत हूँ। प्रश्न नंबर 1: अगर मैं HTTP / 2 के साथ REST का उपयोग करता हूं, तो मुझे यकीन है, HTTP / 1.1 के साथ REST की तुलना में मुझे एक महत्वपूर्ण प्रदर्शन में सुधार होगा , लेकिन यह gRPC (HTTP / 2) के साथ तुलना कैसे करता है ?

मुझे यह भी पता है कि जीआरपीसी प्रोटो बफर का उपयोग करता है, जो तार पर संरचित डेटा के संचरण के लिए सबसे अच्छा द्विआधारी क्रमांकन तकनीक है। प्रोटो बफर भी एक भाषा अज्ञेय दृष्टिकोण विकसित करने में मदद करता है। मैं इससे सहमत हूं और मैं ग्राफ़कॉक का उपयोग करके REST में समान सुविधा को लागू कर सकता हूं। लेकिन मेरी चिंता सीरियलाइजेशन पर है: प्रश्न संख्या 2: जब HTTP / 2 इस बाइनरी फीचर को लागू करता है, तो क्या प्रोटॉफ बफर का उपयोग करने से HTTP / 2 के ऊपर अतिरिक्त लाभ मिलता है?

प्रश्न संख्या 3: स्ट्रीमिंग के संदर्भ में , द्वि-दिशात्मक उपयोग-मामलों , gRPC (HTTP / 2) की तुलना (REST और HTTP / 2) के साथ कैसे की जाती है?

इंटरनेट में बहुत सारे ब्लॉग / वीडियो हैं जो इस तरह (REST और HTTP / 1.1) के साथ gRPC (HTTP / 2) की तुलना करते हैं । जैसा कि पहले कहा गया था, मैं जीआरपीसी (एचटीटीपी / 2) और (आरईएसटी / एचटीटीपी / 2 के साथ तुलना करने पर) अंतर जानना चाहता हूं।


आपने क्या उपयोग किया है? HTTP2 + REST के लिए कोई ढांचा है?
knocte

@knocte मैंने जीपीआरसी का उपयोग करके समाप्त किया। इसने विलंबता को काफी कम कर दिया। HTTP / 2 + REST के संबंध में, कोई विशिष्ट ढांचा नहीं है, यह वह सेटिंग्स है जिसे आपको उस सर्वर में बदलने की आवश्यकता है जिसका आप उपयोग कर रहे हैं। कहते हैं, आप nginx का उपयोग कर रहे हैं, HTTP / 2 सेटअप करने के चरणों को देखने के लिए डॉक्स देखें।
लक्ष्मण दिवाकर

और आपको यह सुनिश्चित करना होगा कि HTTP / 1.1 कनेक्शन का पुन: उपयोग करता है। अन्यथा "tcp cold start" की खोज करें। जीआरपीसी डिफ़ॉल्ट रूप से कनेक्शन का पुन: उपयोग करता है।
bohdan_trotsenko

जवाबों:


93

जीआरपीसी डिफ़ॉल्ट रूप से HTTP / 2 पर REST से अधिक तेज़ नहीं है, लेकिन यह आपको इसे तेज़ बनाने के लिए उपकरण देता है। कुछ चीजें हैं जो REST के साथ करना मुश्किल या असंभव होगा।

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

जैसा कि nfirvine ने कहा, आप अपने अधिकांश प्रदर्शन सुधार सिर्फ Protobuf के उपयोग से देखेंगे। जबकि आप REST के साथ प्रोटो का उपयोग कर सकते हैं, यह बहुत अच्छी तरह से gRPC के साथ एकीकृत है। तकनीकी रूप से, आप JSON को gRPC के साथ उपयोग कर सकते हैं, लेकिन अधिकांश लोग प्रोटॉज़ के अभ्यस्त होने के बाद प्रदर्शन लागत का भुगतान नहीं करना चाहते हैं।


उत्तर के लिए धन्यवाद @Carl क्या आप हमें उपरोक्त सभी चीजों और बेंचमार्क के लिंक के बारे में कुछ लिंक / डॉक्स साझा कर सकते हैं?
लक्ष्मण दिवाकर

3
मैंने डैशबोर्ड से लिंक करने के लिए प्रतिक्रिया को अपडेट किया। मेरे पास सीधे इनको समझाने के लिए डॉक्स नहीं हैं, लेकिन मैं एक मुख्य योगदानकर्ता हूं।
कार्ल मस्तंगेलो

कृपया लोड संतुलन libraryलिंक प्रदान करें
BozoJoe

15

मैं किसी भी तरह से इस पर विशेषज्ञ नहीं हूं और मेरे पास इसका कोई भी डेटा वापस करने के लिए कोई डेटा नहीं है।

जिस "बाइनरी फ़ीचर" के बारे में आप बात कर रहे हैं वह HTTP / 2 फ्रेम का बाइनरी प्रतिनिधित्व है। सामग्री स्वयं (एक JSON पेलोड) अभी भी UTF-8 होगी। आप उस JSON को कंप्रेस कर सकते हैं और Content-Encoding: gzipHTTP / 1 की तरह सेट कर सकते हैं ।

लेकिन gRPC संपीड़न के रूप में अच्छी तरह से gzip करता है। तो वास्तव में, हम बात कर रहे हैं gzip- संकुचित JSON बनाम gzip- संपीड़ित प्रोटोबोफ़्स के बीच के अंतर के बारे में।

जैसा कि आप कल्पना कर सकते हैं, संपीड़ित प्रोटोबुफ़ को हर तरह से संकुचित JSON को हरा देना चाहिए, अन्यथा प्रोटोबॉफ़ अपने लक्ष्य पर विफल हो गए हैं।

JSON बनाम प्रोटोबॉफ़्स की सर्वव्यापकता के अलावा, केवल नकारात्मक पक्ष जो मैं प्रोटोबोफ़्स का उपयोग करके देख सकता हूं, यह है कि आपको उन्हें डिकोड करने के लिए .proto की आवश्यकता है, एक tcpdump स्थिति में कहें।


1
प्रश्न पर आपकी राय के लिए धन्यवाद @nfirvine क्रमांकन सुविधा थोड़े समझ में आता है। क्या आप REST और gRPC में क्रमबद्धता के बारे में कुछ और जानकारी / विवरण जोड़ सकते हैं। यह बहुत अच्छा होगा, यदि आप उसी पर कुछ लिंक साझा कर सकते हैं।
लक्ष्मण दिवाकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.