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:
- Nie ma żadnego limitu rozmiaru komunikatów serwera, ale zalecane jest użycie poniżej 16 MB.
- 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.
- Bezserwerowe:
- Interfejs API REST: 1 MB treści komunikatu, 16 KB dla nagłówków.
- Nie ma limitu dla protokołu WebSocket, persis zestawu SDK zarządzania tryb namiotu ale zalecane jest użycie poniżej 16 MB.
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.
Gdy jeden klient wysyła komunikat 4 KB dla serwera rozgłaszanego na wszystkich klientach, a na jednym serwerze aplikacji jest trzech klientów i jeden serwer aplikacji, 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: łączy usługę Azure SignalR Service i serwer aplikacji.
- Połączenie klienta: łączy usługę Azure SignalR Service i aplikację kliencą.
- 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: łączy się z punktem końcowym ś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.