Udostępnij za pośrednictwem


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 ) w Program.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 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.

    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 ) w Program.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 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 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 ) w Program.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 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.

    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 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 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 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 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.Rediswywoł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.Rediswywoł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: