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

V architektuře mikroslužeb může klient komunikovat s více než jednou front-end službou. Jak je uvedeno v tomto faktu, jak klient ví, jaké koncové body mají zavolat? Co se stane, když se zavádějí nové služby, nebo se stávající služby refaktorují? Jak služby zpracovávají ukončení protokolu SSL, ověřování a další obavy? Brána API může tyto výzvy vyřešit.

Diagram brány rozhraní API

Co je brána API?

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

  • Může mít za následek složitý klientský kód. Klient musí sledovat více koncových bodů a odolný proti chybám.
  • Vytvoří spojení mezi klientem a back-endu. Klient musí znát způsob, jakým jsou jednotlivé služby rozložené. Díky tomu je obtížnější udržovat klienta a také těžší služby Refaktorovat.
  • Jedna operace může vyžadovat volání více služeb. To může vést k tomu, že mezi klientem a serverem dojde k většímu počtu síťových přenosů a přidáním významné latence.
  • Každá veřejná služba musí zvládnout obavy, jako je ověřování, SSL a omezení míry klienta.
  • Služby musí zveřejnit webový protokol, jako je HTTP nebo WebSocket. Tím se omezí volba komunikačních protokolů.
  • Služby s veřejnými koncovými body jsou potenciální plocha pro útok a musí být posílené.

Brána pomáhá řešit tyto problémy odvoláním klientů ze služeb. Brány mohou provádět řadu různých funkcí a nemusíte je vůbec potřebovat. Funkce mohou být seskupeny 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íc služeb back-end 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 Bránu použijte k agregaci několika jednotlivých požadavků do jediné žádosti. Tento model se používá v případě, že jedna operace vyžaduje volání do více služeb back-end. Klient pošle jednu žádost do brány. Brána odesílá požadavky na různé back-endové služby a pak je agreguje a pošle je zpátky klientovi. To pomáhá snižovat upovídanost mezi klientem a back-endu.

Snižování zátěže brány. Bránu můžete použít ke snižování zátěže funkcí jednotlivých služeb pro bránu, zejména k průřezům. Může být užitečné sloučit tyto funkce na jednom místě, ale neprovádět každou službu odpovědnou za jejich implementaci. To platí zejména pro funkce, které vyžadují, aby správně implementovaly specializované dovednosti, jako je například ověřování a autorizace.

Tady je několik příkladů funkcí, které se dají přesměrovat na bránu:

  • Ukončení protokolu SSL
  • Authentication
  • Seznam povolených/blokovaných IP adres
  • Omezení míry 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

Výběr 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é servery reverzních proxy, které podporují funkce jako vyrovnávání zatížení, SSL a směrování vrstvy 7. Jsou to bezplatné i open source produkty s placenými edicemi, které poskytují další funkce a možnosti podpory. Nginx a HAProxy jsou současně s bohatou sadou funkcí a s vysokým výkonem. Můžete je roztáhnout pomocí modulů třetích stran nebo vytvořením vlastních skriptů v lua. Nginx také podporuje skriptovací modul založený na jazyce JavaScript, který je označován jako "Nginx JavaScript". Tento modul byl formálně pojmenován nginScript.

  • Kontroler sítě pro příchozí přenosy dat. Pokud používáte síť služby, jako je linker nebo Istio, vezměte v úvahu funkce, které poskytuje kontroler příchozího přenosu dat pro danou síť služby. Například řadič příchozího přenosu dat Istio podporuje směrování vrstvy 7, přesměrování HTTP, opakování a další funkce.

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

  • API Management Azure. API Management je řešení 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ě omezení četnosti, omezení IP adres a ověřování pomocí Azure Active Directory nebo jiných poskytovatelů identity. API Management neprovede žá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žití API Management s Application Gateway najdete v tématu integrování API Management v interní virtuální síti s Application Gateway.

Při volbě technologie brány Vezměte v úvahu následující skutečnosti:

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

Nasazení. Azure Application Gateway a API Management jsou spravované služby. Nginx a HAProxy se obvykle spouštějí v kontejnerech uvnitř clusteru, ale dají se taky nasadit na vyhrazené virtuální počítače mimo cluster. Tím se brána izoluje od zbytku úlohy, ale dojde k vyšší režii správy.

Správa Když se služby aktualizují nebo přidají nové služby, může být potřeba aktualizovat pravidla směrování brány. Zvažte, jak bude tento proces spravován. Podobná hlediska se vztahují na správu certifikátů SSL, seznamů povolených IP adres a dalších aspektů konfigurace.

Nasazení Nginx nebo HAProxy na Kubernetes

Nginx nebo HAProxy můžete nasadit do Kubernetes jako ReplicaSet nebo DaemonSet , který určuje obrázek kontejneru Nginx nebo HAProxy. Pomocí ConfigMap uložte konfigurační soubor pro proxy server a připojte ConfigMap jako svazek. Vytvořte službu typu Vyrovnávání zatížení a zpřístupněte 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 Kubernetes prostředek, který nasadí nástroj pro vyrovnávání zatížení nebo reverzní proxy server. Existuje několik implementací, včetně Nginx a HAProxy. Samostatný prostředek, který se nazývá příchozí, definuje nastavení pro kontroler příchozího přenosu dat, jako jsou pravidla směrování a certifikáty TLS. Tímto způsobem nemusíte spravovat složité konfigurační soubory, které jsou specifické pro konkrétní proxy server technologie.

Brána je potenciální kritický bod nebo jediný bod selhání systému, takže vždy nasaďte alespoň dvě repliky pro zajištění vysoké dostupnosti. V závislosti na zatížení možná budete muset dále škálovat repliky.

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é se dají izolovat ze služeb back-endu.

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

  • Výkon. Z důvodu 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 podívaly na rozhraní mezi mikroslužbami nebo mezi mikroslužbami a klientskými aplikacemi. Tato rozhraní se s každou službou zachází jako s neprůhledným rámečem. Konkrétně by mikroslužby nikdy neměly zveřejnit podrobnosti implementace o tom, jak spravují data. To má vliv na integritu dat a konzistenci dat, kterou prozkoumáme v dalším článku.