Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Många Azure IoT Operations inställningar är fasta vid distributionen och kan bara ändras genom omdistribution. Innan du driftsätter ska du planera klustertopologin, antalet mäklare, minnesprofilen och de valfria mäklarinställningar du behöver. Den här artikeln sammanfattar de beslut du bör fatta.
Förstå arkitekturen
Azure IoT Operations är en uppsättning modulära Kubernetes-interna tjänster som distribueras till ett Azure Arc-aktiverat kluster. Viktiga komponenter är:
| Component | Purpose |
|---|---|
| MQTT-broker | Högpresterande MQTT 3.1.1- och 5-broker för meddelandehantering vid nätverkskanten |
| Koppling för OPC UA | Samlar in data från OPC UA-servrar och publicerar till MQTT |
| Dataflöden | Dirigerar, transformerar och skickar vidare data till slutpunkter i molnet |
| Azure enhetsregister | Molnbaserat register för enheter, tillgångar och scheman |
| Akri-tjänster | Enhetsupptäckt och protokolladaptrar |
| Statuslagring | Beständighetslager för nyckelvärde i MQTT-koordinatorn |
Två termer används i hela dokumentationen:
- Distribution – instansen, Arc-tillägg, anpassade platser och alla konfigurerbara resurser (tillgångar, enheter, dataflöden).
- Instans – den överordnade resurs som paketar tjänsterna.
Välj din klustertopologi
Innan du distribuerar ska du bestämma om du behöver ett kluster med en nod eller flera noder. Det här beslutet avgör maskinvarukraven och brokerns kardinalitetsinställningar.
| Topology | Användningsfall | Minsta maskinvara |
|---|---|---|
| Ennod | Mindre distributioner där hög tillgänglighet inte krävs | 4 vCPU:er, 16 GB RAM-minne, 30 GB lagringsutrymme |
| Flernoder (3–5 noder) | Krav på hög tillgänglighet och högre dataflöde | 8 vCPU, 32 GB RAM per nod |
Important
Kardinalitet anges endast vid distributionstidpunkten. En ny distribution krävs om kardinalitetsinställningarna behöver ändras.
Förstå brokerkardinalitet
Kardinalitet är antalet frontend-repliker, frontend-worker-noder, backend-partitioner och backend-worker-noder i driftsättningen av brokern. Kardinalitet styr hur mäklaren skalar horisontellt och hur motståndskraftig den är mot podd- eller nodfel.
MQTT-koordinatorn har en arkitektur på två nivåer: klientdelspoddar hanterar klientanslutningar och protokollbearbetning, medan serverdelspoddar hanterar lagring och leverans av meddelanden. Att förstå hur varje nivå skalar är viktigt för kapacitetsplanering.
Frontend
Klientdelspoddar accepterar MQTT-klientanslutningar och vidarebefordrar meddelanden till serverdelen. Frontend-poddar lagrar inte meddelanden själva. Det finns två huvudinställningar för frontendskiktet:
- Replikor: Antalet frontend-poddar som ska distribueras. Om du lägger till fler repliker av frontend ökar antalet samtidiga klientanslutningar som mäklaren kan hantera och ger hög tillgänglighet om en av frontend-poddarna slutar fungera.
- Arbetare: Antalet logiska arbetare per klientdelspodd. Genom att lägga till fler arbetare kan klientdelspodden använda fler CPU-kärnor. Varje arbetare kan använda upp till en processorkärna.
Serverdelskedja
Backend-poddar hanterar lagring och leverans av meddelanden. Det finns tre huvudinställningar för backendnivån:
- Partitioner: Antalet partitioner som ska distribueras. Partitioner är den vågräta skalningsenheten för meddelandedataflöde. Genom en process som kallas horisontell partitionering hanterar varje partition en del av meddelandena, fragmenterade efter ämne och session. Frontend-poddarna distribuerar meddelandetrafik över partitionerna. Att lägga till fler partitioner ökar den totala meddelandegenomströmning som meddelandeförmedlaren kan hantera.
- Redundansfaktor: Antalet backend-poddar som ska distribueras per partition. Genom att öka redundansfaktorn ökar antalet datakopior, vilket ger motståndskraft mot nodfel i klustret.
- Arbetare: Antalet arbetare per serverdelspodd. Worker-processer är enheten för vertikal skalning inom en partition – om man lägger till fler worker-processer kan backend-podden använda fler processorkärnor på samma nod. Varje arbetare kan använda upp till två CPU-kärnor, så var försiktig när du ökar antalet arbetare per replik till att inte överskrida antalet CPU-kärnor i klustret.
Note
Hur effektiv partitionsskalningen är beror på hur jämnt ämnesutrymmet är fördelat över partitioner. En mycket skev distribution kan skapa hotspots på en enda partition.
Important
Backend-redundansfaktorn måste vara 2 eller högre. Mäklaren kräver minst två backend-repliker per partition för hög tillgänglighet och stöd för rullande uppdateringar.
Uppskattning av dataflöde
Prestandan för en enskild partition beror mycket på cpu-egenskaperna för den nod som den körs på. Som tumregel kan du förvänta dig ungefär 5 000 till 6 000 QoS 1-meddelanden per sekund per partition med 8 KB nyttolaster på en 2-GHz CPU (~4 GHz turbo). Verkliga prestanda beror på många faktorer, så använd bara det här talet som utgångspunkt för kapacitetsplanering.
Detaljerade prestandadata finns i Prestandamätning för MQTT Broker.
Rekommendationer för en nod
- Frontendrepliker: Ställ in på 1.
- Klientarbetare: Ange hälften av antalet CPU-kärnor per nod.
- Backend-repliker (redundansfaktor): Ange minst 2 så att brokern kan utföra rullande uppdateringar.
Exempel: enskild nod, 4 CPU-kärnor
| Inställning för frontend | Value | Backend-inställning | Value |
|---|---|---|---|
| Replicas | 1 | Redundansfaktor | 2 |
| Arbetare | 2 | Arbetare | 1 |
| Partitions | 1 |
Rekommendationer för flera noder
Följande värden rekommenderas för optimal prestanda. För stora kluster med låg trafik kan dessa värden anges lägre än rekommendationerna utan att orsaka problem. Fler överväganden som minne (RAM) och prestandaegenskaper beskrivs i följande avsnitt. Testa alltid konfigurationen med den förväntade arbetsbelastningen för att bekräfta prestanda.
- Frontendrepliker: Ange samma värde som antalet noder i klustret.
- Klientarbetare: Ange hälften av antalet CPU-kärnor per nod.
- Backend-repliker (redundansfaktor): Ange till 2 för redundans och löpande uppdateringsstöd.
- Serverdelspartitioner: Ställ in lika med antalet noder i klustret.
- Backend-arbetare: Ange hälften av antalet CPU-kärnor per nod.
Exempel: 3-nodskluster, 8 CPU-kärnor per nod
| Inställning för frontend | Value | Backend-inställning | Value |
|---|---|---|---|
| Replicas | 3 | Redundansfaktor | 2 |
| Arbetare | 4 | Arbetare | 4 |
| Partitions | 3 |
Exempel: 5-nodskluster, 16 CPU-kärnor per nod
| Inställning för frontend | Value | Backend-inställning | Value |
|---|---|---|---|
| Replicas | 5 | Redundansfaktor | 2 |
| Arbetare | 8 | Arbetare | 8 |
| Partitions | 5 |
Important
Det totala antalet klientdels- och serverdelsarbetare per nod bör inte överstiga det antal processorkärnor som är tillgängliga på den noden. Att tilldela fler arbetstrådar än det finns tillgängliga kärnor kan orsaka konkurrens om CPU-resurser och försämra prestandan.
Gränser för CPU-resurser
För att förhindra resurssvält i klustret kan koordinatorn konfigureras för att begära Kubernetes CPU-resursgränser baserat på kardinalitetsinställningarna. När det här är aktiverat ökar proportionell skalning av antalet repliker eller arbetare de processorresurser som krävs.
Important
Standardvärdet för generateResourceLimits.cpu beror på distributionsmetoden:
-
Azure CLI (
az iot ops create):Disabledsom standard för att undvika distributionsfel på resursbegränsade kluster, till exempel kluster med en nod där CPU-begäranden kan överskrida tillgängliga resurser. -
REST API, Bicep och ARM-mallar:
Enabledsom standard. Om du distribuerar med dessa metoder utan att uttryckligen angegenerateResourceLimits.cputillämpas cpu-resursgränser automatiskt.
Om du aktiverar cpu-resursgränser kontrollerar du att klustret har tillräckligt med CPU-resurser för att uppfylla koordinatorns begäranden baserat på kardinalitetskonfigurationen.
Standardvärdet för REST API, Bicep och ARM-mallar definieras i API-specifikationen Broker.
MQTT-koordinatorn begär CPU-resurser per podd baserat på antalet konfigurerade arbetare:
- Klientdelspoddar: 1,0 CPU per arbetare
- Serverdelspoddar: 2,0 CPU per arbetare
Använd följande formler för att beräkna de totala CPU-kraven:
| Component | Formula |
|---|---|
| Första linjens CPU |
replicas × frontend.workers × 1,0 CPU |
| Serverdels-CPU |
partitions × redundancyFactor × backend.workers × 2,0 CPU |
| Total CPU för mäklare | Frontend-CPU + backend-CPU |
Caution
Mäklaren är inte den enda komponenten som använder CPU i klustret. Andra Azure IoT Operations komponenter (till exempel dataflödesmotorn, OPC UA-anslutningsappen och systempoddar) reserverar också PROCESSORresurser, vanligtvis 200–300 m totalt. När du planerar klusterkapacitet måste du ta hänsyn till den här kostnaden utöver processorkökraven för mäklaren. Om den totala CPU som begärs av alla poddar överskrider den tillgängliga CPU:n i klustret fastnar mäklarepoddar i ett Pending tillstånd.
Exempel: litet kluster
Överväg ett 2-nodskluster med 4 CPU-kärnor per nod (totalt 8 kärnor) med följande kardinalitet:
{
"cardinality": {
"frontend": {
"replicas": 2,
"workers": 2
},
"backendChain": {
"partitions": 1,
"redundancyFactor": 2,
"workers": 1
}
}
}
Mäklaren begär:
- Klientdels-CPU: 2 repliker × 2 arbetare × 1,0 = 4,0 CPU
- Bakgrunds-CPU: 1 partition x 2 RF x 1 worker x 2,0 = 4,0 CPU
- Total CPU för broker: 8.0 CPU
Den här konfigurationen begär 8,0 CPU på ett kluster med endast 8 kärnor, vilket inte lämnar något för andra Azure IoT Operations komponenter (200–300 m) eller för Kubernetes-systempoddar. Broker-poddarna förblir i tillståndet Pending med felen Insufficient cpu.
Lös problemet genom att antingen lägga till fler noder, öka kärnor per nod eller minska mäklarkardinaliteten.
Exempel: större distribution
Följande kardinalitetsförfrågningar kräver betydligt mer CPU-resurser:
{
"cardinality": {
"frontend": {
"replicas": 3,
"workers": 2
},
"backendChain": {
"partitions": 3,
"redundancyFactor": 2,
"workers": 2
}
}
}
- Frontend-CPU: 3 repliker × 2 processer × 1,0 = 6,0 CPU
- Serverdels-CPU: 3 partitioner × 2 RF-× 2 arbetare × 2,0 = 24,0 CPU
- Total broker-CPU: 30,0 CPU
Ett kluster behöver minst 30 processorkärnor tillgängliga enbart för koordinatorpoddar, plus utrymme för andra Azure IoT Operations komponenter och Kubernetes-systempoddar.
Konfiguration av cpu-resursgräns
Cpu-resursgränser styrs av fältet generateResourceLimits.cpu i broker-resursen. Den här konfigurationen stöds endast med hjälp av flaggan --broker-config-file när du distribuerar Azure IoT Operations med hjälp av kommandot az iot ops create. Mer information finns i Azure CLI-stöd för avancerad MQTT-koordinatorkonfiguration.
Förbered en Broker-konfigurationsfil genom att följa API-referensen GenerateResourceLimits . Följande exempel visar de två möjliga värdena:
{
"generateResourceLimits": {
"cpu": "Enabled"
}
}
Eller
{
"generateResourceLimits": {
"cpu": "Disabled"
}
}
Välj din minnesprofil
Minnesprofilen styr den maximala storleken på MQTT-meddelanden som brokern accepterar, minnesanvändning vid inaktivitet och maximal minnesanvändning för varje pod. Bestäm rätt minnesprofil före distribution baserat på dina förväntade meddelandestorlekar och dataflöde.
| Minnesprofil | Maximal meddelandestorlek | Inaktivt front-end-minne (per pod) | Maximalt frontend-minne per pod | Inaktivt minne i bakänden (per pod) | Maximalt backend-minne (per pod) | Användningsfall |
|---|---|---|---|---|---|---|
| Liten | 4 MB | ~29 MiB | ~99 MiB | ~41 MiB | ~102 MiB | Låg trafik, endast små paket |
| Låg nivå | 16 MB | ~33 MiB | ~387 MiB | ~66 MiB | ~390 MiB | Begränsat minne, små paket |
| Medel (standard) | 64 MB | ~169 MiB | ~1,9 GiB | ~211 MiB | ~1,5 GiB | Måttlig trafik och meddelandestorlekar |
| Hög | 256 MB | ~4,9 GiB | ~4,9 GiB | ~5,8 GiB | ~5,8 GiB | Högt dataflöde, stora meddelanden |
Note
Minnesvärdena i tabellen anges per pod. Alla arbetare i en podd delar samma minnesallokering – om du lägger till fler arbetare ökar inte poddens minnesgräns.
Varning
Mäklaren avvisar meddelanden när minnesanvändningen når 75 % av kapaciteten. Välj en profil med tillräckligt med utrymme för dina förväntade meddelandestorlekar och dataflöde.
Inkommande buffert och ryggtryck
Varje minnesprofil definierar en maximal inkommande buffertstorlek för PUBLISH-data per backend worker. När bufferten når 75 % av sin kapacitet aktiverar mäklaren backpressure-mekanismer och börjar avvisa inkommande meddelanden. Avvisade paket får ett PUBACK-svar med felkoden Kvoten har överskridits.
I följande tabell visas de inkommande buffertstorlekarna per arbetare för varje profil:
| Minnesprofil | Maximal inkommande buffert (per arbetare) | Effektiv buffert (vid 75% ryggtryck) |
|---|---|---|
| Liten | ~16 MiB | ~12 MiB |
| Låg nivå | ~64 MiB | ~48 MiB |
| Medium | ~576 MiB | ~432 MiB |
| Hög | ~2 GiB | ~1,5 GiB |
När du väljer en minnesprofil bör du tänka på:
- Tiny: Endast en frontend bör användas. Skicka endast paket som är mindre än 4 MiB.
- Låg: Endast en eller två frontender bör användas. Skicka endast paket som är mindre än 16 MiB.
- Medel: Lämplig för de flesta produktionsarbetsbelastningar med måttliga meddelandestorlekar.
- Hög: Använd när du behöver hantera stora meddelanden eller högt dataflöde med stora buffertar.
Det totala brokerminnet beror på både minnesprofilen och kardinalitet (antal frontend-repliker, backend-partitioner och redundansfaktor). Fler poddar innebär mer totalt minne. För uppmätt baslinjeresursförbrukning mellan olika konfigurationer, se Baslinjeresursprofiler.
Beräkna total minnesanvändning
Du kan beräkna den totala minnesanvändningen med den här formeln:
M_total = (R_fe × M_fe) + (P_be × RF_be × M_be × W_be)
Where:
| Variable | Description |
|---|---|
| M_total | Total minnesanvändning |
| R_fe | Antalet frontend-repliker |
| M_fe | Minnesanvändningen för varje frontendreplika |
| P_be | Antalet serverdelspartitioner |
| RF_be | Redundansfaktor för serverdel |
| M_be | Minnesanvändningen för varje backendreplica |
| W_be | Antalet arbetstagare per backend-replika |
Om du till exempel väljer medieminnesprofilen har profilen en klientdelsminnesanvändning på 1,9 GiB och en minnesanvändning för serverdelen på 1,5 GiB. Anta att mäklarkonfigurationen är 2 frontend-repliker, 2 backend-partitioner och en redundansfaktor för backend på 2. Den totala minnesanvändningen är:
M_total = (2 × 1.9 GiB) + (2 × 2 × 1.5 GiB × 2)
= 15.8 GiB
Som jämförelse har Tiny-minnesprofilen en minnesanvändning på klientdelen på 99 MiB och en minnesanvändning för serverdelen på 102 MiB. Med samma brokerkonfiguration är den totala minnesanvändningen:
M_total = (2 × 99 MiB) + (2 × 2 × 102 MiB × 2)
= 198 MiB + 816 MiB
= 1014 MiB (≈ 1.0 GiB)
Konfiguration av minnesprofil
När du distribuerar IoT-åtgärder med hjälp az iot ops create av kommandot anger parametern --broker-mem-profile minnesprofilinställningarna.
Följande kommando anger till exempel minnesprofilen till Tiny (andra parametrar utelämnas för korthet):
az iot ops create ... --broker-mem-profile Tiny
Mer information finns i az iot ops create valfria parametrar.
Valfria inställningar för mäklare
Följande brokerinställningar konfigureras också vid driftsättning och kan inte ändras i efterhand. Granska dessa om de gäller för ditt scenario:
- Diskstödd meddelandebuffert – Buffertmeddelanden till disk när prenumerantköer överskrider tillgängligt minne. Användbart för beständiga sessioner och anslutningsutmaningar.
- Persistens — Skriv kritiska brokerdata till disk för att bevara dem mellan omstarter.
- Diagnostik — Konfigurera mätvärden, loggar och självtestprober för MQTT-brokern.
- Avancerade MQTT-alternativ – Anpassa sessionsförfallodatum, meddelandeförfallodatum, kögränser för prenumeranter och inställningar för att hålla vid liv.
- Kryptering av intern trafik — Konfigurera kryptering av intern trafik mellan brokerns frontend- och backend-poddar (aktiverat som standard).