Share via


Szabályozási problémák kezelése (429 – "Túl sok kérés" hiba) az Azure Logic Appsben

A következőkre vonatkozik: Azure Logic Apps (Használat + Standard)

Ha a logikai alkalmazás munkafolyamata szabályozást tapasztal, amely akkor fordul elő, ha a kérések száma meghaladja azt a sebességet, amelyet a cél egy adott idő alatt képes kezelni, a "HTTP 429 Túl sok kérés" hibaüzenet jelenik meg. A szabályozás problémákat okozhat, például késleltetett adatfeldolgozást, csökkentett teljesítménysebességet és olyan hibákat, mint a megadott újrapróbálkozási szabályzat túllépése.

A használatalapú munkafolyamatban az alábbi SQL Server művelet például egy 429-es hibát jelez, amely szabályozási problémát jelez:

Képernyőkép egy 429-et tartalmazó SQL Server művelettel rendelkező Használat munkafolyamatról.

A következő szakaszok ismertetik azokat a gyakori szinteket, amelyeken a munkafolyamat szabályozást tapasztalhat:

Logikai alkalmazás erőforrás-szabályozása

Az Azure Logic Apps saját átviteli sebességkorlátokkal rendelkezik. Ha a logikaialkalmazás-erőforrás túllépi ezeket a korlátokat, a logikai alkalmazás erőforrása szabályozva lesz, nem csak egy adott munkafolyamat-példány vagy futtatás.

A szabályozási események ezen a szinten való megkereséséhez kövesse az alábbi lépéseket:

  1. A Azure Portal nyissa meg a logikai alkalmazás erőforrását.

  2. A logikai alkalmazás erőforrásmenüjének Figyelés területén válassza a Metrikák lehetőséget.

  3. A Diagram címe területen válassza a Metrika hozzáadása lehetőséget, amely újabb metrikasávot ad hozzá a diagramhoz.

  4. Az első metrikasáv Metrika listájában válassza a Művelet szabályozott események lehetőséget. Az Összesítés listában válassza a Darabszám lehetőséget.

  5. A második metrikasáv Metrika listájában válassza a Szabályozott események aktiválása lehetőséget. Az Összesítés listában válassza a Darabszám lehetőséget.

A diagramon mostantól a logikai alkalmazás munkafolyamatában lévő műveletek és eseményindítók szabályozott eseményei is láthatók. További információ: A munkafolyamat állapotának és teljesítményének metrikáinak megtekintése az Azure Logic Appsben.

Ha ezen a szinten szeretné kezelni a szabályozást, a következő lehetőségek közül választhat:

  • Korlátozza az egyidejűleg futtatható munkafolyamat-példányok számát.

    Alapértelmezés szerint, ha a munkafolyamat triggerfeltétele egyszerre többször is teljesül, akkor az eseményindító több példánya aktiválódik, és párhuzamosan vagy párhuzamosan fut. Minden eseményindító-példány aktiválódik, mielőtt az előző munkafolyamat-példány fut.

    Bár az egyidejűleg futtatható eseményindító-példányok alapértelmezett száma korlátlan, ezt a számot korlátozhatja az eseményindító egyidejűségi beállításának bekapcsolásával, és szükség esetén az alapértelmezett értéken kívül más korlátot is választhat.

  • Engedélyezze a nagy átviteli sebességű módot.

  • Tiltsa le a tömbök zárolását vagy a "Felosztás" viselkedést az eseményindítókban.

    Ha egy eseményindító egy tömböt ad vissza a hátralévő munkafolyamat-műveletek feldolgozásához, az eseményindító Felosztása beállítása felosztja a tömbelemeket, és elindít egy munkafolyamat-példányt minden tömbelemhez. Ez a viselkedés hatékonyan aktivál több egyidejű futtatás esetén a felosztási korlátig.

    A szabályozás szabályozásához kapcsolja ki az eseményindító Felosztása viselkedését, és kérje meg a munkafolyamatot, hogy egyetlen hívással dolgozza fel a teljes tömböt, és ne egyetlen elemet kezeljen hívásonként.

  • Műveletek újrabontása több, kisebb munkafolyamatba.

    Ahogy korábban említettük, a használatalapú logikai alkalmazás munkafolyamata az alapértelmezett számú műveletre korlátozódik, amelyek 5 perces időtartamon keresztül futtathatók. Bár a magas átviteli sebesség engedélyezésével növelheti ezt a korlátot, megfontolhatja azt is, hogy kisebb munkafolyamatokra szeretné-e bontani a munkafolyamat műveleteit, hogy az egyes munkafolyamatokban futó műveletek száma a korlát alatt maradjon. Így csökkentheti egyetlen munkafolyamat terheit, és elosztja a terhelést több munkafolyamat között. Ez a megoldás jobban működik olyan műveleteknél, amelyek nagy adathalmazokat kezelnek, vagy olyan sok egyidejűleg futó műveletet, ciklus-iterációt vagy műveletet hajtanak végre az egyes ciklus-iterációkban, amelyek túllépik a műveletvégrehajtási korlátot.

    Az alábbi Használat munkafolyamat például elvégzi az összes olyan munkát, amely egy SQL Server-adatbázis tábláinak lekéréséhez és az egyes táblák sorainak lekéréséhez szükséges. Az Egyes hurkok esetében egyidejűleg végighalad az egyes táblákon, így a Sorok lekérése művelet az egyes táblák sorait adja vissza. A táblákban szereplő adatok mennyisége alapján ezek a műveletek meghaladhatják a műveletvégrehajtások korlátját.

    Képernyőkép a használatalapú munkafolyamat

    Az újrabontás után az eredeti munkafolyamat fel lesz osztva egy szülő- és egy gyermek-munkafolyamatra.

    A következő szülő munkafolyamat lekéri a táblákat SQL Server, majd meghívja az egyes táblák gyermek munkafolyamatát a sorok lekéréséhez:

    Képernyőkép a használatalapú szülő munkafolyamatról, amely lekéri a SQL Server táblákat, és meghívja a gyermek munkafolyamatot.

    A szülő-munkafolyamat meghívja a következő gyermek-munkafolyamatot az egyes táblák sorainak lekéréséhez:

    Képernyőkép az egyes táblák sorait lekérő Használat gyermek munkafolyamatról.

Összekötő szabályozása

Minden összekötő saját szabályozási korlátozásokkal rendelkezik, amelyeket az egyes összekötők műszaki referenciaoldalán talál. Az Azure Service Bus összekötő például olyan szabályozási korláttal rendelkezik, amely percenként legfeljebb 6000 hívást engedélyez, míg az SQL Server-összekötő a művelet típusától függően eltérő szabályozási korlátokkal rendelkezik.

Egyes eseményindítók és műveletek( például HTTP) "újrapróbálkozási szabályzattal" rendelkeznek, amelyet az újrapróbálkozási szabályzat korlátai alapján testre szabhat a kivételkezelés implementálásához. Ez a szabályzat határozza meg, hogy egy eseményindító vagy művelet milyen gyakran próbálkozik újra egy kéréssel, ha az eredeti kérés meghiúsul vagy túllépi az időkorlátot, és 408, 429 vagy 5xx választ eredményez. Így amikor a szabályozás elindul, és 429-es hibát ad vissza, a Logic Apps az újrapróbálkozási szabályzatot követi, ahol támogatott.

Ha tudni szeretné, hogy egy eseményindító vagy művelet támogatja-e az újrapróbálkozási szabályzatokat, ellenőrizze az eseményindító vagy a művelet beállításait. Egy eseményindító vagy művelet újrapróbálkozási kísérleteinek megtekintéséhez nyissa meg a logikai alkalmazás futtatási előzményeit, válassza ki a megtekinteni kívánt futtatásokat, majd bontsa ki az eseményindítót vagy műveletet a bemenetek, kimenetek és az újrapróbálkozások részleteinek megtekintéséhez.

Az alábbi használati munkafolyamat-példa bemutatja, hol található ez az információ egy HTTP-művelethez:

Képernyőkép egy HTTP-művelet futtatási előzményeiről, újrapróbálkozásokról, bemenetekről és kimenetekről.

Bár az újrapróbálkozási előzmények hibainformációkat tartalmaznak, előfordulhat, hogy nem tudja megkülönböztetni az összekötő szabályozását és a célszabályozást. Ebben az esetben előfordulhat, hogy át kell tekintenie a válasz részleteit, vagy végre kell hajtania néhány szabályozási intervallummal kapcsolatos számítást a forrás azonosításához.

A több-bérlős Azure Logic Apps használatalapú logikai alkalmazás-munkafolyamatai esetében a szabályozás a kapcsolat szintjén történik. Az integrációs szolgáltatási környezetben (ISE) futó logikaialkalmazás-munkafolyamatok esetében a szabályozás továbbra is a nem ISE-kapcsolatok esetében történik, mert azok a több-bérlős Azure Logic Appsben futnak. Az ISE-összekötők által létrehozott ISE-kapcsolatok azonban nincsenek szabályozva, mert az ISE-ben futnak.

Ha ezen a szinten szeretné kezelni a szabályozást, a következő lehetőségek közül választhat:

  • Állítson be több kapcsolatot egyetlen művelethez, hogy a munkafolyamat particionálja az adatokat feldolgozásra.

    Gondolja át, hogy el tudja-e osztani a számítási feladatot úgy, hogy egy művelet kéréseit több kapcsolat között osztja el ugyanazon a célhelyen ugyanazzal a hitelesítő adatokkal.

    Tegyük fel például, hogy a munkafolyamat táblákat kér le egy SQL Server-adatbázisból, majd lekéri az egyes táblák sorait. A feldolgozandó sorok száma alapján több kapcsolatot és több For each hurkot is használhat a sorok teljes számának kisebb készletekre való felosztásához a feldolgozáshoz. Ez a forgatókönyv két for each loopot használ a sorok teljes számának felosztásához. Az első Minden ciklushoz egy olyan kifejezést használ, amely az első felét kapja meg. A másik Az egyes hurkok egy másik kifejezést használnak, amely a második felét kapja, például:

    • 1. kifejezés: A take() függvény egy gyűjtemény elejét kapja. További információt a függvénybentake() talál.

      @take(collection-or-array-name, div(length(collection-or-array-name), 2))

    • 2. kifejezés: A skip() függvény eltávolítja a gyűjtemény elejét, és visszaadja az összes többi elemet. További információt a függvénybenskip() talál.

      @skip(collection-or-array-name, div(length(collection-or-array-name), 2))

      Az alábbi Használati munkafolyamat-példa bemutatja, hogyan használhatja ezeket a kifejezéseket:

      Képernyőkép egy használatalapú munkafolyamatról, amely több kapcsolatot használ egyetlen művelethez.

  • Állítson be egy másik kapcsolatot minden művelethez.

    Fontolja meg, hogy el tudja-e osztani a számítási feladatot úgy, hogy az egyes műveletek kéréseit a saját kapcsolatukon keresztül osztja el, még akkor is, ha a műveletek ugyanahhoz a szolgáltatáshoz vagy rendszerhez csatlakoznak, és ugyanazokat a hitelesítő adatokat használják.

    Tegyük fel például, hogy a munkafolyamat lekéri a táblákat egy SQL Server adatbázisból, és minden egyes tábla sorát lekéri. Külön kapcsolatokat is használhat, hogy a táblák lekérése egy kapcsolatot használjon, míg az egyes sorok lekérése egy másik kapcsolatot használjon.

    Az alábbi példa egy használatalapú munkafolyamatot mutat be, amely minden művelethez más-más kapcsolatot hoz létre és használ:

    Képernyőkép egy használatalapú munkafolyamatról, amely minden művelethez más-más kapcsolatot hoz létre és használ.

  • Módosítsa az egyidejűséget vagy a párhuzamosságot egy "Mindegyikhez" cikluson.

    Alapértelmezés szerint az "Egyes" ciklusok iterációi az egyidejűségi korlátig futnak egyszerre. Ha olyan kapcsolattal rendelkezik, amely egy "Mindegyikhez" hurokon belül van szabályozva, csökkentheti a párhuzamosan futó ismétlések számát. További információkért tekintse meg a következő dokumentációt:

Célszolgáltatás vagy rendszerszabályozás

Bár az összekötők saját szabályozási korlátozásokkal rendelkeznek, az összekötő által meghívott célszolgáltatás vagy rendszer szabályozási korlátokat is tartalmazhat. A Microsoft Exchange Server egyes API-jainak például szigorúbb szabályozási korlátai vannak, mint az Office 365 Outlook-összekötőnek.

Alapértelmezés szerint a logikai alkalmazás munkafolyamat-példányai és a példányokon belüli hurkok vagy ágak párhuzamosan futnak. Ez a viselkedés azt jelenti, hogy egyszerre több példány is meghívhatja ugyanazt a végpontot. Az egyes példányok nem tudnak a másik létezéséről, ezért a sikertelen műveletek újrapróbálkozási kísérletei versenyfeltételeket hozhatnak létre, amikor több hívás próbál meg egyszerre futni, de a sikeresség érdekében ezeknek a hívásoknak meg kell érkezniük a célszolgáltatásba vagy rendszerbe, mielőtt a szabályozás elkezdődne.

Tegyük fel például, hogy van egy tömbje, amely 100 elemet tartalmaz. Az "Mindegyikhez" hurokkal végighaladhat a tömbön, és bekapcsolhatja a hurok egyidejűségi vezérlőjét, így a párhuzamos iterációk számát 20-ra vagy az aktuális alapértelmezett korlátra korlátozhatja. Ebben a hurokban egy művelet egy elemet szúr be a tömbből egy SQL Server-adatbázisba, amely másodpercenként csak 15 hívást engedélyez. Ez a forgatókönyv szabályozási problémát eredményez, mert az újrapróbálkozások hátraléka létrejön, és soha nem fog futni.

Az alábbi táblázat azt ismerteti, hogy mi történik a hurokban, ha a művelet újrapróbálkozási időköze 1 másodperc:

Időpont A futtatott műveletek száma Sikertelen műveletek száma Várakozó újrapróbálkozások száma
T + 0 másodperc 20 beszúrás 5 hiba az SQL-korlát miatt 5 újrapróbálkozás
T + 0,5 másodperc 15 beszúrás az előző 5 újrapróbálkozási várakozás miatt Mind a 15 sikertelen, mert a korábbi SQL-korlát még 0,5 másodpercig érvényben van 20 újrapróbálkozás
(előző 5 + 15 új)
T + 1 másodperc 20 beszúrás 5 sikertelen és az előző 20 újrapróbálkozás az SQL-korlát miatt 25 újrapróbálkozás (előző 20 + 5 új)

Ha ezen a szinten szeretné kezelni a szabályozást, a következő lehetőségek közül választhat:

  • Hozzon létre egyéni munkafolyamatokat, hogy mindegyik egyetlen műveletet kezeljen.

    • Folytatva a jelen szakaszban szereplő SQL Server példaforgatókönyvet, létrehozhat egy munkafolyamatot, amely tömbelemeket helyez egy üzenetsorba, például egy Azure Service Bus-üzenetsorba. Ezután létre kell hoznia egy másik munkafolyamatot, amely csak a beszúrási műveletet hajtja végre az üzenetsor minden egyes eleméhez. Így egy adott időpontban csak egy munkafolyamat-példány fut, amely vagy befejezi a beszúrási műveletet, és továbblép az üzenetsor következő elemére, vagy a példány 429-et kap, de nem kísérli meg a nem produktív újrapróbálkozásokat.

    • Hozzon létre egy szülő-munkafolyamatot, amely gyermek- vagy beágyazott munkafolyamatot hív meg minden művelethez. Ha a szülőnek a szülő eredménye alapján különböző gyermek-munkafolyamatokat kell meghívnia, használhat egy feltételműveletet, vagy válthat olyan műveletre, amely meghatározza, hogy melyik gyermek-munkafolyamatot kell meghívni. Ez a minta segíthet csökkenteni a hívások vagy műveletek számát.

      Tegyük fel például, hogy két munkafolyamattal rendelkezik, amelyek mindegyike rendelkezik egy lekérdezési eseményindítóval, amely percenként ellenőrzi az e-mail-fiókját egy adott témában, például "Sikeres" vagy "Sikertelen". Ez a beállítás óránként 120 hívást eredményez. Ehelyett, ha egyetlen szülő munkafolyamatot hoz létre, amely percenként kérdez le, de meghív egy alárendelt munkafolyamatot, amely attól függően fut, hogy a tárgy "Sikeres" vagy "Sikertelen", akkor a lekérdezési ellenőrzések számát a felére vagy ebben az esetben 60-ra csökkentette.

  • Kötegelt feldolgozás beállítása. (Csak használatalapú munkafolyamatok esetén)

    Ha a célszolgáltatás támogatja a kötegelt műveleteket, a szabályozást nem egyenként, hanem csoportokban vagy kötegekben lévő elemek feldolgozásával kezelheti. A kötegelt feldolgozási megoldás implementálásához létre kell hoznia egy "batch receiver" logikaialkalmazás-munkafolyamatot és egy "batch sender" logikaialkalmazás-munkafolyamatot. A köteg küldője addig gyűjti az üzeneteket vagy elemeket, amíg a megadott feltételek nem teljesülnek, majd egyetlen csoportban küldi el ezeket az üzeneteket vagy elemeket. A köteg fogadója elfogadja ezt a csoportot, és feldolgozza ezeket az üzeneteket vagy elemeket. További információ: Batch-folyamatok üzenetei csoportokban.

  • A lekérdezési verziók helyett használja a webhook-verziókat az eseményindítókhoz és a műveletekhez.

    Miért? A lekérdezési eseményindítók továbbra is adott időközönként ellenőrzik a célszolgáltatást vagy rendszert. A nagyon gyakori időközök, például másodpercenként szabályozási problémákat okozhatnak. Egy webhook-eseményindító vagy -művelet, például a HTTP Webhook azonban csak egyetlen hívást hoz létre a célszolgáltatáshoz vagy rendszerhez, amely az előfizetés időpontjában történik, és azt kéri, hogy a cél csak akkor értesíti az eseményindítót vagy a műveletet, ha egy esemény történik. Így az eseményindítónak vagy a műveletnek nem kell folyamatosan ellenőriznie a célhelyet.

    Ha tehát a célszolgáltatás vagy rendszer támogatja a webhookokat, vagy webhookverzióval rendelkező összekötőt biztosít, ez a lehetőség jobb, mint a lekérdezési verzió használata. A webhook eseményindítóinak és műveleteinek azonosításához győződjön meg arról, hogy rendelkeznek a ApiConnectionWebhook típussal, vagy hogy nem igénylik az ismétlődés megadását. További információ: APIConnectionWebhook eseményindító és APIConnectionWebhook művelet.

Következő lépések