Ř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 v Azure App Service. V tomto tématu najdete další informace o metodikách řešení potíží s vyčerpáním portů překladu zdrojových síťových adres (SNAT). Pokud potřebujete další pomoc v libovolném okamžiku v tomto článku, 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 následujících příznaků:

  • Pomalé doby odezvy u všech nebo některých instancí 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é služby App Services atd.)

Příčina

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

  • Připojení TCP: Počet odchozích připojení, která je možné provést, je omezený. Limit odchozích připojení je přidružený k velikosti použitého pracovního procesu.
  • Porty SNAT: Odchozí připojení v Azure popisují omezení portů SNAT a jejich vliv na odchozí připojení. Azure používá ke komunikaci s veřejnými IP adresami zdrojový překlad síťových adres (SNAT) a nástroje pro vyrovnávání zatížení (nejsou vystavené zákazníkům). Každá instance ve službě Aplikace Azure má zpočátku předem přidělený počet 128 portů SNAT. Limit portů SNAT ovlivňuje otevírání připojení ke stejné adrese a kombinaci portů. Pokud vaše aplikace vytvoří připojení ke kombinaci kombinací adres a portů, nebudete používat porty SNAT. Porty SNAT se použijí, když opakovaně voláte stejnou adresu a kombinaci portů. Po uvolnění portu je port k dispozici pro opakované použití podle potřeby. Nástroj pro vyrovnávání zatížení sítě Azure uvolní port SNAT z uzavřených připojení až po čekání na 4 minuty.

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 k dispozici nový port SNAT, a to buď prostřednictvím dynamického přidělování dalších portů SNAT, nebo opětovným použitím uvolněného portu SNAT. Pokud vaše aplikace narazí na porty SNAT, bude mít občas problémy s odchozím připojením.

Vyhněte se problému

Existuje několik řešení, která vám umožní vyhnout se omezením portů SNAT. Mezi ně patří:

  • 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 brány NAT máte 64k odchozích portů SNAT, které jsou použitelné prostředky odesílanými provozem.

Zabránění problému s portem SNAT znamená, že se zabrání opakovanému vytváření nových připojení ke stejnému hostiteli a portu. Fondy připojení jsou jedním z nejviditelně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ích koncových bodů virtuální sítě a koncových bodů služeb nebo privátních koncových bodů. Pokud použijete regionální integraci virtuální sítě a umístíte koncové body služby do podsítě integrace, nebude mít odchozí provoz vaší aplikace do těchto služeb omezení portů SNAT odchozích přenosů. Stejně tak pokud používáte regionální integraci virtuální sítě a privátní koncové body, nebudete mít žádné problémy s odchozím portem SNAT pro daný cíl.

Pokud je vaším cílem externí koncový bod mimo Azure, poskytne vám služba NAT Gateway 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. Pro zmírnění této situace není vždy možné rychle změnit kód. V případech, kdy v čase nemůžete změnit kód, využijte další řešení. Nejlepším řešením problému je kombinovat všechna řešení tak, jak je to možné. 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ů s odchozími připojeními v dokumentaci k Azure . Z těchto strategií platí pro aplikace a funkce hostované ve službě Aplikace Azure.

Úprava aplikace tak, aby používala sdružování připojení

Tady je kolekce odkazů pro implementaci sdružování připojení podle jiného zásobníku řešení.

Uzel

Ve výchozím nastavení se připojení pro NodeJS neuchovávají naživu. Níže jsou uvedeny oblíbené databáze a balíčky pro sdružování připojení, které obsahují příklady, jak je implementovat.

HTTP Keep-alive

Java

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

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.

Úprava aplikace tak, aby znovu používala připojení

Úprava aplikace tak, aby používala méně agresivní logiku opakování

Resetování časového limitu nečinnosti odchozího nečinnosti pomocí keepalives

Další pokyny specifické pro App Service:

  • Zátěžový test by měl simulovat skutečná data z reálného světa 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 Azure SQL Database najdete v tématu Řešení potíží s výkonem Azure SQL Database s inteligentním Přehledy.
  • Horizontální navýšení kapacity plánu App Service na více instancí Další informace o škálování najdete v tématu Škálování aplikace v Azure App Service. Každá instance pracovního procesu v plánu služby App Service má přidělený počet portů SNAT. Pokud rozšíříte využití mezi více instancí, můžete získat využití portu SNAT na instanci pod doporučeným limitem 100 odchozích připojení na jedinečný vzdálený koncový bod.
  • Zvažte přechod na App Service Environment (ASE), kde jste přidělili jednu odchozí IP adresu a limity pro připojení a porty SNAT jsou mnohem vyšší. V ASE je počet portů SNAT na instanci založený na předběžné tabulce nástroje pro vyrovnávání zatížení Azure – například služba ASE s 1–50 pracovními instancemi má 1024 předem přidělených portů na instanci, zatímco služba ASE s 51–100 pracovními instancemi má 512 předem přidělených portů na instanci.

Vyhněte se odchozím limitům TCP, protože limity jsou nastavené velikostí vašeho pracovního procesu. Limity můžete zobrazit v numerických omezeních pro různé virtuální počítače v sandboxu – Připojení TCP

Název limitu Description Malé (A1) Střední (A2) Velký (A3) Izolovaná úroveň (ASE)
Připojení 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í potíží

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í na stejný účet ú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, měli byste podezření, že dosáhnete limitu virtuálního počítače.

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

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

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

  1. Pokud chcete získat přístup k diagnostice App Service, přejděte do webové aplikace App Service nebo App Service Environment v Azure Portal. V levém navigačním panelu vyberte Diagnostikovat a řešit problémy.
  2. Výběr kategorie dostupnosti a výkonu
  3. V seznamu dostupných dlaždic v kategorii vyberte dlaždici vyčerpání portů SNAT. Postupem je udržet ho pod 128. Pokud ho potřebujete, můžete stále 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ělování portů SNAT.

Připojení TCP a porty SNAT

Připojení TCP a porty SNAT přímo nesouvisí. Detektor využití připojení TCP je součástí okna Diagnostikovat a řešit problémy libovolné lokality 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é 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 pracovní instance. Vyrovnávání zatížení odchozích přenosů sítě Azure nepoužívá metriku připojení TCP pro omezení portů SNAT.
  • Omezení připojení TCP jsou popsaná v numerických omezeních mezi virtuálními počítači v sandboxu – Připojení TCP
  • Existující relace TCP selžou, když nové odchozí relace TCP z Azure App Service zdrojového portu. Můžete použít jednu IP adresu nebo změnit konfiguraci členů back-endového fondu, abyste se vyhnuli konfliktům.
Název limitu Description Malé (A1) Střední (A2) Velký (A3) Izolovaná úroveň (ASE)
Připojení 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, kde se webové úlohy nemůžou připojit k 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 App Service plán, abyste zjistili, jestli se situace zlepší, nebo jestli problém zůstane v jednom z plánů. Opakujte proces, dokud nenajdete problematickou webovou úlohu.

Další informace