Kimenő kapcsolatok időszakos hibáinak elhárítása az Azure App Service-ben

Ez a cikk segítséget nyújt az időszakos csatlakozási hibák és a kapcsolódó teljesítményproblémák elhárításában Azure App Service. További információt nyújt a forráshálózati címfordítási (SNAT-) portok kimerítésének módszereiről és hibaelhárítási módszereiről. Ha a cikk bármely pontján további segítségre van szüksége, forduljon az Azure szakértőihez az MSDN Azure-ban és a Stack Overflow fórumokon. Másik lehetőségként küldjön be egy Azure-támogatás incidenst. Nyissa meg az Azure támogatási webhelyét , és válassza a Támogatás kérése lehetőséget.

Hibajelenségek

A Azure-alkalmazás szolgáltatásban üzemeltetett alkalmazások és függvények az alábbi tünetek közül egy vagy többet mutathatnak:

  • Lassú válaszidő egy szolgáltatáscsomag összes vagy néhány példányán.
  • Időszakos 5xx vagy hibás átjáróhibák
  • Időtúllépési hibaüzenetek
  • Nem sikerült csatlakozni külső végpontokhoz (például SQLDB, Service Fabric, egyéb appszolgáltatások stb.)

Ok

Az időszakos csatlakozási problémák fő oka az, hogy túllépi a korlátot az új kimenő kapcsolatok létrehozásakor. A korlátok közé tartoznak a következők:

  • TCP-kapcsolatok: A kimenő kapcsolatok száma korlátozott. A kimenő kapcsolatok korlátja a használt feldolgozó méretével függ össze.
  • SNAT-portok: Az Azure-ban a kimenő kapcsolatok ismertetik az SNAT-portokra vonatkozó korlátozásokat, valamint azt, hogy ezek hogyan befolyásolják a kimenő kapcsolatokat. Az Azure forráshálózati címfordítást (SNAT) és (ügyfelek számára nem elérhető) Load Balancereket használ a nyilvános IP-címekkel való kommunikáláshoz. A Azure-alkalmazás szolgáltatás minden példánya kezdetben 128 SNAT-portot kap előre kiosztott számmal. A SNAT-portok korlátozása befolyásolja az azonos címek és portok kombinációira létesített kapcsolatok megnyitását. Ha az alkalmazás cím- és portkombinációk kombinációjával hoz létre kapcsolatokat, nem fogja használni az SNAT-portokat. Az SNAT-portok akkor lesznek felhasználva, ha ismétlődő hívásokat indít ugyanarra a cím- és portkombinációra. A port felszabadítása után a port szükség szerint újra felhasználható. Az Azure-hálózat terheléselosztója csak 4 perc várakozás után távolítja el az SNAT-portot a lezárt kapcsolatokból.

Amikor az alkalmazások vagy függvények gyorsan megnyitnak egy új kapcsolatot, gyorsan kimeríthetik a 128 port előre kiosztott kvótáját. Ezután le lesznek tiltva, amíg elérhetővé nem válik egy új SNAT-port, akár több SNAT-port dinamikus kiosztásával, akár egy felszabadított SNAT-port újrafelhasználásával. Ha az alkalmazás elfogy az SNAT-portok közül, időszakos kimenő csatlakozási problémákat tapasztal.

A probléma elkerülése

Van néhány megoldás, amellyel elkerülheti az SNAT-port korlátozásait. Ezek közé tartoznak például az alábbiak:

  • kapcsolatkészletek: A kapcsolatok készletezésével elkerülheti az azonos címre és portra irányuló hívások új hálózati kapcsolatainak megnyitását.
  • szolgáltatásvégpontok: A szolgáltatásvégpontokkal védett szolgáltatásokra nem vonatkozik SNAT-portkorlátozás.
  • privát végpontok: Nincs SNAT-portkorlátozás a privát végpontokkal védett szolgáltatásokra.
  • NAT Gateway: NAT Gateway esetén 64 ezer kimenő SNAT-porttal rendelkezik, amelyeket a rajta keresztül forgalmat küldő erőforrások használhatnak.

Az SNAT-porttal kapcsolatos probléma elkerülése érdekében meg kell akadályoznia, hogy az új kapcsolatok ismétlődően létre legyenek hozva ugyanahhoz a gazdagéphez és porthoz. A kapcsolatkészletek a probléma megoldásának egyik legnyilvánvalóbb módjai.

Ha a cél olyan Azure-szolgáltatás, amely támogatja a szolgáltatásvégpontokat, elkerülheti az SNAT-portok elfogyásával kapcsolatos problémákat regionális VNet-integráció és szolgáltatásvégpontok vagy privát végpontok használatával. Ha regionális VNet-integrációt használ, és szolgáltatásvégpontokat helyez el az integrációs alhálózaton, az ezekre a szolgáltatásokra irányuló kimenő alkalmazásforgalomra nem vonatkoznak kimenő SNAT-portkorlátozások. Hasonlóképpen, ha regionális VNet-integrációt és privát végpontokat használ, nem lesznek kimenő SNAT-portokkal kapcsolatos problémái az adott célhelyen.

Ha a cél az Azure-on kívüli külső végpont, a NAT Gateway használatával 64 ezer kimenő SNAT-portot biztosít. Emellett dedikált kimenő címet is biztosít, amelyet nem oszt meg senkivel.

Ha lehetséges, javítsa a kódot a kapcsolatkészletek használatához, és kerülje el a teljes helyzetet. A probléma megoldásához nem mindig lehet elég gyorsan módosítani a kódot. Azokban az esetekben, amikor nem tudja időben módosítani a kódot, használja ki a többi megoldást. A legjobb megoldás a problémára az, ha az összes megoldást a lehető legjobban kombinálja. Próbáljon meg szolgáltatásvégpontokat és privát végpontokat használni az Azure-szolgáltatásokhoz és a NAT Gatewayhez a többihez.

Az SNAT-portok elfogyásának csökkentésére vonatkozó általános stratégiákat az Azure-dokumentáció kimenő kapcsolatainakproblémamegoldási szakasza ismerteti. Ezen stratégiák közül a következők érvényesek az Azure-alkalmazás szolgáltatásban üzemeltetett alkalmazásokra és függvényekre.

Az alkalmazás módosítása kapcsolatkészletezés használatára

Íme egy hivatkozásgyűjtemény a különböző megoldásveremek kapcsolatkészletezésének megvalósításához.

Csomópont

Alapértelmezés szerint a NodeJS kapcsolatai nem maradnak életben. Alább láthatók a kapcsolatkészletezés népszerű adatbázisai és csomagjai, amelyek példákat tartalmaznak a megvalósításhoz.

HTTP életben tartás

Java

Az alábbiakban a JDBC-kapcsolatkészletezéshez használt népszerű kódtárak találhatók, amelyek példákat tartalmaznak az implementálásukra: JDBC-kapcsolatkészletezés.

HTTP-kapcsolatkészletezés

PHP

Bár a PHP nem támogatja a kapcsolatkészletezést, megpróbálhatja állandó adatbázis kapcsolatok használni a háttérkiszolgálón.

Python

Az alábbiakban felsoroljuk a kapcsolatkészletezés népszerű adatbázisait és moduljait, amelyek példákat tartalmaznak az implementálásukra.

HTTP-kapcsolatkészletezés

  • Az Életben tartás és a HTTP-kapcsolatkészletezés alapértelmezés szerint engedélyezve van a Kérések modulban.
  • Urllib3

Az alkalmazás módosítása a kapcsolatok újbóli felhasználására

Az alkalmazás módosítása kevésbé agresszív újrapróbálkozási logika használatára

Életben tartási üzenetek használata az üresjárati idő visszaállítására

További útmutatás a App Service:

  • A terhelési tesztnek folyamatos adagolási sebességgel kell szimulálnia a valós adatokat. Az alkalmazások és függvények valós terhelés alatt való tesztelése előre azonosíthatja és megoldhatja az SNAT-portok kimerülésével kapcsolatos problémákat.
  • Győződjön meg arról, hogy a háttérszolgáltatások gyorsan vissza tudják adni a válaszokat. A Azure SQL-adatbázis teljesítményproblémáinak elhárításához tekintse át a Azure SQL Adatbázis teljesítményproblémáinak elhárítása az Intelligent Insights szolgáltatással című témakört.
  • Skálázza fel a App Service tervet több példányra. A skálázással kapcsolatos további információkért lásd: Alkalmazás skálázása Azure App Service. Az App Service-csomag minden feldolgozópéldánya számos SNAT-portot foglal le. Ha a használatot több példányban is elosztja, előfordulhat, hogy a példányonkénti SNAT-porthasználat az ajánlott 100 kimenő kapcsolatra vonatkozó korlát alá kerül egyedi távoli végpontonként.
  • Érdemes lehet áttérni App Service Environment (ASE)-re, ahol egyetlen kimenő IP-cím van kiosztva, és a kapcsolatok és az SNAT-portok korlátai magasabbak. Az ASE-ben az SNAT-portok példányonkénti száma az Azure Load Balancer előtelepítési tábláján alapul. Például egy 1–50 feldolgozópéldányt tartalmazó ASE példányonként 1024 előre áthelyezett porttal rendelkezik, míg egy 51–100 feldolgozópéldányt tartalmazó ASE példányonként 512 előre áthelyezett porttal rendelkezik.

A kimenő TCP-korlátok elkerülése egyszerűbb megoldás, mivel a korlátokat a feldolgozó mérete határozza meg. A tesztkörnyezetek közötti virtuális gépek numerikus korlátai – TCP-kapcsolatok korlátait láthatja

Korlát neve Leírás Kicsi (A1) Közepes (A2) Nagy (A3) Izolált szint (ASE)
Kapcsolatok Kapcsolatok száma a teljes virtuális gépen 1920 3968 8064 16000

A kimenő TCP-korlátok elkerülése érdekében növelheti a feldolgozók méretét, vagy horizontálisan felskálázhatja a skálázást.

Hibaelhárítás

A kimenő kapcsolat két típusának és az alkalmazás tevékenységeinek ismerete megkönnyíti a hibaelhárítást. Ha tudja, hogy az alkalmazás sok hívást kezdeményez ugyanahhoz a tárfiókhoz, SNAT-korlátra gyanakodhat. Ha az alkalmazás rengeteg hívást hoz létre a végpontok felé az interneten keresztül, gyaníthatja, hogy eléri a virtuálisgép-korlátot.

Ha nem ismeri az alkalmazás viselkedését ahhoz, hogy gyorsan megállapítsa az okot, App Service elérhető néhány eszköz és technika, amelyek segítenek a meghatározásban.

SNAT-portfoglalási információk keresése

A App Service Diagnostics segítségével megkeresheti az SNAT-portok kiosztási adatait, és megfigyelheti egy App Service hely SNAT-portfoglalási metrikáját. Az SNAT-portok foglalási információinak megkereséséhez kövesse az alábbi lépéseket:

  1. A App Service diagnosztikához navigáljon a App Service webalkalmazáshoz vagy App Service Environment a Azure Portal. A bal oldali navigációs sávon válassza a Problémák diagnosztizálása és megoldása lehetőséget.
  2. Rendelkezésre állási és teljesítménykategória kiválasztása
  3. Válassza az SNAT-port elfogyása csempét a kategóriában elérhető csempék listájában. A gyakorlat az, hogy tartsa 128 alatt. Ha szüksége van rá, továbbra is megnyithat egy támogatási jegyet, és a támogatási szakember a háttérrendszerből fogja megkapni a metrikát.

Mivel az SNAT-porthasználat nem érhető el metrikaként, nem lehet automatikus skálázást készíteni az SNAT-portok használata alapján, vagy az automatikus skálázást az SNAT-portok kiosztási metrikái alapján konfigurálni.

TCP-kapcsolatok és SNAT-portok

A TCP-kapcsolatok és az SNAT-portok nem kapcsolódnak közvetlenül egymáshoz. A TCP-kapcsolatok használati érzékelője megtalálható bármely App Service alkalmazás Problémák diagnosztizálása és megoldása felügyeleti oldalán. Keresse meg a "TCP-kapcsolatok" kifejezést a kereséshez.

  • Az SNAT-portok csak külső hálózati folyamatokhoz használhatók, míg a tcp-kapcsolatok teljes száma helyi visszacsatolási kapcsolatokat tartalmaz.
  • Az SNAT-portokat különböző folyamatok oszthatják meg, ha a folyamatok eltérőek a protokollban, az IP-címben vagy a portban. A TCP-kapcsolatok metrika minden TCP-kapcsolatot megszámol.
  • A TCP-kapcsolatok korlátja a feldolgozópéldány szintjén történik. Az Azure Network kimenő terheléselosztása nem használja a TCP-kapcsolatok metrikát az SNAT-portok korlátozásához.
  • A TCP-kapcsolatok korlátait a tesztkörnyezetek közötti virtuális gépek numerikus korlátai – TCP-kapcsolatok című cikkben ismertetjük.
  • A meglévő TCP-munkamenetek meghiúsulnak, ha új kimenő TCP-munkameneteket adnak hozzá Azure App Service forrásportból. Az ütközések elkerülése érdekében használhat egyetlen IP-címet, vagy újrakonfigurálhatja a háttérkészlet tagjait.
Korlát neve Leírás Kicsi (A1) Közepes (A2) Nagy (A3) Izolált szint (ASE)
Kapcsolatok Kapcsolatok száma a teljes virtuális gépen 1920 3968 8064 16000

WebJobs- és adatbázis-kapcsolatok

Ha az SNAT-portok elfogytak, és a WebJobs nem tud csatlakozni SQL Database, nincs olyan metrika, amely azt mutatja, hogy az egyes webalkalmazás-folyamatok hány kapcsolatot nyitnak meg. A problémás WebJob megkereséséhez helyezzen át több WebJobs-feladatot egy másik App Service tervbe, és ellenőrizze, hogy javul-e a helyzet, vagy ha a probléma az egyik tervben marad. Ismételje meg a folyamatot, amíg meg nem találja a problémás WebJobot.

További információ