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()
) vProgram.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 objektu
ConfigurationOptions
. Možnosti zadané vConfigurationOptions
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()
) vProgram.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 objektu
ConfigurationOptions
. Možnosti zadané vConfigurationOptions
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()
) vProgram.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 objektu
ConfigurationOptions
. Možnosti zadané vConfigurationOptions
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 objektu
ConfigurationOptions
. Možnosti zadané vConfigurationOptions
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 objektu
ConfigurationOptions
. Možnosti zadané vConfigurationOptions
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ě zavolejteAddRedis
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: