Řešení potíží s vypršením časových limitů odezvy klienta a chybami pomocí API Management

Tento článek vám pomůže vyřešit občasné chyby připojení a související problémy s latencí v Azure API Management. Konkrétně tento článek poskytuje informace a řešení potíží s vyčerpáním portů překladu zdrojové adresy (SNAT). Pokud potřebujete další pomoc, obraťte se na odborníky na Azure na podporu Azure Community nebo vytvořte žádost o podporu s podporou Azure.

Příznaky

Klientské aplikace volající rozhraní API prostřednictvím vaší služby API Management (APIM) mohou vykazovat jeden nebo více následujících příznaků:

  • Přerušované chyby HTTP 500
  • Chybové zprávy časového limitu

Tyto příznaky se manifestují jako instance v protokolech BackendConnectionFailureprostředků služby Azure Monitor.

Příčina

K tomuto vzoru příznaků často dochází kvůli limitům portů překladu síťových adres (SNAT) ve službě APIM.

Kdykoli klient volá jedno z vašich rozhraní API APIM, služba Azure API Management otevře port SNAT pro přístup k back-endovému rozhraní API. Jak je popsáno v odchozích připojeních v Azure, Azure používá překlad zdrojových síťových adres (SNAT) a Load Balancer (nezpřístupněno zákazníkům) ke komunikaci s koncovými body mimo Azure v prostoru veřejných IP adres a také interní body koncových bodů do Azure, které nepoužívají koncové body služby Virtual Network. Tato situace platí jenom pro back-endová rozhraní API vystavená na veřejných IP adresách.

Každá instance služby API Management má zpočátku předem přidělený počet portů SNAT. Tento limit ovlivňuje otevírání připojení ke stejné kombinaci hostitelů a portů. Porty SNAT se používají, když máte opakované volání na stejnou adresu a kombinaci portů. Po uvolnění portu SNAT je port dostupný pro opakované použití podle potřeby. Nástroj pro vyrovnávání zatížení sítě Azure uvolní porty SNAT z uzavřených připojení až po čtyřech minutách.

Rychlé posloupnosti požadavků klientů na vaše rozhraní API může vyčerpat předem přidělenou kvótu portů SNAT, pokud tyto porty nejsou zavřené a recyklovány dostatečně rychle, což brání službě APIM v včasném zpracování žádostí klientů.

Zmírnění rizik a řešení

Řešení problému s vyčerpáním portů SNAT nejprve vyžaduje diagnostiku a optimalizaci výkonu back-endových služeb.

Obecné strategie pro zmírnění vyčerpání portů SNAT jsou popsány v tématu Řešení potíží se selháními odchozích připojení z Azure Load Balancer dokumentace. Z těchto strategií platí pro API Management následující.

Škálování instance APIM

Každá instance API Management je přidělena na základě jednotek APIM několik portů SNAT. Další porty SNAT můžete přidělit škálováním instance API Management s dalšími jednotkami. Další informace najdete v tématu Škálování služby API Management

Poznámka

Využití portů SNAT v současné době není k dispozici jako metrika pro automatické škálování API Management jednotek.

Použití více IP adres pro back-endové adresy URL

Každé připojení z vaší instance APIM ke stejné cílové IP adrese a cílovému portu back-endové služby bude používat port SNAT, aby se zachoval jedinečný tok provozu. Bez různých portů SNAT pro návratový provoz ze služby na pozadí by APIM neměl žádný způsob, jak oddělit jednu odpověď od druhé.

Vzhledem k tomu, že porty SNAT se dají opakovaně použít, pokud se cílová IP adresa nebo cílový port liší, dalším způsobem, jak se vyhnout vyčerpání portů SNAT, je použití více IP adres pro adresy URL back-endové služby.

Další informace najdete v tématu Odchozí proxy Azure Load Balancer.

Umístěte službu APIM a back-end do stejné virtuální sítě.

Pokud je vaše back-endové rozhraní API hostované ve službě Azure, která podporuje koncové body služeb, jako je například App Service, můžete se vyhnout problémům s vyčerpáním portů SNAT tak, že umístíte instanci APIM a back-endovou službu do stejné virtuální sítě a vystavíte ji prostřednictvím koncových bodů služby nebo privátních koncových bodů. Pokud používáte společnou virtuální síť a umístíte koncové body služby do podsítě integrace, odchozí provoz z vaší instance APIM do těchto služeb obchází internet, a tím se zabrání omezením portů SNAT. Podobně pokud používáte virtuální síť a privátní koncové body, nebudete mít do daného cíle žádné problémy s odchozím portem SNAT.

Podrobnosti najdete v tématu Jak používat Azure API Management s virtuálními sítěmi a integrovat App Service s virtuální sítí Azure.

Umístěte rozhraní APIM do virtuální sítě a směrujte odchozí volání do Azure Firewall

Podobně jako u umístění služeb APIM a back-endových služeb do virtuální sítě můžete použít Azure Firewall ve virtuální síti se službou APIM a pak směrovat odchozí volání APIM do Azure Firewall. Mezi rozhraním APIM a Azure Firewall (ve stejné virtuální síti) nejsou vyžadovány žádné porty SNAT. Pro připojení SNAT k back-endovým službám Azure Firewall má 64 000 dostupných portů, mnohem vyšší množství, než je přiděleno instancím APIM.

Další informace najdete v dokumentaci k Azure Firewall.

Zvažte ukládání odpovědí do mezipaměti a další ladění výkonu back-endu.

Dalším možným zmírněním rizik, které je potřeba zvážit, je zlepšení doby zpracování back-endových rozhraní API. Jedním ze způsobů, jak to provést, je nakonfigurovat určitá rozhraní API s ukládáním odpovědí do mezipaměti, aby se snížila latence mezi klientskými aplikacemi, které volají vaše rozhraní API a zatížení back-endu APIM.

Další informace najdete v tématu Přidání ukládání do mezipaměti za účelem zvýšení výkonu v Azure API Management.

Zvažte implementaci zásad omezení přístupu.

Pokud je pro váš obchodní scénář vhodné, můžete implementovat zásady omezení přístupu pro váš produkt API Management. Zásady se dají použít například rate-limit-by-key k zabránění špičkám využití rozhraní API na základě klíče omezením četnosti volání za zadané časové období.

Další informace najdete v tématu API Management zásady omezení přístupu.

Viz také