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
- HTTP-kapcsolatok készletezéséhez tekintse át a HTTP-kapcsolatok készletét a HttpClientFactory használatával.
- Az SQL Server-kapcsolatkészletezéssel kapcsolatos információkért tekintse át az SQL Server Csatlakozás ion pooling (ADO.NET) című cikket.
Í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.
MySQL-kiszolgáló
- MySQLi-kapcsolatok az újabb verziókhoz
- mysql_pconnect a PHP régebbi verzióihoz
Egyéb adatforrások
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
- A Kérelmek modul alapértelmezés szerint engedélyezi az életben tartást és a HTTP-kapcsolatkészletezést .
- Urllib3
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
- További útmutatásért és példákért tekintse át az Újrapróbálkozási mintát.
Életben tartási üzenetek használata az üresjárati idő visszaállítására
- Az Node.js-alkalmazások megőrzési adatainak implementálásához tekintse át, hogy a Csomópont-alkalmazás túl sok kimenő hívást hajt végre.
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:
- 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.
- Rendelkezésre állási és teljesítménykategória kiválasztása
- 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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: