gRPC C# में: REST से ज़्यादा ताकतवर, लेकिन हर जगह नहीं

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में gRPC: जब REST पुराना हो जाए और HTTP/1.1 धीमा लगे

\n\n

कल्पना कीजिए कि आप फॉर्मूला-1 के पायलट हैं। आपकी कार 380 किमी/घंटा की रफ्तार पकड़ सकती है, लेकिन आप शहर के ट्रैफिक जाम में फंसे हैं। बेकार है, है ना? ठीक इसी तरह अक्सर C# में gRPC का इस्तेमाल किया जाता है – जो माइक्रोसर्विसेज के बीच कम्युनिकेशन का सबसे शक्तिशाली टूल है – वहाँ जहाँ सिर्फ एक साधारण REST API काफी होता। और फिर लोग हैरान होते हैं: "डीबग करना इतना मुश्किल क्यों है, इतना कोड क्यों लिखना पड़ता है?"

\n\n

आइए समझते हैं कि gRPC का उपयोग कब करना चाहिए और कब पुराने भरोसेमंद HTTP/1.1 पर ही रहना बेहतर है। स्पॉइलर: gRPC कोई जादू की छड़ी नहीं है। यह सही कामों के लिए एक रॉकेट बूस्टर है।

\n\n

gRPC क्या है और C# इसके लिए परफेक्ट क्यों है

\n\n

gRPC (Google Remote Procedure Call) एक फ्रेमवर्क है जो HTTP/2 और Protocol Buffers पर आधारित है। भारी-भरकम JSON की जगह एक कॉम्पैक्ट बाइनरी फॉर्मेट। एक ही रिक्वेस्ट-रिस्पॉन्स की जगह पूरे स्ट्रीम, मल्टीप्लेक्सिंग और दो-तरफा कम्युनिकेशन।

\n\n

C# gRPC इतना शानदार क्यों है? क्योंकि .NET Core को शुरू से ही हाई-लोड माइक्रोसर्विसेज के लिए डिज़ाइन किया गया था। Async, Span<T>, कम एलोकेशन – ये सब C# + gRPC को इंडस्ट्री की सबसे तेज़ जोड़ियों में से एक बनाते हैं।

\n\n
// एक सरल .proto फ़ाइल का उदाहरण\nsyntax = "proto3";\n\nservice OrderService {\n  rpc GetOrder (OrderRequest) returns (OrderResponse);\n  rpc SubscribeOrders (OrderFilter) returns (stream OrderUpdate);\n}\n\nmessage OrderRequest {\n  string order_id = 1;\n}\n\nmessage OrderResponse {\n  string id = 1;\n  double total = 2;\n  repeated string items = 3;\n}
\n\n

protoc या Grpc.Tools पैकेज के ज़रिए कोड जनरेट करने के बाद, आपको एक पूरा C# क्लास मिलेगा जिसे आप सामान्य मेथड की तरह इस्तेमाल कर सकते हैं।

\n\n

C# में gRPC की असली ज़रूरत कब है? 5 ठोस परिदृश्य

\n\n

1. हाई-लोड माइक्रोसर्विसेज (1000+ rps)

\n\n

अगर आपका सिस्टम हर सेकंड हज़ारों रिक्वेस्ट प्रोसेस करता है, तो JSON का हर अतिरिक्त किलोबाइट और हर अतिरिक्त RTT (round-trip time) पैसे के नुकसान में बदल जाता है। C# में gRPC REST/JSON की तुलना में 7-10 गुना तक स्पीड बढ़ा सकता है, इसकी वजहें हैं:

\n\n
    \n
  • बाइनरी सीरियलाइज़ेशन (Protobuf JSON से 3-5 गुना छोटा होता है)
  • \n
  • HTTP/2 मल्टीप्लेक्सिंग (एक TCP चैनल पर कई रिक्वेस्ट)
  • \n
  • हेडर पार्सिंग का कोई अतिरिक्त खर्च नहीं
  • \n
\n\n

2. रीयल-टाइम डेटा स्ट्रीमिंग

\n\n

क्या आपको स्टॉक प्राइस, लॉग्स, IoT सेंसर का डेटा या UI अपडेट ट्रांसफर करना है? Streaming gRPC C# आपके लिए सबसे अच्छा विकल्प है। चार प्रकार के स्ट्रीम उपलब्ध हैं:

\n\n
    \n
  • Unary – क्लासिक रिक्वेस्ट-रिस्पॉन्स
  • \n
  • Server streaming – सर्वर क्लाइंट को डेटा भेजता है
  • \n
  • Client streaming – क्लाइंट सर्वर को डेटा का पैकेट भेजता है
  • \n
  • Bidirectional streaming – दो-तरफा लगातार आदान-प्रदान
  • \n
\n\n
// Bidirectional streaming का सर्वर साइड कोड\npublic override async Task SubscribeOrders(\n    IAsyncStreamReader<OrderFilter> requestStream,\n    IServerStreamWriter<OrderUpdate> responseStream,\n    ServerCallContext context)\n{\n    await foreach (var filter in requestStream.ReadAllAsync())\n    {\n        var update = new OrderUpdate \n        { \n            OrderId = filter.OrderId, \n            Status = "Shipped" \n        };\n        await responseStream.WriteAsync(update);\n    }\n}
\n\n

3. एक ही टीम के इंटरनल माइक्रोसर्विसेज

\n\n

gRPC पब्लिक API के लिए अच्छा नहीं है (ब्राउज़र सपोर्ट कमज़ोर, डीबग करना मुश्किल)। लेकिन क्लस्टर के अंदर यह एक आदर्श ट्रांसपोर्ट है। अगर आप क्लाइंट और सर्वर दोनों को कंट्रोल करते हैं, तो C# पर gRPC ये फायदे देता है:

\n
    \n
  • .proto कॉन्ट्रैक्ट के ज़रिए सख्त टाइपिंग
  • \n
  • ऑटोमैटिक क्लाइंट जनरेशन
  • \n
  • Graceful shutdown और deadline propagation का सपोर्ट

ब्लॉग

पुस्तक अनुशंसाएँ