Sdílet prostřednictvím


Řešení přerušovaných chyb odchozího připojení ve službě Azure App Service

Tento článek vám pomůže vyřešit občasné chyby připojení a související problémy s výkonem ve službě Aplikace Azure Service. Poskytuje další informace o metodologiích pro odstraňování potíží s vyčerpáním portů překladu zdrojových síťových adres (SNAT). Pokud v libovolném bodě tohoto článku potřebujete další pomoc, obraťte se na odborníky na Azure na webu MSDN Azure a na fórech Stack Overflow. Případně vytvořte incident podpora Azure. Přejděte na web podpory Azure a vyberte Získat podporu.

Příznaky

Aplikace a funkce hostované ve službě Aplikace Azure mohou vykazovat jeden nebo více z následujících příznaků:

  • Pomalé doby odezvy pro všechny nebo některé instance v plánu služby.
  • Přerušované chyby 5xx nebo Chybná brána
  • Chybové zprávy časového limitu
  • Nejde se připojit k externím koncovým bodům (jako je SQLDB, Service Fabric, jiné aplikační služby atd.)

Příčina

Hlavní příčinou problémů s přerušovaným připojením je dosažení limitu při vytváření nových odchozích připojení. Mezi limity, které můžete využít, patří:

  • Připojení iony PROTOKOLU TCP: Počet odchozích připojení, která je možné vytvořit, je omezený. Limit odchozích připojení souvisí s velikostí použitého pracovního prostoru.
  • Porty SNAT: Odchozí připojení v Azure popisují omezení portů SNAT a jejich vliv na odchozí připojení. Azure ke komunikaci s veřejnými IP adresami používá překlad adres na základě zdroje (SNAT) a nástroje pro vyrovnávání zatížení (nepřístupné zákazníkům). Každá instance ve službě Aplikace Azure má zpočátku přidělený předem přidělený počet 128 portů SNAT. Limit portů SNAT má vliv na navazování připojení ke stejné kombinaci adresy a portu. Pokud vaše aplikace vytváří připojení ke kombinaci kombinací adres a portů, nebudete používat porty SNAT. Porty SNAT se využívají při opakovaném volání stejné kombinace adresy a portu. Po uvolnění portu je tento port k dispozici pro další použití podle potřeby. Azure Network Load Balancer uvolní port SNAT z ukončených připojení až po 4 minutách čekání.

Když aplikace nebo funkce rychle otevřou nové připojení, můžou rychle vyčerpat předem přidělenou kvótu 128 portů. Pak se zablokují, dokud nebude dostupný nový port SNAT, a to buď dynamickým přidělováním více portů SNAT, nebo opětovným použitím uvolněného portu SNAT. Pokud vaše aplikace narazí na porty SNAT, dojde k přerušovaným problémům s odchozím připojením.

Jak se vyhnout problému

Existuje několik řešení, která umožňují vyhnout se omezením portů SNAT. Patří sem:

  • Fondy připojení: Sdružováním připojení se vyhnete otevření nových síťových připojení pro volání na stejnou adresu a port.
  • koncové body služby: Nemáte omezení portů SNAT na služby zabezpečené pomocí koncových bodů služby.
  • privátní koncové body: Nemáte omezení portů SNAT na služby zabezpečené pomocí privátních koncových bodů.
  • NaT Gateway: U služby NAT Gateway máte 64k odchozích portů SNAT, které můžou prostředky odesílající provoz přes ni použít.

Chcete-li se vyhnout problému s portem SNAT, zabráníte opakovanému vytvoření nových připojení ke stejnému hostiteli a portu. Připojení ionové fondy jsou jedním z nejjasnějších způsobů, jak tento problém vyřešit.

Pokud je vaším cílem služba Azure, která podporuje koncové body služby, můžete se vyhnout problémům s vyčerpáním portů SNAT pomocí regionální integrace virtuální sítě a koncových bodů služeb nebo privátních koncových bodů. Pokud použijete místní integraci virtuální sítě a umístíte koncové body služby do podsítě integrace, odchozí provoz vaší aplikace do těchto služeb nebude mít omezení portů SNAT odchozích přenosů. Podobně pokud používáte místní integraci virtuální sítě a privátní koncové body, nebudete mít do daného cíle žádné problémy s odchozím portem SNAT.

Pokud je vaším cílem externí koncový bod mimo Azure, pomocí brány NAT gateway získáte 64k odchozích portů SNAT. Poskytuje také vyhrazenou odchozí adresu, kterou s nikým nesdílíte.

Pokud je to možné, vylepšete kód tak, aby používal fondy připojení, a vyhněte se celé situaci. Ke zmírnění této situace není vždy možné rychle změnit kód. V případech, kdy nemůžete kód včas změnit, využijte další řešení. Nejlepším řešením problému je zkombinovat všechna řešení co nejlépe. Zkuste použít koncové body služby a privátní koncové body ke službám Azure a bráně NAT pro zbytek.

Obecné strategie pro zmírnění vyčerpání portů SNAT jsou popsány v části Řešení problémů v dokumentaci k odchozím připojením Azure . Z těchto strategií platí následující možnosti pro aplikace a funkce hostované ve službě Aplikace Azure.

Upravte aplikaci tak, aby využívala sdružování připojení.

Tady je kolekce odkazů pro implementaci Připojení sdružování podle různých zásobníků řešení.

Uzel

Ve výchozím nastavení se připojení pro NodeJS neudržují naživu. Níže jsou uvedené oblíbené databáze a balíčky pro sdružování připojení společně s příklady jejich implementace.

Udržování spojení HTTP

Java

Níže jsou uvedeny oblíbené knihovny používané pro sdružování připojení JDBC, které obsahují příklady pro jejich implementaci: JDBC Připojení ion Pooling.

Sdružování připojení HTTP

PHP

I když PHP nepodporuje sdružování připojení, můžete zkusit použít trvalá připojení k back-end serveru.

Python

Níže jsou uvedeny oblíbené databáze a moduly pro sdružování připojení, které obsahují příklady jejich implementace.

Sdružování připojení HTTP

  • Ve výchozím nastavení jsou v modulu Požadavky povolené sdružování připojení HTTP a udržování naživu.
  • Urllib3

Upravte aplikaci tak, aby mohla připojení používat opakovaně.

Upravte aplikaci tak, aby využívala méně agresivní logiku opakování.

  • Další pokyny a příklady najdete v ukázkách opakování.

Pomocí příkazu keepalives obnovte časový limit nečinnosti odchozího připojení.

Další pokyny týkající se služby App Service:

  • Zátěžový test by měl simulovat skutečná data v stabilní rychlosti podávání. Testování aplikací a funkcí v reálném světě může předem identifikovat a vyřešit problémy s vyčerpáním portů SNAT.
  • Zajistěte, aby back-endové služby mohly rychle vracet odpovědi. Informace o řešení potíží s výkonem služby Azure SQL Database najdete v tématu Řešení potíží s výkonem služby Azure SQL Database s využitím inteligentních Přehledy.
  • Horizontální navýšení kapacity plánu služby App Service na více instancí Další informace o škálování najdete v tématu Škálování aplikace ve službě Aplikace Azure Service. Každé instanci pracovního procesu v plánu služby App Service je přiděleno několik portů SNAT. Pokud rozložíte využití mezi více instancí, můžete získat využití portů SNAT na instanci pod doporučeným limitem 100 odchozích připojení na jedinečný vzdálený koncový bod.
  • Zvažte přechod do služby App Service Environment (ASE), kde jste přidělili jednu odchozí IP adresu a limity pro připojení a porty SNAT jsou vyšší. V ASE je počet portů SNAT na instanci založený na tabulce předběžného umístění nástroje pro vyrovnávání zatížení Azure. Například ase s 1–50 instancemi pracovních procesů má 1024 předem přidělených portů na instanci, zatímco ASE s 51–100 instancemi pracovních procesů má 512 předem přidělených portů na instanci.

Vyhnete se limitům odchozího protokolu TCP snadněji, protože limity jsou nastavené podle velikosti pracovního procesu. Limity můžete zobrazit v numerických omezeních mezi virtuálními počítači v sandboxu – Připojení iony PROTOKOLU TCP

Název limitu Popis Malá (A1) Střední (A2) Velké (A3) Izolovaná úroveň (ASE)
Propojení Počet připojení napříč celým virtuálním počítačem 1920 3968 8064 16 000

Abyste se vyhnuli limitům odchozího protokolu TCP, můžete buď zvětšit velikost pracovních procesů, nebo horizontálně horizontálně navýšit kapacitu.

Řešení problému

Znalost dvou typů limitů odchozích připojení a toho, co vaše aplikace dělá, by měla usnadnit řešení potíží. Pokud víte, že vaše aplikace provádí mnoho volání do stejného účtu úložiště, můžete mít podezření na limit SNAT. Pokud vaše aplikace vytvoří velké množství volání koncových bodů po celém internetu, budete mít podezření, že dosáhnete limitu virtuálního počítače.

Pokud neznáte chování aplikace dostatečně rychle, abyste mohli rychle určit příčinu, jsou ve službě App Service k dispozici některé nástroje a techniky, které vám s tímto určením pomůžou.

Vyhledání informací o přidělení portů SNAT

Pomocí diagnostiky služby App Service můžete najít informace o přidělení portů SNAT a sledovat metriku přidělování portů SNAT webu služby App Service. Pokud chcete najít informace o přidělení portů SNAT, postupujte následovně:

  1. Pokud chcete získat přístup k diagnostice služby App Service, přejděte na webu Azure Portal do webové aplikace služby App Service nebo do služby App Service Environment. V levém navigačním panelu vyberte Diagnostikovat a řešit problémy.
  2. Výběr kategorie dostupnosti a výkonu
  3. Vyberte dlaždici Vyčerpání portů SNAT v seznamu dostupných dlaždic v kategorii. Tento postup spočívá v jeho zachování pod 128. Pokud ho potřebujete, můžete přesto otevřít lístek podpory a technik podpory za vás získá metriku z back-endu.

Vzhledem k tomu, že využití portů SNAT není k dispozici jako metrika, není možné buď automaticky škálovat na základě využití portů SNAT, nebo nakonfigurovat automatické škálování na základě metrik přidělení portů SNAT.

Porty tcp Připojení a SNAT

Připojení TCP a porty SNAT přímo nesouvisí. Detektor využití připojení TCP je součástí stránky Pro diagnostiku a řešení problémů správy libovolné aplikace App Service. Vyhledejte frázi "Připojení TCP", abyste ji našli.

  • Porty SNAT se používají jenom pro toky externí sítě, zatímco celkový počet Připojení tcp zahrnuje připojení zpětné smyčky místní smyčky.
  • Port SNAT může sdílet různé toky, pokud se toky liší v protokolu, IP adrese nebo portu. Metrika Připojení tcp počítá každé připojení TCP.
  • Limit připojení TCP probíhá na úrovni instance pracovního procesu. Vyrovnávání odchozího zatížení sítě Azure nepoužívá pro omezení portů SNAT metriku Připojení ionů PROTOKOLU TCP.
  • Omezení připojení TCP jsou popsaná v numerických limitech mezi virtuálními počítači v sandboxu – Připojení iony PROTOKOLU TCP
  • Existující relace TCP selžou, když se přidají nové odchozí relace TCP ze zdrojového portu služby Aplikace Azure. Můžete použít jednu IP adresu nebo změnit konfiguraci členů back-endového fondu, abyste se vyhnuli konfliktům.
Název limitu Popis Malá (A1) Střední (A2) Velké (A3) Izolovaná úroveň (ASE)
Propojení Počet připojení napříč celým virtuálním počítačem 1920 3968 8064 16 000

Připojení webových úloh a databází

Pokud jsou porty SNAT vyčerpány a webové úlohy se nemůžou připojit ke službě SQL Database, neexistuje žádná metrika, která by zobrazovala počet připojení otevřených jednotlivými procesy webové aplikace. Pokud chcete najít problematickou webovou úlohu, přesuňte několik webových úloh do jiného plánu služby App Service, abyste zjistili, jestli se situace zlepší nebo jestli problém přetrvává v jednom z plánů. Opakujte proces, dokud nenajdete problematickou webovou úlohu.

Další informace