Megosztás a következőn keresztül:


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-alkalmazás Szolgáltatásban. További információt nyújt a forráshálózati címfordítási (SNAT-) portok kimerülésének módszertanáró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 és a Stack Overflow fórumain. 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

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

  • Lassú válaszidő egy szolgáltatáscsomag összes példányán 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 kapcsolati problémák fő oka, hogy túllépi a korlátot az új kimenő kapcsolatok létrehozásakor. Az elérhető korlátok a következők:

  • TCP-Csatlakozás ions: 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 az SNAT-port korlátozásait és a kimenő kapcsolatokra gyakorolt hatásuk módját ismertetik. 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-port előre kiosztott számát kapja. 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, akkor 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 nem érhető egy új SNAT-port, akár több SNAT-port dinamikus kiosztásával, akár egy visszanyert 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 új hálózati kapcsolatok megnyitását az azonos címre és portra irányuló hívásokhoz.
  • szolgáltatásvégpontok: Nincs SNAT-portkorlátozás a szolgáltatásvégpontokkal védett szolgáltatásokra.
  • privát végpontok: Nincs SNAT-portkorlátozás a privát végpontokkal védett szolgáltatásokra.
  • NAT-átjáró: NAT-átjáróval 64 ezer kimenő SNAT-portot használhat, amelyeket a rajta keresztül forgalmat küldő erőforrások használhatnak.

Az SNAT-porttal kapcsolatos probléma elkerülése érdekében megakadályozza, hogy az új kapcsolatok ismétlődően azonos gazdagéphez és porthoz kerüljenek. Csatlakozás ionkészletek a probléma megoldásának egyik legnyilvánvalóbb módjai.

Ha a cél egy olyan Azure-szolgáltatás, amely támogatja a szolgáltatásvégpontokat, elkerülheti az SNAT-portok kimerülésével 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 alkalmazás ezen szolgáltatások felé irányuló kimenő forgalmának nem lesznek kimenő SNAT-portkorlátozásai. Hasonlóképpen, ha regionális VNet-integrációt és privát végpontokat használ, akkor nem lesznek kimenő SNAT-portproblémák az adott célhelyen.

Ha a cél az Azure-on kívüli külső végpont, a NAT-átjáró használatával 64 ezer kimenő SNAT-portot biztosít. Emellett egy 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ára, és kerülje a teljes helyzetet. A helyzet 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, hogy az összes megoldást a lehető legjobban kombinálja. Próbálja meg szolgáltatásvégpontokat és privát végpontokat használni az Azure-szolgáltatásokhoz és a NAT-átjáróhoz a többihez.

Az SNAT-portok kimerülésének csökkentésére vonatkozó általános stratégiákat az Azure-dokumentáció kimenő kapcsolatainak problé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 Csatlakozás ion-készletezés implementálására különböző megoldásveremekkel.

Csomópont

Alapértelmezés szerint a NodeJS-kapcsolatok 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 Csatlakozás ion pooling.

HTTP-kapcsolatkészletezés

PHP

Bár a PHP nem támogatja a kapcsolatkészletezést, megpróbálhat állandó adatbázis-kapcsolatokat használni a háttérkiszolgálóhoz.

Python

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

HTTP-kapcsolatkészletezés

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

  • Az Azure Functions kapcsolatainak kezelésével kapcsolatos további példákért tekintse át a Kapcsolatok kezelése az Azure Functionsben című témakört.

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 az App Service-hez:

  • 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 történő tesztelése idővel 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. Az Azure SQL Database teljesítményproblémáinak elhárításához tekintse át az Azure SQL Database Intelligens Elemzések teljesítményproblémáinak hibaelhárítását.
  • Az App Service-csomag vertikális felskálázása több példányra. A skálázással kapcsolatos további információkért lásd: Alkalmazás méretezése Azure-alkalmazás Szolgáltatásban. Az App Service-csomag minden feldolgozópéldánya számos SNAT-portot foglal le. Ha a használatot több példányra terjeszti, 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 az App Service-környezetbe (A Standard kiadás), ahol egyetlen kimenő IP-címet oszt ki, és a kapcsolatok és az SNAT-portok korlátai magasabbak. Egy A Standard kiadás esetében az SNAT-portok példányonkénti száma az Azure Load Balancer előtelepítési tábláján alapul. Egy 1–50 feldolgozópéldányt tartalmazó A Standard kiadás például példányonként 1024 előre kiosztott porttal rendelkezik, míg az 51–100 feldolgozópéldányt tartalmazó A Standard kiadás példányonként 512 előre kiosztott 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-Csatlakozás

Korlát neve Leírás Kicsi (A1) Közepes (A2) Nagy (A3) Izolált szint (A Standard kiadás)
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 skálázhatja ki a skálázást.

Hibaelhárítás

A kimenő kapcsolat két típusának és az alkalmazás által végzett teendőknek a megismerése megkönnyíti a hibaelhárítást. Ha tudja, hogy az alkalmazás sok hívást indít ugyanahhoz a tárfiókhoz, SNAT-korlátra gyanakodhat. Ha az alkalmazás sok hívást hoz létre a végpontokra az interneten keresztül, gyaníthatja, hogy eléri a virtuálisgép-korlátot.

Ha nem ismeri eléggé az alkalmazás viselkedését ahhoz, hogy gyorsan megállapítsa az okot, az App Service-ben elérhető eszközök és technikák segíthetnek a meghatározásban.

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

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

  1. Az App Service-diagnosztika eléréséhez lépjen az App Service-webalkalmazáshoz vagy az App Service-környezethez az Azure Portalon. A bal oldali navigációs sávon válassza a Diagnosztizálás és a problémák megoldása lehetőséget.
  2. Rendelkezésre állási és teljesítménykategória kiválasztása
  3. Válassza az SNAT-portkimerülés csempét a kategória alatt elérhető csempék listájában. A gyakorlat az, hogy 128 alatt kell tartani. Ha szüksége van rá, továbbra is megnyithat egy támogatási jegyet, és a támogatási mérnök megkapja a metrikát a háttérrendszerből.

Mivel az SNAT-portok használata nem érhető el metrikaként, nem lehet automatikusan skálázni az SNAT-portok használata alapján, vagy az SNAT-portok foglalási metrikája alapján konfigurálni az automatikus skálázást.

TCP-Csatlakozás ions é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 teljes TCP-Csatlakozás tartalmaz helyi visszacsatolási kapcsolatokat.
  • 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 Csatlakozás ions 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 Csatlakozás ions metrikát az SNAT-portok korlátozásához.
  • A TCP-kapcsolatok korlátait a tesztkörnyezetek közötti virtuális gép numerikus korlátai – TCP-Csatlakozás
  • A meglévő TCP-munkamenetek meghiúsulnak, ha új kimenő TCP-munkameneteket adnak hozzá Azure-alkalmazás szolgáltatás forrásportjábó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 (A Standard kiadás)
Kapcsolatok Kapcsolatok száma a teljes virtuális gépen 1920 3968 8064 16000

WebJobs- és adatbázis-kapcsolatok

Ha az SNAT-portok kimerültek, és a WebJobs nem tud csatlakozni az SQL Database-hez, nincs 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-csomagba, és ellenőrizze, hogy javul-e a helyzet, vagy ha a probléma az egyik csomagban marad. Ismételje meg a folyamatot, amíg meg nem találja a problémás WebJob-feladatot.

További információk