SignalR — skalowanie w poziomie z użyciem pamięci podręcznej Redis (SignalR 1.x)

Autor : Patrick Fletcher

Ostrzeżenie

Ta dokumentacja nie dotyczy najnowszej wersji usługi SignalR. Przyjrzyj się ASP.NET Core SignalR.

W tym samouczku użyjesz usługi Redis do dystrybucji komunikatów w aplikacji SignalR wdrożonej w dwóch oddzielnych wystąpieniach usług IIS.

Redis to magazyn par klucz-wartość w pamięci. Obsługuje również system obsługi komunikatów z modelem publikowania/subskrybowania. Backplan usługi SignalR Redis używa funkcji pub/sub do przekazywania komunikatów do innych serwerów.

Diagram przedstawiający relację między serwerem Redis Server, który subskrybuje maszyny wirtualne, komputery, które następnie publikują maszyny wirtualne na serwerach Redis.

Na potrzeby tego samouczka będziesz używać trzech serwerów:

  • Dwa serwery z systemem Windows, których użyjesz do wdrożenia aplikacji SignalR.
  • Jeden serwer z systemem Linux, który będzie używany do uruchamiania usługi Redis. Na potrzeby zrzutów ekranu w tym samouczku użyto protokołu TLS w systemie Ubuntu 12.04.

Jeśli nie masz trzech serwerów fizycznych do użycia, możesz utworzyć maszyny wirtualne w funkcji Hyper-V. Inną opcją jest utworzenie maszyn wirtualnych na platformie Azure.

Mimo że w tym samouczku jest używana oficjalna implementacja usługi Redis, istnieje również port usługi Redis systemu Windows z witryny MSOpenTech. Konfiguracja i konfiguracja są różne, ale w przeciwnym razie kroki są takie same.

Uwaga

Usługa SignalR skalowana w poziomie z usługą Redis nie obsługuje klastrów Redis.

Omówienie

Zanim przejdziemy do szczegółowego samouczka, poniżej przedstawiono krótkie omówienie tego, co zrobisz.

  1. Zainstaluj usługę Redis i uruchom serwer Redis.

  2. Dodaj następujące pakiety NuGet do aplikacji:

  3. Tworzenie aplikacji SignalR.

  4. Dodaj następujący kod do pliku Global.asax, aby skonfigurować płaszczyznę wsteczną:

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

System Ubuntu w funkcji Hyper-V

Za pomocą funkcji Hyper-V systemu Windows można łatwo utworzyć maszynę wirtualną z systemem Ubuntu w systemie Windows Server.

Pobierz plik ISO systemu Ubuntu z witryny http://www.ubuntu.com.

W funkcji Hyper-V dodaj nową maszynę wirtualną. W kroku Łączenie wirtualnego dysku twardego wybierz pozycję Utwórz wirtualny dysk twardy.

Zrzut ekranu przedstawiający kreatora nowej maszyny wirtualnej z wyróżnionym okienkiem Połącz wirtualny dysk twardy i pole Nazwa.

W kroku Opcje instalacji wybierz pozycję Plik obrazu (.iso), kliknij przycisk Przeglądaj i przejdź do obrazu ISO instalacji systemu Ubuntu.

Zrzut ekranu przedstawiający Kreatora nowej maszyny wirtualnej z okienkiem Opcje instalacji i wyróżnioną opcją Plik obrazu.

Instalowanie usługi Redis

Wykonaj kroki opisane w http://redis.io/download temacie , aby pobrać i skompilować usługę Redis.

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make

Spowoduje to skompilowanie plików binarnych usługi Redis w src katalogu .

Domyślnie usługa Redis nie wymaga hasła. Aby ustawić hasło, zmodyfikuj redis.conf plik znajdujący się w katalogu głównym kodu źródłowego. (Utwórz kopię zapasową pliku przed jego edycją!) Dodaj następującą dyrektywę do redis.conf:

requirepass YourStrongPassword1234

Teraz uruchom serwer Redis:

src/redis-server redis.conf

Zrzut ekranu przedstawiający okno serwera Redis użytkownika platformy Azure z informacjami o serwerze, w tym o tym, kiedy serwer został uruchomiony i stan pamięci.

Otwórz port 6379, który jest domyślnym portem, na którym nasłuchuje usługa Redis. (Numer portu można zmienić w pliku konfiguracji).

Tworzenie aplikacji SignalR

Utwórz aplikację SignalR, wykonując jeden z następujących samouczków:

Następnie zmodyfikujemy aplikację czatu, aby obsługiwała skalowanie w poziomie za pomocą usługi Redis. Najpierw dodaj pakiet NuGet SignalR.Redis do projektu. W programie Visual Studio z menu Narzędzia wybierz pozycję Menedżer pakietów NuGet, a następnie wybierz pozycję Konsola menedżera pakietów. W oknie Konsola menedżera pakietów wprowadź następujące polecenie:

Install-Package Microsoft.AspNet.SignalR.Redis

Następnie otwórz plik Global.asax. Dodaj następujący kod do metody Application_Start :

protected void Application_Start()
{
    GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");

    RouteTable.Routes.MapHubs();
}
  • "serwer" to nazwa serwera z uruchomioną usługą Redis.
  • port jest numerem portu
  • "password" to hasło zdefiniowane w pliku redis.conf.
  • Ciąg "AppName" to dowolny ciąg. Usługa SignalR tworzy kanał pub/sub usługi Redis o tej nazwie.

Na przykład:

GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Wdrażanie i uruchamianie aplikacji

Przygotuj wystąpienia systemu Windows Server do wdrożenia aplikacji SignalR.

Dodaj rolę usług IIS. Obejmują funkcje tworzenia aplikacji, w tym protokół WebSocket.

Zrzut ekranu przedstawiający Kreatora dodawania ról i funkcji z wyróżnionymi opcjami Role serwera i protokół Web Socket Protocol.

Uwzględnij również usługę zarządzania (wymienioną w obszarze "Narzędzia do zarządzania").

Zrzut ekranu przedstawiający Kreatora dodawania ról i funkcji z wyróżnionymi opcjami Role serwera i Skrypty zarządzania I I S i Narzędzia.

Zainstaluj narzędzie Web Deploy 3.0. Po uruchomieniu Menedżera usług IIS zostanie wyświetlony monit o zainstalowanie Platforma Microsoft Web lub pobranie instalatora. W Instalatorze platformy wyszukaj pozycję Web Deploy i zainstaluj narzędzie Web Deploy 3.0

Zrzut ekranu przedstawiający ekran wyników wyszukiwania Instalatora platformy internetowej 4 punkt 5 z wyróżnioną opcją Web Deploy 3 punkt 0.

Sprawdź, czy usługa zarządzania siecią Web jest uruchomiona. Jeśli nie jest, uruchom tę usługę. (Jeśli usługa zarządzania siecią Web nie jest widoczna na liście usług systemu Windows, upewnij się, że usługa zarządzania została zainstalowana po dodaniu roli usług IIS).

Domyślnie usługa zarządzania siecią Web nasłuchuje na porcie TCP 8172. W Zaporze systemu Windows utwórz nową regułę ruchu przychodzącego, aby zezwolić na ruch TCP na porcie 8172. Aby uzyskać więcej informacji, zobacz Konfigurowanie reguł zapory. (Jeśli hostujesz maszyny wirtualne na platformie Azure, możesz to zrobić bezpośrednio w Azure Portal. Zobacz How to Set Up Endpoints to a Virtual Machine (Jak skonfigurować punkty końcowe na maszynie wirtualnej).

Teraz możesz przystąpić do wdrażania projektu programu Visual Studio z komputera dewelopera na serwerze. W Eksplorator rozwiązań kliknij rozwiązanie prawym przyciskiem myszy i kliknij polecenie Publikuj.

Aby uzyskać bardziej szczegółową dokumentację dotyczącą wdrażania w Internecie, zobacz Web Deployment Content Map for Visual Studio and ASP.NET (Mapa zawartości wdrażania w Internecie dla programu Visual Studio i ASP.NET).

W przypadku wdrożenia aplikacji na dwóch serwerach można otworzyć każde wystąpienie w osobnym oknie przeglądarki i zobaczyć, że każdy z nich odbiera komunikaty usługi SignalR od drugiego. (Oczywiście w środowisku produkcyjnym dwa serwery znajdują się za modułem równoważenia obciążenia).

Zrzut ekranu przedstawiający komunikaty Signal R wyświetlane w przeglądarce internetowej programu Internet Explorer z wyświetlonym ekranem Indeks.

Jeśli chcesz zobaczyć komunikaty wysyłane do usługi Redis, możesz użyć klienta redis-cli , który jest instalowany z usługą Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Zrzut ekranu przedstawiający ekran danych wyjściowych użytkownika platformy Azure, na którym są wyświetlane informacje dotyczące wszystkich wysłanych komunikatów i dołączonego kodu.