Konfigurowanie planu zaplecza usługi Redis na potrzeby skalowania w poziomie ASP.NET Core SignalR
Przez Andrew Stanton-Nurse, Brady Gaster i Tom Dykstra.
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj następujący pakiet NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Wywołaj metodę AddStackExchangeRedis , dodając następujący wiersz przed wierszem, który wywołuje
builder.Build()
element ) wProgram.cs
pliku.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w
ConfigurationOptions
obiekcie. Opcje określone wConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });
W poprzednim kodzie
options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.Aby uzyskać informacje o opcjach usługi Redis, zobacz dokumentację usługi Redis StackExchange.
Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby:
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj następujący pakiet NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Wywołaj metodę AddStackExchangeRedis , dodając następujący wiersz przed wierszem, który wywołuje
builder.Build()
element ) wProgram.cs
pliku.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w
ConfigurationOptions
obiekcie. Opcje określone wConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
W poprzednim kodzie
options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.Aby uzyskać informacje o opcjach usługi Redis, zobacz dokumentację usługi Redis StackExchange.
Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby:
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj następujący pakiet NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
Wywołaj metodę AddStackExchangeRedis , dodając następujący wiersz przed wierszem, który wywołuje
builder.Build()
element ) wProgram.cs
pliku.builder.Services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w
ConfigurationOptions
obiekcie. Opcje określone wConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.builder.Services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = RedisChannel.Literal("MyApp"); });
W poprzednim kodzie
options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.Aby uzyskać informacje o opcjach usługi Redis, zobacz dokumentację usługi Redis StackExchange.
Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby:
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj następujący pakiet NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
W metodzie wywołaj metodę
Startup.ConfigureServices
AddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w
ConfigurationOptions
obiekcie. Opcje określone wConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
W poprzednim kodzie
options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.Aby uzyskać informacje o opcjach usługi Redis, zobacz dokumentację usługi Redis StackExchange.
Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby:
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj następujący pakiet NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
W metodzie wywołaj metodę
Startup.ConfigureServices
AddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w
ConfigurationOptions
obiekcie. Opcje określone wConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
W poprzednim kodzie
options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.Aby uzyskać informacje o opcjach usługi Redis, zobacz dokumentację usługi Redis StackExchange.
Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby:
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj jeden z następujących pakietów NuGet:
Microsoft.AspNetCore.SignalR.StackExchangeRedis
— Zależy od StackExchange.Redis 2.X.X.X. Jest to zalecany pakiet dla ASP.NET Core 2.2 i nowszych wersji.Microsoft.AspNetCore.SignalR.Redis
— Zależy od StackExchange.Redis 1.X.X.X. Ten pakiet nie jest uwzględniony w ASP.NET Core 3.0 i nowszych wersjach.
W metodzie wywołaj metodę
Startup.ConfigureServices
AddStackExchangeRedis:services.AddSignalR().AddStackExchangeRedis("<your_Redis_connection_string>");
W przypadku korzystania z metody Microsoft.AspNetCore.SignalR.Redis
wywołaj metodę AddRedis.
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w obiekcie ConfigurationOptions. Opcje określone w
ConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.services.AddSignalR() .AddStackExchangeRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
W przypadku korzystania z metody Microsoft.AspNetCore.SignalR.Redis
wywołaj metodę AddRedis.
W poprzednim kodzie options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.
Aby uzyskać informacje o opcjach usługi Redis, zobacz dokumentację usługi Redis StackExchange.
Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby:
W tym artykule wyjaśniono SignalR- specyficzne aspekty konfigurowania serwera Redis do użycia do skalowania w poziomie aplikacji ASP.NET Core SignalR .
Ostrzeżenie
W tym artykule przedstawiono użycie parametry połączenia. W przypadku lokalnej bazy danych użytkownik nie musi być uwierzytelniany, ale w środowisku produkcyjnym parametry połączenia czasami zawiera hasło do uwierzytelniania. Poświadczenie hasła właściciela zasobu (ROPC) jest zagrożeniem bezpieczeństwa, którego należy unikać w produkcyjnych bazach danych. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania aplikacji wdrożonych w środowiskach testowych lub produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Konfigurowanie płaszczyzny zapasowej usługi Redis
Wdrażanie serwera Redis.
Ważne
W przypadku użycia w środowisku produkcyjnym plan backplan usługi Redis jest zalecany tylko wtedy, gdy działa w tym samym centrum danych co SignalR aplikacja. W przeciwnym razie opóźnienie sieci zmniejsza wydajność. Jeśli twoja SignalR aplikacja jest uruchomiona w chmurze platformy Azure, zalecamy usługę platformy Azure SignalR zamiast backplane redis.
Aby uzyskać więcej informacji, zobacz następujące zasoby:
SignalR W aplikacji zainstaluj
Microsoft.AspNetCore.SignalR.Redis
pakiet NuGet.W metodzie wywołaj metodę
Startup.ConfigureServices
AddRedis
po :AddSignalR
services.AddSignalR().AddRedis("<your_Redis_connection_string>");
Skonfiguruj opcje zgodnie z potrzebami:
Większość opcji można ustawić w parametry połączenia lub w obiekcie ConfigurationOptions. Opcje określone w
ConfigurationOptions
zastąpieniu tych ustawionych w parametry połączenia.W poniższym przykładzie pokazano, jak ustawić opcje w
ConfigurationOptions
obiekcie. W tym przykładzie dodano prefiks kanału, dzięki czemu wiele aplikacji może współużytkować to samo wystąpienie usługi Redis, jak wyjaśniono w poniższym kroku.services.AddSignalR() .AddRedis(connectionString, options => { options.Configuration.ChannelPrefix = "MyApp"; });
W poprzednim kodzie
options.Configuration
jest inicjowany z dowolną określoną wartością w parametry połączenia.Jeśli używasz jednego serwera Redis dla wielu SignalR aplikacji, użyj innego prefiksu kanału dla każdej SignalR aplikacji.
Ustawienie prefiksu kanału izoluje jedną SignalR aplikację od innych, które używają różnych prefiksów kanałów. Jeśli nie przypiszesz różnych prefiksów, komunikat wysłany z jednej aplikacji do wszystkich swoich klientów przejdzie do wszystkich klientów wszystkich aplikacji korzystających z serwera Redis jako płaszczyzny wstecznej.
Skonfiguruj oprogramowanie do równoważenia obciążenia farmy serwerów na potrzeby sesji sticky. Oto kilka przykładów dokumentacji dotyczącej tego, jak to zrobić:
Błędy serwera Redis
Gdy serwer Redis ulegnie awarii, SignalR zgłasza wyjątki wskazujące, że komunikaty nie zostaną dostarczone. Niektóre typowe komunikaty wyjątków:
- Nie można zapisać komunikatu
- Nie można wywołać metody centrum "MethodName"
- Połączenie z usługą Redis nie powiodło się
SignalR program nie buforuje komunikatów do wysyłania ich po utworzeniu kopii zapasowej serwera. Wszystkie komunikaty wysyłane podczas wyłączania serwera Redis zostaną utracone.
SignalR automatycznie ponownie nawiązuje połączenie, gdy serwer Redis będzie ponownie dostępny.
Zachowanie niestandardowe w przypadku niepowodzeń połączeń
Oto przykład pokazujący sposób obsługi zdarzeń niepowodzenia połączenia usługi 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;
};
});
Klaster Redis
Klaster Redis korzysta z wielu jednocześnie aktywnych serwerów Redis w celu osiągnięcia wysokiej dostępności. Gdy klaster Redis jest używany jako płaszczyzna wsteczna dla SignalRprogramu , komunikaty są dostarczane do wszystkich węzłów klastra bez modyfikacji kodu w aplikacji.
Istnieje kompromis między liczbą węzłów w klastrze a przepływnością planu wstecznego. Zwiększenie liczby węzłów zwiększa dostępność klastra, ale zmniejsza przepływność, ponieważ komunikaty muszą być przesyłane do wszystkich węzłów w klastrze.
SignalR W aplikacji uwzględnij wszystkie możliwe węzły usługi Redis przy użyciu jednej z następujących metod:
- Wyświetl listę węzłów w parametry połączenia rozdzielonych przecinkami.
- Jeśli używasz niestandardowego zachowania w przypadku niepowodzeń połączenia, dodaj węzły do programu
ConfigurationOptions.Endpoints
.
Następne kroki
Aby uzyskać więcej informacji, zobacz następujące zasoby: