Sdílet prostřednictvím


Nastavení backplane Redis pro horizontální navýšení kapacity ASP.NET Core SignalR

Andrew Stanton-Nurse, Brady Gaster a Tom Dykstra.

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Voláním AddStackExchangeRedis přidejte následující řádek před řádek, který volá builder.Build()) v Program.cs souboru.

    builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektuConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    builder.Services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp");
      });
    

    V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

    Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddMessagePackProtocol()
        .AddStackExchangeRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích:

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Voláním AddStackExchangeRedis přidejte následující řádek před řádek, který volá builder.Build()) v Program.cs souboru.

    builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektuConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

    Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddMessagePackProtocol()
        .AddStackExchangeRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích:

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Voláním AddStackExchangeRedis přidejte následující řádek před řádek, který volá builder.Build()) v Program.cs souboru.

    builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektuConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    builder.Services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp");
      });
    

    V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

    Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddMessagePackProtocol()
        .AddStackExchangeRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích:

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Startup.ConfigureServices V metodě volejteAddStackExchangeRedis:

    services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektuConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

    Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddMessagePackProtocol()
        .AddStackExchangeRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích:

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte následující balíček NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis
  • Startup.ConfigureServices V metodě volejteAddStackExchangeRedis:

    services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    
  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektuConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

    Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddMessagePackProtocol()
        .AddStackExchangeRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích:

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte jeden z následujících balíčků NuGet:

    • Microsoft.AspNetCore.SignalR.StackExchangeRedis – Závisí na StackExchange.Redis 2.X.X. Toto je doporučený balíček pro ASP.NET Core 2.2 a novější.
    • Microsoft.AspNetCore.SignalR.Redis – Závisí na StackExchange.Redis 1.X.X. Tento balíček není součástí ASP.NET Core 3.0 a novějším.
  • Startup.ConfigureServices V metodě volejteAddStackExchangeRedis:

    services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
    

Při použití Microsoft.AspNetCore.SignalR.Redis, volání AddRedis.

  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektu ConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    services.AddSignalR()
      .AddStackExchangeRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

Při použití Microsoft.AspNetCore.SignalR.Redis, volání AddRedis.

V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

Informace o možnostech Redis naleznete v dokumentaci k StackExchange Redis.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddMessagePackProtocol()
        .AddStackExchangeRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích:

Tento článek vysvětluje SignalRkonkrétní aspekty nastavení serveru Redis pro horizontální navýšení kapacity aplikace ASP.NET Core SignalR .

Upozorňující

Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.

Nastavení backplane Redis

  • Nasazení serveru Redis

    Důležité

    Pro produkční použití se backplane Redis doporučuje jenom v případě, že běží ve stejném datacentru SignalR jako aplikace. Jinak latence sítě snižuje výkon. Pokud je vaše SignalR aplikace spuštěná v cloudu Azure, místo backplane Redis doporučujeme službu Azure SignalR .

    Další informace naleznete v následujících zdrojích:

  • SignalR V aplikaci nainstalujte Microsoft.AspNetCore.SignalR.Redis balíček NuGet.

  • Startup.ConfigureServices V metodě zavolejte AddRedis zaAddSignalR:

    services.AddSignalR().AddRedis("<your_Redis_connection_string>");
    
  • Podle potřeby nakonfigurujte možnosti:

    Většinu možností lze nastavit v připojovací řetězec nebo v objektu ConfigurationOptions. Možnosti zadané v ConfigurationOptions přepsání těch, které jsou nastaveny v připojovací řetězec.

    Následující příklad ukazuje, jak nastavit možnosti v objektu ConfigurationOptions . Tento příklad přidá předponu kanálu, aby více aplikací mohly sdílet stejnou instanci Redis, jak je vysvětleno v následujícím kroku.

    services.AddSignalR()
      .AddRedis(connectionString, options => {
          options.Configuration.ChannelPrefix = "MyApp";
      });
    

    V předchozím kódu se inicializuje cokoli, options.Configuration co bylo zadáno v připojovací řetězec.

  • Pokud používáte jeden server Redis pro více SignalR aplikací, použijte pro každou SignalR aplikaci jinou předponu kanálu.

    Nastavení předpony kanálu izoluje jednu SignalR aplikaci od ostatních, které používají různé předpony kanálu. Pokud nepřiřazujete různé předpony, zpráva odeslaná z jedné aplikace všem svým vlastním klientům přejde na všechny klienty všech aplikací, které používají server Redis jako backplane.

  • Nakonfigurujte software pro vyrovnávání zatížení serverové farmy pro rychlé relace. Tady je několik příkladů dokumentace, jak to udělat:

Chyby serveru Redis

Když server Redis přestane fungovat, SignalR vyvolá výjimky, které indikují, že zprávy se nedoručí. Některé typické zprávy o výjimce:

  • Zpráva o neúspěšném zápisu
  • Volání metody Hub MethodName se nezdařilo.
  • Připojení k Redis se nezdařilo

SignalR neuvádí zprávy do vyrovnávací paměti, které se mají odesílat, když se server vrátí zpět. Všechny zprávy odeslané během výpadku serveru Redis budou ztraceny.

SignalR automaticky se znovu připojí, jakmile bude server Redis znovu k dispozici.

Vlastní chování selhání připojení

Tady je příklad, který ukazuje, jak zpracovat události selhání připojení Redis.

services.AddSignalR()
        .AddRedis(o =>
        {
            o.ConnectionFactory = async writer =>
            {
                var config = new ConfigurationOptions
                {
                    AbortOnConnectFail = false
                };
                config.EndPoints.Add(IPAddress.Loopback, 0);
                config.SetDefaultPorts();
                var connection = await ConnectionMultiplexer.ConnectAsync(config, writer);
                connection.ConnectionFailed += (_, e) =>
                {
                    Console.WriteLine("Connection to Redis failed.");
                };

                if (!connection.IsConnected)
                {
                    Console.WriteLine("Did not connect to Redis.");
                }

                return connection;
            };
        });

Cluster Redis

Cluster Redis využívá k zajištění vysoké dostupnosti několik současně aktivních serverů Redis. Když se redis Cluster použije jako backplane pro SignalR, zprávy se doručí do všech uzlů clusteru bez úprav kódu aplikace.

Mezi počtem uzlů v clusteru a propustností backplanu existuje kompromis. Zvýšení počtu uzlů zvyšuje dostupnost clusteru, ale snižuje propustnost, protože zprávy se musí přenášet do všech uzlů v clusteru.

SignalR V aplikaci zahrňte všechny možné uzly Redis pomocí některého z následujících přístupů:

  • Vypište uzly v připojovací řetězec oddělené čárkami.
  • Pokud používáte vlastní chování pro selhání připojení, přidejte uzly do ConfigurationOptions.Endpoints.

Další kroky

Další informace naleznete v následujících zdrojích: