Gloo Edge API gateway

Kas yra Gloo Edge ir kodėl jis skiriasi nuo kitų

API gateway rinka šiandien primena perpildytą prekybos centrą – pasirinkimų tiek daug, kad galva ima suktis. Tačiau Gloo Edge išsiskiria iš minios ne tik dėl savo pavadinimo, bet ir dėl unikalios architektūros bei požiūrio į modernių aplikacijų valdymą. Šis Solo.io sukurtas sprendimas remiasi Envoy proxy pagrindu, o tai iš karto suteikia jam solidų pagrindą ir našumo pranašumą.

Skirtingai nei tradiciniai API gateway sprendimai, kurie dažnai primena monolitinius monstrus, Gloo Edge buvo sukurtas cloud-native erai. Jis puikiai supranta Kubernetes ekosistemą, gali veikti kaip Ingress kontroleris ir kartu atlieka visas sudėtingas API gateway funkcijas. Tai tarsi šveicariškas peiliukas mikroservisų pasaulyje – kompaktiškas, bet funkcionalus.

Įdomu tai, kad Gloo Edge nėra tik dar vienas reverse proxy su fancy pavadinimu. Jis supranta GraphQL, gRPC, REST ir kitus protokolus natūraliai, be jokių keistų workaround’ų ar papildomų adapterių. Tai ypač svarbu, kai jūsų infrastruktūroje gyvena įvairių technologijų zoo ir reikia viską suvaldyti vienoje vietoje.

Architektūra ir techniniai sprendimai

Gloo Edge architektūra paremta keliais pagrindiniais komponentais, kurie dirba sinchroniškai. Pirmiausia – tai kontrolės plokštuma (control plane), kuri atsakinga už konfigūracijos valdymą ir būsenos stebėjimą. Antra – duomenų plokštuma (data plane), kuri faktiškai vykdo visą sunkųjį darbą – maršrutizuoja užklausas, taiko saugumo politikas ir transformuoja duomenis.

Kontrolės plokštuma susideda iš kelių pagrindinių komponentų:

  • Gateway – pagrindinis komponentas, kuris apibrėžia, kaip išorinis srautas patenka į sistemą
  • Virtual Services – maršrutizavimo taisyklių rinkinys, kuris nustato, kur keliauja užklausos
  • Upstreams – galutiniai paskirties taškai, kur baigiasi užklausos kelionė
  • Discovery – automatinis servisų aptikimo mechanizmas

Kas tikrai įspūdinga – Gloo Edge gali automatiškai aptikti jūsų Kubernetes klasteryje veikiančius servikus ir automatiškai sukurti jiems upstream’us. Nebereikia rankomis rašyti konfigūracijų kiekvienam mikroservisui. Sistema pati sužino, kas kur veikia, ir atitinkamai prisitaiko. Tai sutaupo neįtikėtinai daug laiko, ypač kai jūsų infrastruktūra auga kaip ant mielių.

Envoy proxy naudojimas kaip duomenų plokštumos pagrindas yra strateginis sprendimas. Envoy jau seniai įrodė savo vertę CNCF ekosistemoje ir yra naudojamas tokiuose projektuose kaip Istio ar Consul Connect. Tai reiškia, kad Gloo Edge paveldi visus Envoy privalumus – puikų našumą, išsamią observability ir aktyvią bendruomenę.

Praktinis įdiegimas ir konfigūravimas

Pradėti dirbti su Gloo Edge yra gana paprasta, jei jau turite veikiančią Kubernetes aplinką. Paprasčiausias būdas – naudoti glooctl CLI įrankį, kuris automatizuoja daugumą diegimo žingsnių. Tiesiog parsisiuntus binary failą ir paleidus komandą, sistema pati susikuria reikiamus namespace’us, deploy’ina komponentus ir sukonfigūruoja pradinius parametrus.

Štai tipinis diegimo scenarijus:

glooctl install gateway

Ši paprasta komanda sukuria visą reikiamą infrastruktūrą. Tačiau realybėje dažnai norėsite turėti daugiau kontrolės. Tada galite naudoti Helm chart’us ir customizuoti diegimą pagal savo poreikius. Pavyzdžiui, galite nurodyti, kiek resursų skirti Envoy proxy, kokius logging lygius naudoti ar kaip integruotis su jūsų egzistuojančia monitoring sistema.

Konfigūravimas vyksta per Custom Resource Definitions (CRD). Tai reiškia, kad viskas apibrėžiama deklaratyviai YAML failuose, kaip ir įprasta Kubernetes pasaulyje. Pavyzdžiui, norint sukurti paprastą maršrutą:


apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
name: my-service
namespace: gloo-system
spec:
virtualHost:
domains:
- 'api.example.com'
routes:
- matchers:
- prefix: /users
routeAction:
single:
upstream:
name: user-service
namespace: gloo-system

Kas man asmeniškai patinka – tai galimybė naudoti transformation funkcijas tiesiog konfigūracijoje. Galite transformuoti request body, keisti header’ius, pridėti autentifikacijos token’us – visa tai neprašant nė eilutės kodo. Tai ypač naudinga, kai reikia integruoti legacy sistemas su moderniais mikroservisais.

Rate limiting ir saugumo aspektai

Rate limiting yra viena iš tų funkcijų, kurios atrodo paprastos teorijoje, bet praktikoje gali sukelti nemažai galvos skausmo. Gloo Edge šią problemą sprendžia elegantiškai, siūlydamas kelis rate limiting lygius – nuo paprasto request count ribojimo iki sudėtingų quota sistemų.

Sistema palaiko tiek lokalų (per Envoy), tiek paskirstytą rate limiting per Redis. Lokalus variantas veikia greičiau, bet netinka situacijoms, kai turite kelis gateway instance’us ir norite vieningo limito visai sistemai. Tokiais atvejais Redis sprendimas yra būtinas.

Praktinis patarimas: pradėkite nuo lokaliojo rate limiting ir pereikite prie paskirstyto tik tada, kai tikrai reikia. Redis prideda papildomą latency ir complexity, kurio ne visada verta.

Saugumo pusėje Gloo Edge siūlo įvairias autentifikacijos ir autorizacijos galimybes:

  • API key autentifikacija
  • OAuth 2.0 / OIDC integracija
  • JWT validacija
  • Basic auth
  • External auth per custom service

Ypač įdomus yra external auth mechanizmas. Jis leidžia jums sukurti savo autentifikacijos logiką atskirame servise, o Gloo Edge tiesiog klausia šio serviso prieš praleisdamas užklausą toliau. Tai suteikia neribotą lankstumą – galite implementuoti bet kokią sudėtingą autentifikacijos logiką, kurią tik sugalvosite.

Observability ir debugging

Vienas iš didžiausių iššūkių dirbant su API gateway – suprasti, kas vyksta, kai kažkas neveikia. Gloo Edge šioje srityje tikrai neapvylė. Sistema generuoja išsamius metrics, kuriuos galite eksportuoti į Prometheus, logus galima siųsti į bet kurią logging sistemą, o distributed tracing palaiko Jaeger ir Zipkin.

Metrics apima viską, ko gali prireikti: request count, latency percentiles, error rates, upstream connection pools būseną ir dar daugybę kitų parametrų. Galite sukurti Grafana dashboard’us ir stebėti sistemos sveikatą realiu laiku.

Debugging’ui ypač naudinga glooctl debug logs komanda, kuri leidžia pakeisti logging lygį runtime’e, nerestartinant komponentų. Kai produkto aplinkoje kažkas stringa ir reikia greitai suprasti kas vyksta – tai neįkainojama galimybė.

Dar vienas naudingas įrankis – glooctl check, kuris patikrina visos sistemos būseną ir išveda aiškų raportą apie tai, kas veikia gerai, o kas ne. Tai sutaupo daug laiko, nes nebereikia rankiniu būdu tikrinti kiekvieno komponento status.

Performance tuning ir skalabilumas

Našumas yra kritinis aspektas bet kuriam API gateway, nes jis yra bottleneck taškas tarp išorinio pasaulio ir jūsų aplikacijų. Gloo Edge, būdamas paremtas Envoy, iš esmės jau yra greitas. Tačiau visada yra vietos optimizacijai.

Pirmiausia verta atkreipti dėmesį į Envoy worker thread’ų skaičių. Pagal nutylėjimą Envoy naudoja vieną thread’ą per CPU core. Daugumoje atvejų tai optimalus pasirinkimas, bet jei turite labai didelį request volume su mažu latency, galite eksperimentuoti su šiais parametrais.

Connection pooling yra kita svarbi optimizavimo sritis. Gloo Edge leidžia tiksliai kontroliuoti, kiek concurrent connections leidžiama į kiekvieną upstream. Per daug connection’ų gali perkrauti backend’us, per mažai – sukurti bereikalingą latency. Reikia rasti sweet spot, o tai dažniausiai reiškia testavimą su realia apkrova.

Circuit breaking mechanizmas padeda apsaugoti sistemą nuo cascade failure. Kai upstream pradeda failint, Gloo Edge gali automatiškai nustoti siųsti į jį užklausas tam tikram laikui, duodant jam galimybę atsigauti. Tai ypač svarbu mikroservisų architektūroje, kur vieno komponento gedimas neturėtų nuversti visos sistemos.

Horizontalus skalabilumas yra paprasta užduotis – tiesiog padidinkite Envoy pod’ų replica count. Kubernetes automatiškai pasirūpins load balancing’u tarp jų. Tačiau atminkite, kad kontrolės plokštuma taip pat turi būti pajėgi apdoroti konfigūracijos pokyčius visoms šioms replikoms.

GraphQL ir gRPC palaikymas

Viena iš sričių, kur Gloo Edge tikrai spindi, yra moderniųjų protokolų palaikymas. GraphQL integracija nėra tik marketing’inis buzzword – ji tikrai veikia ir suteikia naudingų funkcijų.

Galite naudoti Gloo Edge kaip GraphQL gateway, kuris sujungia kelis backend GraphQL servisus į vieną unified API. Tai vadinama schema stitching ir leidžia klientams daryti užklausas į vieną endpoint’ą, nors duomenys ateina iš skirtingų šaltinių. Sistema automatiškai išskaido užklausą, pasiima duomenis iš atitinkamų servisų ir sujungia rezultatus.

Dar įdomesnė funkcija – GraphQL to REST transformacija. Jei turite legacy REST API, bet norite suteikti klientams GraphQL sąsają, Gloo Edge gali tai padaryti be jokio papildomo kodo. Tiesiog apibrėžiate mapping’ą konfigūracijoje, ir sistema automatiškai transliuoja GraphQL užklausas į REST calls.

gRPC palaikymas taip pat yra first-class. Gloo Edge supranta gRPC protokolą natūraliai ir gali daryti load balancing, rate limiting, autentifikaciją – visas tas pačias funkcijas kaip ir su REST. Be to, galite naudoti gRPC-Web, kad browser’iai galėtų tiesiogiai komunikuoti su gRPC servisais.

Praktinis patarimas: jei naudojate gRPC, įsitikinkite, kad įjungtas HTTP/2. Tai gali atrodyti akivaizdu, bet kartais žmonės pamiršta ir stebiasi, kodėl viskas veikia lėtai.

Kaip visa tai sudėti į vientisą paveikslą

Gloo Edge nėra paprastas įrankis, kurį įdiegsi ir pamiršti. Tai platforma, kuri reikalauja supratimo ir tinkamo konfigūravimo. Tačiau kai viską nustatai kaip reikia, gauni galingą sprendimą, kuris gali augti kartu su tavo infrastruktūra.

Svarbiausias dalykas, kurį reikia suprasti – Gloo Edge nėra tik apie traffic routing. Tai apie visą API lifecycle valdymą: nuo discovery ir routing iki security, observability ir transformation. Kai pradedi naudoti visas šias funkcijas kartu, supranti tikrąją sistemos vertę.

Ar verta rinktis Gloo Edge vietoj kitų sprendimų? Priklauso nuo konteksto. Jei dirbi su Kubernetes, naudoji mikroservisus ir reikia modernių protokolų palaikymo – tai tikrai verta apsvarstyti. Jei tavo infrastruktūra yra paprastesnė arba naudoji kitokias technologijas, galbūt yra paprastesnių variantų.

Praktiškai patarčiau pradėti nuo nedidelės pilot implementacijos. Pasiimk vieną ar du servisus, iškėlk juos per Gloo Edge ir pažiūrėk, kaip viskas veikia. Išbandyk rate limiting, autentifikaciją, monitoring’ą. Tik po to, kai jautiesi komfortabiliai, pradėk migracijos procesą su likusia infrastruktūra.

Bendruomenė ir dokumentacija yra gana geros, nors kartais tenka pasikasinėti GitHub issues, kad rastum atsakymus į specifines problemas. Solo.io komanda aktyviai palaiko projektą ir reguliariai išleidžia naujus release’us su bug fix’ais ir naujomis funkcijomis.

Galiausiai, Gloo Edge yra open source (yra ir enterprise versija su papildomomis funkcijomis), tai reiškia, kad gali pradėti naudoti nemokamai ir pats įvertinti, ar tai tinka tavo poreikiams. Nėra vendor lock-in, nėra slaptų mokesčių – tiesiog parsisiųsk, įdiegk ir išbandyk. O jei vėliau prireiks enterprise palaikymo ar papildomų funkcijų, visada gali upgrade’intis.

Daugiau

Python property dekoratorius: getteriai ir setteriai