Komunikaty i połączenia w usłudze Azure SignalR Service

Model rozliczeń dla usługi Azure SignalR Service jest oparty na liczbie połączeń i liczbie komunikatów wychodzących z usługi. W tym artykule wyjaśniono, w jaki sposób komunikaty i połączenia są definiowane i zliczane w celach rozliczeniowych.

Formaty komunikatów

Usługa Azure SignalR Service obsługuje te same formaty jak ASP.NET Core SignalR: JSON i MessagePack.

Rozmiar komunikatu

Następujące limity dotyczą komunikatów usługi Azure SignalR Service:

  • Komunikaty klienta:
    • W przypadku długich zdarzeń sondowania lub po stronie serwera klient nie może wysyłać komunikatów większych niż 1 MB.
    • Nie ma limitu rozmiaru dla protokołu WebSocket dla usługi.
    • Serwer aplikacji może ustawić limit rozmiaru komunikatów klienta. Wartość domyślna to 32 KB. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące zabezpieczeń w usłudze ASP.NET Core SignalR.
    • W przypadku bezserwerowych rozmiar komunikatów jest ograniczony przez implementację nadrzędną, ale zalecane jest użycie poniżej 1 MB.
  • Komunikaty serwera:

W przypadku klientów protokołu WebSocket duże komunikaty są podzielone na mniejsze komunikaty, które nie są więcej niż 2 KB i przesyłane oddzielnie. Dzielenie i składanie komunikatów jest obsługiwane przez zestawy SDK. Nie wymaga to żadnych prac deweloperskich.

Duże komunikaty negatywnie wpływają na wydajność przesyłania komunikatów. Zawsze, gdy jest to możliwe, używaj mniejszego rozmiaru komunikatu i dla każdego scenariusza przypadku użycia przetestuj, jaki jest dla niego optymalny rozmiar komunikatu.

Jak komunikaty są liczone na potrzeby rozliczeń

Komunikaty wysyłane do usługi to komunikaty przychodzące, a komunikaty wysyłane z usługi to komunikaty wychodzące. Tylko komunikaty wychodzące z usługi Azure SignalR Service są liczone do rozliczeń. Komunikaty ping między klientami a serwerami są ignorowane.

Komunikaty o rozmiarze przekraczającym 2 KB są liczone jako większa liczba komunikatów, z których każdy ma rozmiar 2 KB. Wykres liczby komunikatów w witrynie Azure Portal jest aktualizowany co 100 komunikatów dla każdego centrum.

Załóżmy na przykład, że masz jeden serwer aplikacji i trzech klientów:

  • Gdy serwer aplikacji emituje komunikat 1 KB do wszystkich połączonych klientów, komunikat z serwera aplikacji do usługi jest uznawany za bezpłatny komunikat przychodzący. Trzy komunikaty wysyłane z usługi do każdego z klientów są komunikatami wychodzącymi i są rozliczane.

  • Gdy klient A wysyła komunikat przychodzący o wartości 1 KB do klienta B bez przechodzenia przez serwer aplikacji, komunikat jest komunikatem o wolnym ruchu przychodzącym. Komunikat kierowany z usługi do klienta B jest rozliczany jako komunikat wychodzący.

  • Jeśli masz trzech klientów i jeden serwer aplikacji, gdy jeden klient wysyła komunikat 4 KB dla serwera rozgłaszanego dla wszystkich klientów, rozliczana liczba komunikatów wynosi osiem:

    • Jeden komunikat z usługi do serwera aplikacji.
    • Trzy komunikaty z usługi do klientów. Każdy komunikat jest liczony jako dwa komunikaty o rozmiarze 2 KB.

Jak liczone są połączenia

Usługa Azure SignalR Service tworzy połączenia serwera aplikacji i klienta. Domyślnie każdy serwer aplikacji zaczyna od pięciu połączeń początkowych na koncentrator, a każdy klient ma jedno połączenie klienta.

Załóżmy na przykład, że masz dwa serwery aplikacji i definiujesz pięć centrów w kodzie. Liczba połączeń serwera wynosi 50: (2 serwery aplikacji * 5 koncentratorów * 5 połączeń na koncentrator).

Liczba połączeń wyświetlana w witrynie Azure Portal obejmuje połączenia serwera, klienta, diagnostyki i śledzenia na żywo. Typy połączeń są zdefiniowane na następującej liście:

  • Połączenie serwera: Połączenie usługi Azure SignalR Service i serwera aplikacji.
  • Połączenie klienta: Połączenie usługi Azure SignalR Service i aplikacji klienckiej.
  • Połączenie diagnostyczne: specjalny typ połączenia klienta, który może utworzyć bardziej szczegółowy dziennik, co może mieć wpływ na wydajność. Ten rodzaj klienta jest przeznaczony do rozwiązywania problemów.
  • Połączenie śledzenia na żywo: Połączenie do punktu końcowego śledzenia na żywo i odbiera ślady na żywo usługi Azure SignalR Service.

Połączenie śledzenia na żywo nie jest liczone jako połączenie klienta ani jako połączenie z serwerem.

Biblioteka SignalR platformy ASP.NET inaczej oblicza liczbę połączeń serwera. Uwzględnia ona jedno centrum domyślne w dodatku do zdefiniowanych centrów. Domyślnie każdy serwer aplikacji wymaga pięciu kolejnych początkowych połączeń serwera. Początkowa liczba połączeń dla domyślnego centrum pozostaje spójna z innymi koncentratorami.

Usługa i serwer aplikacji nadal synchronizują stan połączenia i dostosowuje połączenia z serwerami, aby uzyskać lepszą wydajność i stabilność usługi. W związku z tym mogą pojawić się zmiany liczby połączeń serwera w uruchomionej usłudze.