Share via


Prestatierichtlijnen voor Azure SignalR Service

Een van de belangrijkste voordelen van het gebruik van Azure SignalR Service is het gemak van het schalen van SignalR-toepassingen. In een grootschalig scenario is de prestaties een belangrijke factor.

In dit artikel wordt het volgende beschreven:

  • De factoren die van invloed zijn op de prestaties van SignalR-toepassingen.
  • De typische prestaties in verschillende use-casescenario's.
  • De omgeving en hulpprogramma's die u kunt gebruiken om een prestatierapport te genereren.

Snelle evaluatie met metrische gegevens

U kunt uw service eenvoudig bewaken in Azure Portal. Op de pagina Metrische gegevens van uw SignalR-exemplaar kunt u de metrische gegevens voor serverbelasting selecteren om de 'druk' van uw service te zien.

Screenshot of the Server Load metric of Azure SignalR on Portal. The metrics shows Server Load is at about 8 percent usage.

In de grafiek ziet u de rekendruk van uw SignalR-service. U kunt uw scenario testen en deze metrische waarde controleren om te bepalen of u omhoog wilt schalen. De latentie binnen SignalR-service blijft laag als de serverbelasting lager is dan 70%.

Notitie

Als u eenheid 50 of groter gebruikt en uw scenario voornamelijk wordt verzonden naar kleine groepen (groepsgrootte <20) of één verbinding, moet u het verzenden naar een kleine groep controleren of naar een verbinding wordt verzonden ter referentie. In deze scenario's zijn er grote routeringskosten die niet zijn opgenomen in de serverbelasting.

Termendefinities

Binnenkomend: het binnenkomende bericht naar Azure SignalR Service.

Uitgaand: het uitgaande bericht van Azure SignalR Service.

Bandbreedte: de totale grootte van alle berichten in 1 seconde.

Standaardmodus: de standaardwerkmodus wanneer een Azure SignalR Service-exemplaar wordt gemaakt. Azure SignalR Service verwacht dat de app-server een verbinding tot stand brengt voordat er een clientverbinding wordt geaccepteerd.

Serverloze modus: een modus waarin Azure SignalR Service alleen clientverbindingen accepteert. Er is geen serververbinding toegestaan.

Overzicht

Azure SignalR Service definieert zeven Standard-lagen voor verschillende prestatiecapaciteiten. In deze handleiding worden de volgende vragen beantwoord:

  • Wat zijn de typische prestaties van de Azure SignalR-service voor elke laag (eenheid)?

  • Voldoet Azure SignalR Service aan mijn vereisten voor berichtdoorvoer (bijvoorbeeld 100.000 berichten per seconde verzenden)?

  • Hoe kan ik voor mijn specifieke scenario de juiste laag selecteren?

  • Wat voor soort app-server (VM-grootte) is geschikt voor mij? Hoeveel daarvan moet ik implementeren?

Om deze vragen te beantwoorden, geeft deze handleiding eerst een uitleg op hoog niveau van de factoren die van invloed zijn op de prestaties. Vervolgens ziet u de maximale inkomende en uitgaande berichten voor elke laag voor typische gebruiksvoorbeelden: echo, uitzending, verzenden naar groep en verzenden naar verbinding (peer-to-peer-chatten).

Deze handleiding kan niet alle scenario's behandelen (en verschillende use cases, berichtgrootten, bericht verzendende patronen, enzovoort). Maar het biedt enkele methoden om u te helpen:

  • Evalueer uw geschatte vereiste voor de inkomende of uitgaande berichten.
  • Zoek de juiste lagen door de prestatietabel te controleren.

Inzicht in prestaties

In deze sectie worden de methodologieën voor prestatieevaluatie beschreven en worden vervolgens alle factoren vermeld die van invloed zijn op de prestaties. Uiteindelijk biedt het methoden om u te helpen prestatievereisten te evalueren.

Methodologie

Doorvoer en latentie zijn twee typische aspecten van prestatiecontrole. Voor Azure SignalR Service heeft elke SKU-laag een eigen doorvoerbeperkingsbeleid. Het beleid definieert de maximaal toegestane doorvoer (binnenkomende en uitgaande bandbreedte) als de maximale bereikte doorvoer wanneer 99 procent van de berichten latentie heeft die kleiner is dan 1 seconde.

Latentie is de tijdsduur van de verbinding die het bericht verzendt naar het ontvangen van het antwoordbericht van Azure SignalR Service. Neem echo als voorbeeld. Elke clientverbinding voegt een tijdstempel toe aan het bericht. De hub van de app-server verzendt het oorspronkelijke bericht terug naar de client. De doorgiftevertraging wordt dus eenvoudig berekend door elke clientverbinding. Het tijdstempel wordt toegevoegd voor elk bericht in uitzending, verzenden naar groep en verzenden naar verbinding.

Als u duizenden gelijktijdige clientverbindingen wilt simuleren, worden er meerdere VM's gemaakt in een virtueel particulier netwerk in Azure. Al deze VM's maken verbinding met hetzelfde Exemplaar van Azure SignalR Service.

In de standaardmodus van Azure SignalR Service worden app-server-VM's geïmplementeerd in hetzelfde virtuele particuliere netwerk als client-VM's. Alle client-VM's en app-server-VM's worden geïmplementeerd in hetzelfde netwerk van dezelfde regio om latentie tussen regio's te voorkomen.

Prestatiefactoren

De volgende factoren zijn van invloed op de prestaties van SignalR.

  • SKU-laag (CPU/geheugen)
  • Aantal verbindingen
  • Berichtgrootte
  • Verzendsnelheid van bericht
  • Transporttype (WebSocket, Server-Sent-Event of Long-Polling)
  • Use-casescenario (routeringskosten)
  • App-server- en serviceverbindingen (in servermodus)

Computerbronnen

Theoretisch wordt azure SignalR Service-capaciteit beperkt door rekenresources: CPU, geheugen en netwerk. Meer verbindingen met Azure SignalR Service zorgen er bijvoorbeeld voor dat de service meer geheugen gebruikt. Voor groter berichtverkeer (bijvoorbeeld dat elk bericht groter is dan 2048 bytes), moet Azure SignalR Service meer CPU-cycli uitgeven om verkeer te verwerken. Ondertussen legt Azure-netwerkbandbreedte ook een limiet op voor maximaal verkeer.

Transporttype

Het transporttype is een andere factor die van invloed is op de prestaties. De drie typen zijn:

Voor dezelfde API onder dezelfde omstandigheden heeft WebSocket de beste prestaties, Server-Sent-Event langzamer en is Long-Polling de traagste. Azure SignalR Service raadt WebSocket standaard aan.

Kosten voor berichtroutering

De kosten voor berichtroutering beperkt ook de prestaties. Azure SignalR Service speelt een rol als een berichtrouter, waarmee het bericht wordt gerouteerd van een set clients of servers naar andere clients of servers. Voor een ander scenario of EEN ANDERE API is een ander routeringsbeleid vereist.

Voor echo verzendt de client een bericht naar zichzelf en is de routeringsbestemming ook zelf. Dit patroon heeft de laagste routeringskosten. Maar voor uitzending, verzenden naar groep en verzenden naar verbinding moet Azure SignalR Service de doelverbindingen opzoeken via de interne gedistribueerde gegevensstructuur. Deze extra verwerking maakt gebruik van meer CPU, geheugen en netwerkbandbreedte. Hierdoor zijn de prestaties langzamer.

In de standaardmodus kan de app-server ook een knelpunt worden voor bepaalde scenario's. De Azure SignalR SDK moet de hub aanroepen, terwijl er een liveverbinding met elke client wordt onderhouden via heartbeatsignalen.

In de serverloze modus verzendt de client een bericht per HTTP-bericht, wat niet zo efficiënt is als WebSocket.

Protocol

Een andere factor is protocol: JSON en MessagePack. MessagePack is kleiner en sneller geleverd dan JSON. MessagePack verbetert mogelijk de prestaties echter niet. De prestaties van Azure SignalR Service zijn niet gevoelig voor protocollen omdat de nettolading van het bericht niet wordt gedecodeerd tijdens het doorsturen van berichten van clients naar servers of omgekeerd.

Een juiste SKU zoeken

Hoe kunt u de binnenkomende/uitgaande capaciteit evalueren of bepalen welke laag geschikt is voor een specifieke use-case?

Stel dat de app-server krachtig genoeg is en niet het prestatieknelpunt is. Controleer vervolgens de maximale binnenkomende en uitgaande bandbreedte voor elke laag.

Snelle evaluatie

Voor een snelle evaluatie gaat u uit van de volgende standaardinstellingen:

  • Het transporttype is WebSocket.
  • De berichtgrootte is 2048 bytes.
  • Er wordt elke 1 seconde een bericht verzonden.
  • Azure SignalR Service bevindt zich in de standaardmodus.

Elke laag heeft een eigen maximale binnenkomende bandbreedte en uitgaande bandbreedte. Een soepele gebruikerservaring wordt niet gegarandeerd nadat de binnenkomende of uitgaande verbinding de limiet overschrijdt.

Echo geeft de maximale binnenkomende bandbreedte omdat deze de laagste routeringskosten heeft. Broadcast definieert de maximale bandbreedte voor uitgaande berichten.

De gemarkeerde waarden in de volgende twee tabellen niet overschrijden.

Echo Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Binnenkomende bandbreedte 2 MBps 4 MBps 20 MBps 100 MBps 200 MBps 400 MBps 1000 MBps 2000 MBps
Uitgaande bandbreedte 2 Mbps 4 Mbps 20 MBps 100 MBps 200 MBps 400 MBps 1000 MBps 2000 MBps
Uitzenden Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Binnenkomende bandbreedte 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps
Uitgaande bandbreedte 4 MBps 8 MBps 40 MBps 200 MBps 400 MBps 800 MBps 2000 MBps 4.000 MBps

Binnenkomende bandbreedte en uitgaande bandbreedte zijn de totale berichtgrootte per seconde. Dit zijn de formules voor deze formules:

  inboundBandwidth = inboundConnections * messageSize / sendInterval
  outboundBandwidth = outboundConnections * messageSize / sendInterval
  • inkomende Verbinding maken ions: het aantal verbindingen dat het bericht verzendt.

  • uitgaande Verbinding maken ions: het aantal verbindingen dat het bericht ontvangt.

  • messageSize: De grootte van één bericht (gemiddelde waarde). Een klein bericht dat kleiner is dan 1024 bytes, heeft een invloed op de prestaties die vergelijkbaar is met een bericht van 1024 bytes.

  • sendInterval: het tijdstip waarop één bericht wordt verzonden. Meestal is het 1 seconde per bericht, wat betekent dat er elke seconde één bericht wordt verzonden. Een kleiner interval betekent dat er meer berichten in een bepaalde periode worden verzonden. 0,5 seconde per bericht betekent bijvoorbeeld dat er elke seconde twee berichten worden verzonden.

  • Verbinding maken ions: de vastgelegde maximumdrempel voor Azure SignalR Service voor elke laag. Als het verbindingsnummer verder wordt verhoogd, heeft dit last van verbindingsbeperking.

Notitie

U moet omhoog schalen naar SKU-Premium_P2 om een eenheidsgrootte van meer dan 100 te hebben.

Evaluatie voor complexe use cases

Grotere berichtgrootte of een andere verzendsnelheid

De echte use case is ingewikkelder. Het kan een bericht verzenden dat groter is dan 2048 bytes of dat de snelheid van het verzenden van berichten niet per seconde is. Laten we de uitzending van Unit 100 als voorbeeld nemen om te ontdekken hoe de prestaties ervan kunnen worden geëvalueerd.

In de volgende tabel ziet u een echte use-case van broadcast. Maar de berichtgrootte, het aantal verbindingen en de verzendsnelheid van berichten verschillen van wat we in de vorige sectie hebben aangenomen. De vraag is hoe we een van deze items kunnen afleiden (berichtgrootte, aantal verbindingen of verzendsnelheid van berichten) als we er slechts twee kennen.

Uitzenden Berichtgrootte Gelijktijdige binnenkomende berichten Connecties Intervallen verzenden
1 20 KB 1 100.000 5 sec
2 256 kB 1 8,000 5 sec

De volgende formule is eenvoudig af te stellen op basis van de vorige formule:

outboundConnections = outboundBandwidth * sendInterval / messageSize

Voor eenheid 100 is de maximale uitgaande bandbreedte 400 MB uit de vorige tabel. Voor een berichtgrootte van 20 kB moet de maximale uitgaande verbindingen 400 MB * 5 /20 kB = 100.000 zijn, die overeenkomt met de werkelijke waarde.

Gemengde gebruiksvoorbeelden

De echte use case combineert doorgaans de vier basisgebruiksvoorbeelden: echo, uitzending, verzenden naar groep en verzenden naar verbinding. De methodologie die u gebruikt om de capaciteit te evalueren, is het volgende:

  1. Verdeel de gemengde use cases in vier basisgebruiksvoorbeelden.
  2. Bereken de maximale bandbreedte voor inkomend en uitgaand bericht met behulp van de voorgaande formules afzonderlijk.
  3. Som de bandbreedteberekeningen op om de totale maximale binnenkomende/uitgaande bandbreedte op te halen.

Haal vervolgens de juiste laag op uit de tabellen met maximale binnenkomende/uitgaande bandbreedte.

Notitie

Voor het verzenden van een bericht naar honderden of duizenden kleine groepen, of voor duizenden clients die een bericht naar elkaar verzenden, worden de routeringskosten dominant. Neem rekening met dit effect.

Voor het gebruik van een bericht naar clients moet u ervoor zorgen dat de app-server niet het knelpunt is. De volgende sectie 'Casestudy' bevat richtlijnen voor het aantal app-servers dat u nodig hebt en hoeveel serververbindingen u moet configureren.

Casestudy

In de volgende secties worden vier typische gebruiksvoorbeelden voor WebSocket-transport doorlopen: echo, uitzending, verzenden naar groep en verzenden naar verbinding. Voor elk scenario bevat de sectie de huidige binnenkomende en uitgaande capaciteit voor Azure SignalR Service. Ook worden de belangrijkste factoren uitgelegd die van invloed zijn op de prestaties.

In de standaardmodus maakt de app-server vijf serververbindingen met Azure SignalR Service. De app-server maakt standaard gebruik van de Azure SignalR Service SDK. In de volgende resultaten van de prestatietest worden serververbindingen verhoogd tot 15 (of meer voor het uitzenden en verzenden van een bericht naar een grote groep).

Verschillende use cases hebben verschillende vereisten voor app-servers. Broadcast heeft een klein aantal app-servers nodig. Echo of verzenden naar verbinding vereist veel app-servers.

In alle gebruiksscenario's is de standaard berichtgrootte 2048 bytes en is het verzendinterval van het bericht 1 seconde.

Standaardmodus

Clients, web-app-servers en Azure SignalR Service zijn betrokken bij de standaardmodus. Elke client staat voor één verbinding.

Echo

Eerst maakt een web-app verbinding met Azure SignalR Service. Ten tweede maken veel clients verbinding met de web-app, waarmee de clients worden omgeleid naar Azure SignalR Service met het toegangstoken en eindpunt. Vervolgens maken de clients WebSocket-verbindingen met Azure SignalR Service.

Nadat alle clients verbindingen tot stand hebben gebracht, beginnen ze elke seconde een bericht met een tijdstempel naar de specifieke hub te verzenden. De hub echot het bericht terug naar de oorspronkelijke client. Elke client berekent de latentie wanneer deze het echobericht terug ontvangt.

In het volgende diagram bevinden 5 tot en met 8 (rood gemarkeerd verkeer) zich in een lus. De lus wordt uitgevoerd voor een standaardduur (5 minuten) en haalt de statistiek van alle berichtlatentie op.

Traffic for the echo use case

Het gedrag van echo bepaalt dat de maximale binnenkomende bandbreedte gelijk is aan de maximale uitgaande bandbreedte. Zie de volgende tabel voor meer informatie.

Echo Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Inkomende/uitgaande berichten per seconde 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Binnenkomende/uitgaande bandbreedte 2 Mbps 4 Mbps 20 MBps 100 MBps 200 MBps 400 MBps 1000 MBps 2000 MBps

In dit gebruiksscenario roept elke client de hub aan die is gedefinieerd in de app-server. De hub roept alleen de methode aan die is gedefinieerd in de oorspronkelijke clientzijde. Deze hub is de meest lichtgewicht hub voor echo.

        public void Echo(IDictionary<string, object> data)
        {
            Clients.Client(Context.ConnectionId).SendAsync("RecordLatency", data);
        }

Zelfs voor deze eenvoudige hub is de verkeersdruk op de app-server prominent, omdat de belasting van het echo-inkomende bericht toeneemt. Deze verkeersdruk vereist veel app-servers voor grote SKU-lagen. De volgende tabel bevat het aantal app-servers voor elke laag.

Echo Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal app-servers 1 1 1 5 10 20 50 100

Notitie

Het clientverbindingsnummer, de berichtgrootte, de verzendsnelheid van berichten, de SKU-laag en het CPU/geheugen van de app-server zijn van invloed op de algehele prestaties van echo.

Uitzenden

Wanneer de web-app het bericht ontvangt, wordt het voor uitzending uitgezonden naar alle clients. Hoe meer clients er zijn om uit te zenden, hoe meer berichtenverkeer er is voor alle clients. Zie het volgende diagram.

Traffic for the broadcast use case

Een klein aantal clients wordt uitgezonden. De bandbreedte voor binnenkomende berichten is klein, maar de uitgaande bandbreedte is enorm. De bandbreedte voor uitgaande berichten neemt toe naarmate de clientverbinding of broadcastsnelheid toeneemt.

De volgende tabel bevat een overzicht van de maximale clientverbindingen, het aantal inkomende/uitgaande berichten en de bandbreedte.

Uitzenden Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Binnenkomende berichten per seconde 2 2 2 2 2 2 2 2
Uitgaande berichten per seconde 2.000 4000 20,000 100.000 200.000 400,000 1.000.000 2,000,000
Binnenkomende bandbreedte 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps
Uitgaande bandbreedte 4 Mbps 8 MBps 40 MBps 200 MBps 400 MBps 800 MBps 2000 MBps 4.000 MBps

De uitzendclients die berichten posten, zijn niet meer dan vier. Ze hebben minder app-servers nodig in vergelijking met echo omdat de hoeveelheid inkomende berichten klein is. Twee app-servers zijn voldoende voor zowel SLA- als prestatieoverwegingen. Maar u moet de standaardserververbindingen verhogen om onevenwichtigheid te voorkomen, met name voor eenheid groter dan 50.

Uitzenden Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal app-servers 1 1 1 2 2 4 10 20

Notitie

Verhoog de standaardserververbindingen van 5 tot 40 op elke app-server om mogelijke niet-verdeelde serververbindingen met Azure SignalR Service te voorkomen.

Het verbindingsnummer van de client, de berichtgrootte, de verzendsnelheid van berichten en de SKU-laag zijn van invloed op de algehele prestaties voor broadcast.

Verzenden naar groep

De use-case verzenden naar groep heeft een vergelijkbaar verkeerspatroon voor broadcast. Het verschil is dat nadat clients WebSocket-verbindingen met Azure SignalR Service tot stand hebben gebracht, ze moeten deelnemen aan groepen voordat ze een bericht kunnen verzenden naar een specifieke groep. In het volgende diagram ziet u de verkeersstroom.

Traffic for the send-to-group use case

Het aantal groepsleden en groepen zijn twee factoren die van invloed zijn op de prestaties. Om de analyse te vereenvoudigen, definiëren we twee soorten groepen:

  • Kleine groep: elke groep heeft 10 verbindingen. Het groepsnummer is gelijk aan (max. aantal verbindingen) / 10. Als er bijvoorbeeld 1.000 verbindingsaantallen zijn, hebben we 1000 / 10 = 100 groepen.

  • Grote groep: Het groepsnummer is altijd 10. Het aantal leden van de groep is gelijk aan (max. aantal verbindingen) / 10. Als er bijvoorbeeld 1.000 verbindingen zijn, heeft elke groep 1000 /10 = 100 leden.

Verzenden naar groep brengt routeringskosten naar Azure SignalR Service omdat deze de doelverbindingen moet vinden via een gedistribueerde gegevensstructuur. Naarmate de verzendende verbindingen toenemen, neemt de kosten toe.

Kleine groep

De routeringskosten zijn aanzienlijk voor het verzenden van berichten naar veel kleine groepen. Momenteel raakt de implementatie van de Azure SignalR-service de limiet voor routeringskosten bij eenheid 50. Het toevoegen van meer CPU en geheugen helpt niet, dus Eenheid 100 kan niet verder worden verbeterd door het ontwerp. Neem contact op met de klantondersteuning als u meer binnenkomende bandbreedte nodig hebt.

Verzenden naar kleine groep Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal groepsleden 10 10 10 10 10 10 10 10
Aantal groepen 100 200 1.000 5.000 10,000 20,000 50,000 100.000
Binnenkomende berichten per seconde 200 400 2.000 10,000 10,000 20,000 50,000 100.000
Binnenkomende bandbreedte 400 KBps 800 KBps 4 Mbps 20 MBps 20 MBps 40 MBps 100 MBps 200 MBps
Uitgaande berichten per seconde 2.000 4000 20,000 100.000 100.000 200.000 500,000 1.000.000
Uitgaande bandbreedte 4 Mbps 8 MBps 40 MBps 200 MBps 200 MBps 400 MBps 1000 MBps 2000 MBps

Veel clientverbindingen roepen de hub aan, dus het app-servernummer is ook essentieel voor prestaties. De volgende tabel bevat het aantal voorgestelde app-servers.

Verzenden naar kleine groep Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal app-servers 1 1 1 5 10 20 50 100

Notitie

Het verbindingsnummer van de client, de berichtgrootte, de verzendsnelheid van berichten, de routeringskosten, de SKU-laag en het CPU/geheugen van de app-server zijn van invloed op de algehele prestaties van verzenden naar kleine groepen.

Het aantal groepen, het aantal groepsleden dat in de tabel wordt vermeld, zijn geen vaste limieten. Deze parameterwaarden worden geselecteerd om een stabiel benchmarkscenario tot stand te brengen. Het is bijvoorbeeld OK om elke verbinding toe te wijzen aan een afzonderlijke groep. Onder deze configuratie zijn de prestaties dicht bij het verzenden naar de verbinding.

Grote groep

Voor verzenden naar een grote groep wordt de uitgaande bandbreedte het knelpunt voordat de limiet voor routeringskosten wordt bereikt. De volgende tabel bevat de maximale uitgaande bandbreedte, die bijna hetzelfde is als die voor broadcast.

Verzenden naar grote groep Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal groepsleden 100 200 500 1.000 2.000 5.000 10,000 20,000
Aantal groepen 10 10 10 10 10 10 10 10
Binnenkomende berichten per seconde 20 20 20 20 20 20 20 20
Binnenkomende bandbreedte 40 KBps 40 KBps 40 KBps 40 KBps 40 KBps 40 KBps 40 KBps 40 KBps
Uitgaande berichten per seconde 2.000 4000 20,000 100.000 200.000 400,000 1.000.000 2,000,000
Uitgaande bandbreedte 4 Mbps 8 MBps 40 MBps 200 MBps 400 MBps 800 MBps 2000 MBps 4.000 MBps

Het aantal verzonden verbindingen is niet meer dan 40. De belasting van de app-server is klein, dus het voorgestelde aantal web-apps is klein.

Verzenden naar grote groep Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal app-servers 1 1 2 2 2 4 10 20

Notitie

Verhoog de standaardserververbindingen van 5 tot 40 op elke app-server om mogelijke niet-verdeelde serververbindingen met Azure SignalR Service te voorkomen.

Het verbindingsnummer van de client, de berichtgrootte, de verzendsnelheid van berichten, de routeringskosten en de SKU-laag zijn van invloed op de algehele prestaties van verzenden naar een grote groep.

Verzenden naar verbinding

Wanneer clients de verbindingen met Azure SignalR Service tot stand brengen, wordt in het use-case verzenden naar een verbinding een speciale hub aanroepen om hun eigen verbindings-id op te halen. De prestatiebenchmark verzamelt alle verbindings-id's, plaatst ze in willekeurige volgorde en wijs ze opnieuw toe aan alle clients als een verzendend doel. De clients blijven het bericht verzenden naar de doelverbinding totdat de prestatietest is voltooid.

Traffic for the send-to-client use case

De routeringskosten voor verzenden naar verbinding zijn vergelijkbaar met de kosten voor verzenden naar kleine groepen.

Naarmate het aantal verbindingen toeneemt, worden de routeringskosten een kritieke factor voor het beperken van de algehele prestaties. In eenheid 20 wordt met name de drempelwaarde gemarkeerd waarbij de service het knelpunt van de routering raakt. Verdere toename van het aantal eenheden levert geen prestatieverbeteringen op, tenzij er een verschuiving naar Premium_P2(eenheid >=100) is, waardoor routeringsmogelijkheden worden verbeterd.

De volgende tabel is een statistische samenvatting na veel rondes van het uitvoeren van de send to connection benchmark.

Verzenden naar verbinding Eenheid 1 Eenheid 2 Eenheid 20 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 20,000 50,000 100.000 200.000 500,000 1.000.000
Inkomende/uitgaande berichten per seconde 1.000 2.000 20,000 20,000 20,000 40.000 100.000 200.000
Binnenkomende/uitgaande bandbreedte 2 Mbps 4 Mbps 40 MBps 40 MBps 40 MBps 80 MBps 200 MBps 400 MBps

Notitie

Ondanks de stagnatie in inkomende/uitgaande berichten per seconde na eenheid 20 blijft de capaciteit voor meer verbindingen toenemen. In echte bedrijfsscenario's is het vaak het aantal verbindingen, niet de gelijktijdige activiteit voor het verzenden van berichten, die het knelpunt vormen. Het is ongebruikelijk dat alle verbindingen berichten actief met hoge frequenties verzenden, zoals de benchmarktest wel doet.

Voor deze use case is een hoge belasting aan de serverzijde van de app vereist. Zie het aantal voorgestelde app-servers in de volgende tabel.

Verzenden naar verbinding Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Aantal app-servers 1 1 1 5 10 20 50 100

Notitie

Het clientverbindingsnummer, de berichtgrootte, de verzendsnelheid van berichten, de routeringskosten, de SKU-laag en het CPU/geheugen voor de app-server zijn van invloed op de algehele prestaties van verzenden naar verbinding.

ASP.NET SignalR

Azure SignalR Service biedt dezelfde prestatiecapaciteit voor ASP.NET SignalR.

Serverloze modus

Clients en Azure SignalR Service zijn betrokken bij de serverloze modus. Elke client staat voor één verbinding. De client verzendt berichten via de REST API naar een andere client of broadcastberichten naar iedereen.

Het verzenden van high-densityberichten via de REST API is niet zo efficiënt als het gebruik van WebSocket. Hiervoor moet u elke keer een nieuwe HTTP-verbinding maken en dat zijn extra kosten in de serverloze modus.

Uitzenden via REST API

Alle clients maken WebSocket-verbindingen met Azure SignalR Service. Vervolgens beginnen sommige clients te uitzenden via de REST API. Het bericht dat wordt verzonden (inkomend) is allemaal via HTTP Post, wat niet efficiënt is vergeleken met WebSocket.

Uitzenden via REST API Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Binnenkomende berichten per seconde 2 2 2 2 2 2 2 2
Uitgaande berichten per seconde 2.000 4000 20,000 100.000 200.000 400,000 1.000.000 2,000,000
Binnenkomende bandbreedte 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps 4 KBps
Uitgaande bandbreedte 4 MBps 8 MBps 40 MBps 200 MBps 400 MBps 800 MBps 2000 MBps 4.000 MBps

Verzenden naar gebruiker via REST API

De benchmark wijst gebruikersnamen toe aan alle clients voordat ze verbinding maken met Azure SignalR Service. Nadat de clients WebSocket-verbindingen met Azure SignalR Service tot stand hebben gebracht, beginnen ze berichten naar anderen te verzenden via HTTP Post.

Verzenden naar gebruiker via REST API Eenheid 1 Eenheid 2 Eenheid 10 Eenheid 50 Eenheid 100 Eenheid 200 Eenheid 500 Eenheid 1000
Connecties 1.000 2.000 10,000 50,000 100.000 200.000 500,000 1.000.000
Inkomende/uitgaande berichten per seconde 200 400 2.000 10,000 20,000 40.000 100.000 200.000
Binnenkomende/uitgaande bandbreedte 400 KBps 800 KBps 4 Mbps 20 MBps 40 MBps 80 MBps 200 MBps 400 MBps

Testomgevingen voor prestaties

Voor alle hierboven vermelde gebruiksvoorbeelden hebben we de prestatietests uitgevoerd in een Azure-omgeving. We hebben maximaal 200 client-VM's en 100 app-server-VM's gebruikt. Hier volgen enkele details:

  • Grootte van client-VM: StandardDS2V2 (2 vCPU, 7G-geheugen)

  • Vm-grootte van app-server: StandardF4sV2 (4 vCPU, 8G-geheugen)

  • Azure SignalR SDK-serververbindingen: 15

Hulpprogramma's voor prestaties

U vindt prestatiehulpprogramma's voor Azure SignalR Service op GitHub.

Volgende stappen

In dit artikel hebt u een overzicht gekregen van de prestaties van Azure SignalR Service in typische use-casescenario's.

Lees de volgende handleidingen voor meer informatie over de interne functies van de service en het schalen ervan: