Použití bran rozhraní API v mikroslužbách

Application Gateway
API Management

V architektuře mikroslužeb může klient komunikovat s více než jednou front-endovou službou. Jak klient s ohledem na tuto skutečnost ví, jaké koncové body má volat? Co se stane, když se zavedou nové služby nebo se refaktorují stávající služby? Jak služby řeší ukončení protokolu SSL, ověřování a další záležitosti? S řešením těchto problémů vám může pomoct brána rozhraní API .

Diagram brány rozhraní API

Stáhněte si soubor aplikace Visio s touto architekturou.

Co je brána rozhraní API?

Brána rozhraní API se nachází mezi klienty a službami. Funguje jako reverzní proxy server, který směruje požadavky z klientů do služeb. Může také provádět různé křížové úlohy, jako je ověřování, ukončení protokolu SSL a omezování rychlosti. Pokud bránu nenasadíte, musí klienti odesílat požadavky přímo front-endovým službám. Existují však některé potenciální problémy s vystavením služeb přímo klientům:

  • Výsledkem může být složitý klientský kód. Klient musí sledovat více koncových bodů a zpracovávat selhání odolným způsobem.
  • Vytvoří spojení mezi klientem a back-endem. Klient potřebuje vědět, jak jsou jednotlivé služby rozloženy. To ztěžuje údržbu klienta a také ztěžuje refaktoring služeb.
  • Jedna operace může vyžadovat volání více služeb. To může vést k několika odezvě sítě mezi klientem a serverem, což může znamenat výraznou latenci.
  • Každá veřejně přístupná služba musí řešit problémy, jako je ověřování, SSL a omezování rychlosti klientů.
  • Služby musí vystavit protokol vhodný pro klienta, jako je HTTP nebo WebSocket. To omezuje výběr komunikačních protokolů.
  • Služby s veřejnými koncovými body představují potenciální prostor pro útoky a musí být posíleny.

Brána pomáhá tyto problémy řešit oddělením klientů od služeb. Brány můžou provádět řadu různých funkcí a nemusíte je potřebovat všechny. Funkce je možné seskupit do následujících vzorů návrhu:

Směrování brány. Bránu použijte jako reverzní proxy server ke směrování požadavků na jednu nebo více back-endových služeb pomocí směrování vrstvy 7. Brána poskytuje jeden koncový bod pro klienty a pomáhá oddělit klienty od služeb.

Agregace brány. Pomocí brány můžete agregovat několik jednotlivých požadavků do jednoho požadavku. Tento model platí, když jedna operace vyžaduje volání více back-endových služeb. Klient odešle bráně jeden požadavek. Brána odesílá požadavky různým back-endovým službám a pak agreguje výsledky a odešle je zpět klientovi. To pomáhá snížit konverzaci mezi klientem a back-endem.

Snižování zátěže brány. Pomocí brány můžete přesměrovat funkce z jednotlivých služeb na bránu, zejména pokud jde o průřezové záležitosti. Může být užitečné tyto funkce konsolidovat na jednom místě, místo toho, aby za jejich implementaci odpovídala každá služba. To platí zejména pro funkce, které ke správné implementaci vyžadují specializované dovednosti, jako je ověřování a autorizace.

Tady je několik příkladů funkcí, které je možné převést na bránu:

  • Ukončení protokolu SSL
  • Authentication
  • Seznam povolených nebo blokovaných IP adres
  • Omezování rychlosti klienta (omezování)
  • Protokolování a monitorování
  • Ukládání odpovědí do mezipaměti
  • Firewall webových aplikací
  • Komprese GZIP
  • Údržba statického obsahu

Volba technologie brány

Tady je několik možností implementace brány rozhraní API ve vaší aplikaci.

  • Reverzní proxy server. Nginx a HAProxy jsou oblíbené reverzní proxy servery, které podporují funkce, jako je vyrovnávání zatížení, SSL a směrování vrstvy 7. Oba jsou bezplatné opensourcové produkty s placenými edicemi, které poskytují další funkce a možnosti podpory. Nginx a HAProxy jsou vyspělé produkty s bohatými sadami funkcí a vysokým výkonem. Můžete je rozšířit o moduly třetích stran nebo psaním vlastních skriptů v Lua. Nginx také podporuje skriptovací modul založený na JavaScriptu, který se označuje jako NGINX JavaScript. Tento modul byl formálně pojmenován nginScript.

  • Kontroler příchozího přenosu dat sítě služeb. Pokud používáte síť služeb, jako je Linkerd nebo Istio, zvažte funkce, které pro tuto síť služeb poskytuje kontroler příchozího přenosu dat. Například kontroler příchozího přenosu dat Istio podporuje směrování vrstvy 7, přesměrování HTTP, opakování a další funkce.

  • Azure Application Gateway. Application Gateway je spravovaná služba vyrovnávání zatížení, která může provádět směrování vrstvy 7 a ukončení protokolu SSL. Poskytuje také firewall webových aplikací (WAF).

  • Azure Front Door je moderní cloudová síť pro doručování obsahu (CDN) od Microsoftu, která poskytuje rychlý, spolehlivý a bezpečný přístup mezi vašimi uživateli a statickým a dynamickým webovým obsahem vašich aplikací po celém světě. Azure Front Door doručuje váš obsah pomocí globální hraniční sítě Microsoftu se stovkami globálních a místních bodů přítomnosti distribuovaných po celém světě v blízkosti podnikových i spotřebitelských koncových uživatelů.

  • Azure API Management. API Management je řešení na klíč pro publikování rozhraní API pro externí a interní zákazníky. Poskytuje funkce, které jsou užitečné pro správu veřejného rozhraní API, včetně omezování rychlosti, omezení IP adres a ověřování pomocí Azure Active Directory nebo jiných zprostředkovatelů identity. API Management neprovádí žádné vyrovnávání zatížení, takže by se mělo používat ve spojení s nástrojem pro vyrovnávání zatížení, jako je Application Gateway nebo reverzní proxy server. Informace o používání API Management s Application Gateway najdete v tématu Integrace API Management v interní virtuální síti s Application Gateway.

Při výběru technologie brány zvažte následující:

Funkce. Výše uvedené možnosti podporují směrování vrstvy 7, ale podpora dalších funkcí se bude lišit. V závislosti na funkcích, které potřebujete, můžete nasadit více než jednu bránu.

Nasazení. Azure Application Gateway a API Management jsou spravované služby. Nginx a HAProxy obvykle běží v kontejnerech uvnitř clusteru, ale je možné je nasadit také do vyhrazených virtuálních počítačů mimo cluster. Tím se brána izoluje od zbytku úlohy, ale s sebou nese vyšší režijní náklady na správu.

Správa Při aktualizaci služeb nebo přidání nových služeb může být potřeba aktualizovat pravidla směrování brány. Zvažte, jak se tento proces bude spravovat. Podobné aspekty platí pro správu certifikátů SSL, seznamu povolených IP adres a další aspekty konfigurace.

Nasazení Nginxu nebo HAProxy do Kubernetes

Nginx nebo HAProxy můžete nasadit do Kubernetes jako ReplicaSet nebo DaemonSet , které určují image kontejneru Nginx nebo HAProxy. Pomocí objektu ConfigMap uložte konfigurační soubor pro proxy server a připojte Objekt ConfigMap jako svazek. Vytvořte službu typu LoadBalancer, která zveřejní bránu prostřednictvím Azure Load Balancer.

Alternativou je vytvoření kontroleru příchozího přenosu dat. Kontroler příchozího přenosu dat je prostředek Kubernetes, který nasazuje nástroj pro vyrovnávání zatížení nebo reverzní proxy server. Existuje několik implementací, včetně Nginx a HAProxy. Samostatný prostředek s názvem Příchozí přenos dat definuje nastavení kontroleru příchozího přenosu dat, jako jsou pravidla směrování a certifikáty TLS. Nebudete tak muset spravovat složité konfigurační soubory, které jsou specifické pro konkrétní technologii proxy serveru.

Brána je potenciálním kritickým bodem nebo kritickým bodem způsobujícím selhání systému, proto pro zajištění vysoké dostupnosti vždy nasaďte alespoň dvě repliky. V závislosti na zatížení může být potřeba repliky dále škálovat na více instancí.

Zvažte také spuštění brány na vyhrazené sadě uzlů v clusteru. Mezi výhody tohoto přístupu patří:

  • Izolace. Veškerý příchozí provoz směřuje do pevné sady uzlů, které je možné izolovat od back-endových služeb.

  • Stabilní konfigurace. Pokud je brána chybně nakonfigurovaná, může být nedostupná celá aplikace.

  • Výkon. Z důvodů výkonu můžete pro bránu použít konkrétní konfiguraci virtuálního počítače.

Další kroky

Předchozí články se zabývaly rozhraními mezi mikroslužbami nebo mezi mikroslužbami a klientskými aplikacemi. Tato rozhraní záměrně zacházejí s každou službou jako s neprůsedným rámečkem. Zejména mikroslužby by nikdy neměly zveřejňovat podrobnosti implementace o tom, jak spravují data. To má důsledky pro integritu dat a konzistenci dat, probádaná v dalším článku.