Clojure: funksjonell programmering og backendutvikling på JVM · leksjon

Tjenesteoppdagelse og API-gatewayer

Lær hvordan Clojure-mikrotjenester finner hverandre dynamisk, og hvordan en API-gateway gir ett sikkert inngangspunkt til systemet Deres.

Leksjon 4 av 413 trinn

Tjenesteoppdagelse og API-gatewayer er en gratis leksjon i Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Clojure: funksjonell programmering og backendutvikling på JVM, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.

Problemet med å finne tjenester

I et mikrotjenestesystem starter og stopper instanser, og de flyttes mellom verter. Hardkodede IP-adresser slutter raskt å fungere. Tjenesteoppdagelse lar tjenester finne hverandre dynamisk.

Tjenesteregistre

Et tjenesteregister er en database over tilgjengelige tjenester og nettverksadressene deres. Populære alternativer er Consul, etcd og Eureka.

Registrere en tjeneste

Ved oppstart registrerer en tjeneste seg selv i registeret, inkludert et endepunkt for helsesjekk, slik at registeret kan fjerne den hvis den slutter å fungere.

(defn register! [consul-url name host port]
  (http/put (str consul-url "/v1/agent/service/register")
    {:body (json/write-str
             {:Name name :Address host :Port port
              :Check {:HTTP (str "http://" host ":" port "/health")
                      :Interval "10s"}})}))

Klientsidig tjenesteoppdagelse

Ved klientsidig tjenesteoppdagelse spør den kallende tjenesten registeret etter friske instanser og velger selv én av dem.

(defn lookup [consul-url name]
  (-> (http/get (str consul-url "/v1/health/service/" name "?passing"))
      :body
      json/read-str))

Serversidig tjenesteoppdagelse

Ved serversidig tjenesteoppdagelse kaller klienten en lastbalanserer eller gateway, som spør registeret og videresender forespørselen. Klienten forblir enkel.

Hva er en API-gateway?

En API-gateway er ett enkelt inngangspunkt som ruter innkommende forespørsler til riktig backend-tjeneste. Den skjuler den interne topologien for klientene.

Gatewayens ansvarsområder

I tillegg til ruting håndterer en gateway ofte tverrgående hensyn:

  • Autentisering og autorisering
  • Begrensning av forespørselsfrekvens
  • Transformasjon av forespørsler og svar
  • Samling av kall til flere tjenester

En enkel gateway i Ring

De kan bygge en grunnleggende gateway i Clojure ved å matche banen og videresende forespørselen til den oppdagede tjenesten.

(defn gateway [request]
  (let [service (route-for (:uri request))
        target  (lookup-instance service)]
    (http/request
      (assoc request :url (str target (:uri request))))))

Autentisering ved kanten

Sentralisering av autentisering i gatewayen innebærer at de enkelte tjenestene stoler på gatewayen og unngår å duplisere innloggingslogikk.

(defn wrap-gateway-auth [handler]
  (fn [request]
    (if (valid-token? (get-in request [:headers "authorization"]))
      (handler request)
      {:status 401 :body "Unauthorized"})))

Begrensning av forespørselsfrekvens

Gatewayen er et naturlig sted å begrense misbrukende klienter før forespørslene når tjenestene deres.

(defn wrap-rate-limit [handler limit]
  (fn [request]
    (if (under-limit? (client-id request) limit)
      (handler request)
      {:status 429 :body "Too Many Requests"})))

Sette det hele sammen

Et produksjonsoppsett: Tjenestene registrerer seg selv i et register med helsesjekker, og en gateway oppdager dem, håndhever autentisering og frekvensbegrensninger og ruter deretter forespørslene. Dette holder klientene frikoblet fra interne endringer.

Hurtigsjekk

Test kunnskapene deres om tjenesteoppdagelse.

Oppsummering

De har lært hvordan tjenester oppdager hverandre, og hvordan en gateway samler tilgangen på ett sted.

  • Registre som Consul sporer instanser ved hjelp av helsesjekker
  • Tjenesteoppdagelse kan være klientsidig eller serversidig
  • Gatewayer sentraliserer ruting, autentisering og begrensning av forespørselsfrekvens
Gratis å komme i gang

Lær deg Clojure med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Tjenesteoppdagelse og API-gatewayer» gratis?

Ja – hele teksten i «Tjenesteoppdagelse og API-gatewayer» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Clojure: funksjonell programmering og backendutvikling på JVM-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.

Hva lærer jeg i «Tjenesteoppdagelse og API-gatewayer»?

Lær hvordan Clojure-mikrotjenester finner hverandre dynamisk, og hvordan en API-gateway gir ett sikkert inngangspunkt til systemet Deres. Du øver på Clojure: funksjonell programmering og backendutvikling på JVM med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Clojure: funksjonell programmering og backendutvikling på JVM?

Ingen tidligere erfaring er nødvendig. Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Tjenesteoppdagelse og API-gatewayer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Clojure: funksjonell programmering og backendutvikling på JVM-leksjonen?

Ja. Alle Clojure: funksjonell programmering og backendutvikling på JVM-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Utforme Clojure-mikrotjenester
  2. Konteinere med Docker
  3. Distribusjon til skyplattformer
  4. Tjenesteoppdagelse og API-gatewayer
← Tilbake til Clojure: funksjonell programmering og backendutvikling på JVM