C# अकादमी · पाठ

Redis Backplane के साथ Scaling

instances के बीच messages को synchronise करने के लिए Redis backplane का उपयोग करके SignalR को कई servers पर scale करें।

पाठ 4, कुल 4 में से13 चरण

Redis Backplane के साथ Scaling, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कई सर्वरों की समस्या

जब SignalR एकल सर्वर पर चलता है, तो क्लाइंट और सर्वर कनेक्शनों तथा समूहों के लिए मेमोरी साझा करते हैं। दो या अधिक सर्वरों तक विस्तार करने पर प्रत्येक सर्वर को केवल अपने कनेक्शनों की जानकारी रहती है—Server A पर भेजा गया संदेश Server B से जुड़े क्लाइंट्स तक कभी नहीं पहुँचता।

बैकप्लेन क्या है?

बैकप्लेन SignalR सर्वर इंस्टेंसों के बीच साझा संदेश बस होता है। जब कोई सर्वर संदेश भेजना चाहता है, तो वह उसे बैकप्लेन पर प्रकाशित करता है; सभी सर्वर उसे प्राप्त करके अपने स्थानीय कनेक्शनों तक पहुँचाते हैं।

Redis बैकप्लेन जोड़ना

Microsoft.AspNetCore.SignalR.StackExchangeRedis पैकेज इंस्टॉल करें और AddSignalR() के बाद AddStackExchangeRedis() कॉल करें।

// dotnet add package Microsoft.AspNetCore.SignalR.StackExchangeRedis

builder.Services.AddSignalR()
    .AddStackExchangeRedis("localhost:6379", options =>
    {
        options.Configuration.ChannelPrefix =
            RedisChannel.Literal("myapp"); // namespace your channels
    });

// Or from config:
// .AddStackExchangeRedis(builder.Configuration.GetConnectionString("Redis")!);

SignalR के लिए Redis पब/सब कैसे काम करता है

प्रत्येक SignalR सर्वर Redis चैनलों को सब्सक्राइब करता है। जब Server A किसी समूह या उपयोगकर्ता के लिए संदेश प्रकाशित करता है, तो Redis उसे सभी सब्सक्राइबरों (Server B, Server C…) तक पहुँचाता है, जो फिर उसे अपने स्थानीय कनेक्शनों तक भेजते हैं।

// Server A: client sends message
// Hub on Server A calls:
await Clients.Group("room-42").ReceiveMessage(user, msg);

// Internally SignalR publishes to Redis:
// PUBLISH signalr/myapp/group/room-42 <serialized message>

// Redis delivers to Server B and C
// Both servers find connections in "room-42" and push to them

कॉन्फ़िगरेशन विकल्प

उत्पादन के लिए Redis कनेक्शन को सूक्ष्म रूप से समायोजित करें: TLS, पासवर्ड, कनेक्शन की मजबूती और पब/सब चैनल उपसर्ग।

builder.Services.AddSignalR()
    .AddStackExchangeRedis(opts =>
    {
        opts.Configuration = ConfigurationOptions.Parse(
            builder.Configuration["Redis:ConnectionString"]!);
        opts.Configuration.Password      = builder.Configuration["Redis:Password"];
        opts.Configuration.Ssl           = true;
        opts.Configuration.AbortOnConnectFail = false;
        opts.Configuration.ConnectRetry  = 3;
    });

Azure SignalR Service

पूरी तरह प्रबंधित स्केलिंग के लिए Azure SignalR Service का उपयोग करें। यह बैकप्लेन और कनेक्शन प्रबंधक के रूप में काम करता है—आपके ऐप सर्वर स्थिति-रहित हो जाते हैं और WebSocket कनेक्शन स्वयं बनाए नहीं रखते।

// dotnet add package Microsoft.Azure.SignalR

builder.Services.AddSignalR()
    .AddAzureSignalR(builder.Configuration["Azure:SignalR:ConnectionString"]!);

// That's it — Azure manages all connections and backplane
// Your server scales to zero when not needed

स्टिकी सत्र (गैर-WebSocket ट्रांसपोर्ट के लिए फ़ॉलबैक)

Server-Sent Events या Long Polling (WebSockets नहीं) का उपयोग करते समय वही क्लाइंट हमेशा उसी सर्वर तक पहुँचना चाहिए—इसे स्टिकी सत्र कहा जाता है। इसे अपने लोड बैलेंसर या रिवर्स प्रॉक्सी में कॉन्फ़िगर करें।

# Nginx: sticky session config (IP hash)
upstream signalr_servers {
    ip_hash; # ensures same client hits same server
    server server1:5000;
    server server2:5000;
    server server3:5000;
}

# Or use cookie-based sticky sessions:
# sticky cookie srv_id expires=1h;

# WebSockets don't need sticky sessions —
# the connection is long-lived on one server

कई सर्वरों में समूह

समूह सदस्यता का रखरखाव बैकप्लेन करता है। Server A पर किसी कनेक्शन को समूह में जोड़ने पर Redis के माध्यम से Server B को भी इसकी जानकारी हो जाती है—एप्लिकेशन कोड के लिए यह पूरी तरह पारदर्शी होता है।

// This works correctly across servers:
public async Task JoinRoom(string room)
{
    // Adds to Redis-backed group
    await Groups.AddToGroupAsync(Context.ConnectionId, room);

    // Clients.Group sends via Redis to all servers
    await Clients.Group(room).UserJoined(Context.User!.Identity!.Name!);
}
// No code changes needed — the Redis backplane handles distribution

Redis पब/सब की निगरानी

SignalR ट्रैफ़िक की पुष्टि करने और समस्याओं का पता लगाने के लिए Redis चैनलों की निगरानी करें। संदेशों के प्रवाह को देखने के लिए redis-cli SUBSCRIBE या Redis Insights का उपयोग करें।

# redis-cli: monitor all SignalR channels
redis-cli PSUBSCRIBE "myapp*"

# Check active channel subscribers
redis-cli PUBSUB CHANNELS "myapp*"

# Check number of subscribers per channel
redis-cli PUBSUB NUMSUB "myapp/all"

Redis विफलताओं से निपटना

यदि Redis अनुपलब्ध हो जाता है, तो SignalR केवल स्थानीय मोड में चला जाता है—संदेश सर्वरों के बीच नहीं पहुँचेंगे। Redis कनेक्टिविटी के लिए पुनः प्रयास नीतियाँ और चेतावनी व्यवस्था कॉन्फ़िगर करें।

builder.Services.AddSignalR()
    .AddStackExchangeRedis(opts =>
    {
        opts.Configuration = ConfigurationOptions.Parse(redisConn);
        opts.Configuration.AbortOnConnectFail = false; // don't crash app
        opts.Configuration.ConnectRetry       = 5;
        opts.Configuration.ReconnectRetryPolicy =
            new ExponentialRetry(5000, maxDeltaBackoffMilliseconds: 60000);
    });

वास्तविक उदाहरण: विस्तारित चैट संरचना

उत्पादन में लोड बैलेंसर के पीछे 3 या अधिक SignalR सर्वर इंस्टेंस चलाएँ और Redis (या Azure SignalR Service) को बैकप्लेन के रूप में उपयोग करें। सारी स्थिति Redis में रहती है; सर्वर स्थिति-रहित और आसानी से हटाए जा सकने वाले होते हैं।

// Architecture:
// [Browser] -> [Load Balancer (any server, WebSocket)] ->
//   [SignalR Server 1] -+
//   [SignalR Server 2] -+-> [Redis Pub/Sub] -> all servers
//   [SignalR Server 3] -+

// Server code is identical on all instances:
builder.Services.AddSignalR().AddStackExchangeRedis(redisConn);
app.MapHub<ChatHub>("/hubs/chat");
// Scale replicas: kubectl scale deployment chat --replicas=3

त्वरित जाँच

SignalR बैकप्लेन किस समस्या का समाधान करता है?

पुनरावलोकन: Redis बैकप्लेन के साथ स्केलिंग

मुख्य बातें:

  • बैकप्लेन के बिना, एक सर्वर के संदेश दूसरे सर्वरों पर मौजूद क्लाइंट्स तक नहीं पहुँचते
  • AddStackExchangeRedis() पारदर्शी रूप से Redis पब/सब बैकप्लेन जोड़ता है
  • Azure SignalR Service पूरी तरह प्रबंधित, सर्वर-रहित बैकप्लेन का विकल्प प्रदान करता है
  • गैर-WebSocket ट्रांसपोर्ट (SSE, Long Polling) के लिए स्टिकी सत्र आवश्यक हैं
  • बैकप्लेन के माध्यम से सर्वरों के बीच समूह सदस्यता समन्वित रहती है
  • Redis की मजबूती के लिए AbortOnConnectFail=false और पुनः प्रयास नीतियाँ कॉन्फ़िगर करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “Redis Backplane के साथ Scaling” पाठ निःशुल्क है?

हाँ—“Redis Backplane के साथ Scaling” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Redis Backplane के साथ Scaling” में मैं क्या सीखूँगा?

instances के बीच messages को synchronise करने के लिए Redis backplane का उपयोग करके SignalR को कई servers पर scale करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Redis Backplane के साथ Scaling” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. SignalR Hubs और Connections
  2. Groups, Users और Connection प्रबंधन
  3. Strongly Typed Hubs
  4. Redis Backplane के साथ Scaling
← C# अकादमी पर वापस जाएँ