API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway) · Oppitunti

Uudelleenyritysten ja aikakatkaisujen määritys

Määrittäkää automaattiset uudelleenyritykset tilapäisten virheiden varalle ja aikakatkaisut, jotta pitkään kestävät pyynnöt eivät varaa resursseja.

Oppitunti 2/412 vaihetta

Uudelleenyritysten ja aikakatkaisujen määritys on ilmainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.

Vikasietoisten yhdyskäytävien rakentaminen

Mikropalveluissa palvelut voivat vikaantua tai hidastua. Jotta sovelluksemme toimisivat sujuvasti, meidän on rakennettava niihin vikasietoisuutta.

  • Vikasietoisuus tarkoittaa, että järjestelmä voi palautua virheistä ja jatkaa toimintaansa.
  • Spring Cloud Gateway tarjoaa työkaluja API-yhdyskäytävän vikasietoisuuden parantamiseen.
  • Kaksi keskeistä vikasietoisuusstrategiaa ovat aikakatkaisut ja uudelleenyritykset.

Hitaiden vastausten estäminen aikakatkaisuilla

Timeout on rajoitus sille, kuinka kauan toiminnon suorittaminen saa kestää. Jos toiminto ei valmistu kyseisen ajan kuluessa, se pysäytetään automaattisesti.

  • Timeoutit estävät pyyntöjä jäämästä odottamaan loputtomasti.
  • Ne vapauttavat resurssit, kuten verkkoyhteydet ja säikeet, jotka muuten olisivat hitaan tai vastaamattoman palvelun käytössä.
  • Yhdyskäytävässä timeoutit varmistavat, ettei hidas taustapalvelu hidasta koko yhdyskäytävää tai muita pyyntöjä.

Lukuajan aikakatkaisujen määrittäminen

Spring Cloud Gatewayssä reiteille voi määrittää omat timeoutit. ReadTimeout-suodatinta käytetään yleensä rajoittamaan aikaa, jonka yhdyskäytävä odottaa vastausta taustapalvelulta yhteyden muodostamisen jälkeen.

  • Tätä timeoutia sovelletaan reittikohtaisesti.
  • Se auttaa estämään yhtä hidasta taustapalvelua heikentämästä yhdyskäytävän yleistä suorituskykyä.
  • Arvo määritetään yleensä millisekunteina.

Lukuajan aikakatkaisun määritysesimerkki

Näin voit määrittää ReadTimeout-timeoutin tietylle reitille tiedostossa application.yml. Tässä esimerkissä pyyntöjen lukuaika reitillä /service-a/** rajoitetaan viiteen sekuntiin:

Muistakaa, että tämä on osa Spring Boot -sovelluksen määrityksiä.

spring:
  cloud:
    gateway:
      routes:
        - id: service_a_route
          uri: http://localhost:8081
          predicates:
            - Path=/service-a/**
          filters:
            - ReadTimeout=5000

Tilapäisten virheiden käsittely uudelleenyrityksillä

Uudelleenyrityksillä tarkoitetaan epäonnistuneen pyynnön lähettämistä automaattisesti uudelleen siinä toivossa, että se onnistuu seuraavalla yrityksellä.

  • Ne sopivat erityisesti tilapäisiin virheisiin, kuten verkkohäiriöihin tai lyhyeen palvelun uudelleenkäynnistykseen.
  • Uudelleenyrityksiä tulee käyttää harkiten, etenkin ei-idempotenttien toimintojen yhteydessä. Tällaiset toiminnot tuottavat eri tuloksen, jos ne suoritetaan useita kertoja.
  • Spring Cloud Gatewayn voi määrittää yrittämään pyyntöjä automaattisesti uudelleen taustapalveluille.

Retry GatewayFilter

Spring Cloud Gateway tarjoaa Retry-suodattimen, jolla epäonnistuneiden pyyntöjen automaattiset uudelleenyritykset voidaan ottaa käyttöön. Uudelleenyritysten logiikasta voi määrittää useita asetuksia:

  • retries: Uudelleenyritysten enimmäismäärä.
  • statuses: HTTP-tilakoodit, joiden yhteydessä pyyntö yritetään uudelleen, esimerkiksi 503 (Service Unavailable).
  • methods: HTTP-metodit, joille uudelleenyritykset sallitaan, esimerkiksi GET ja PUT.

Uudelleenyritysten määritysesimerkki

Määritetään Retry-suodatin. Tässä esimerkissä pyyntöjä yritetään enintään kolme kertaa uudelleen, jos taustapalvelu palauttaa 5XX- tai 404-virheen. Asetus koskee GET-pyyntöjä reitille /service-b/**:

spring:
  cloud:
    gateway:
      routes:
        - id: service_b_route
          uri: http://localhost:8082
          predicates:
            - Path=/service-b/**
          filters:
            - name: Retry
              args:
                retries: 3
                statuses: 
                  - SERVER_ERROR
                  - NOT_FOUND
                methods:
                  - GET

Yksinkertainen uudelleenyrityslogiikan esittely

Spring Cloud Gateway käsittelee uudelleenyritykset määritysten avulla, mutta perusidea on silmukka, joka jatkuu onnistumiseen tai yritysten enimmäismäärän saavuttamiseen asti. Seuraava Java-ohjelma havainnollistaa yksinkertaista uudelleenyrityssilmukkaa:

public class RetryDemo {
  private static int attempt = 0;

  public static boolean simulateBackendCall() {
    System.out.println("Attempt " + (++attempt));
    return attempt < 3; // Fails for first 2 attempts
  }

  public static void main(String[] args) {
    int maxRetries = 2;
    for (int i = 0; i <= maxRetries; i++) {
      if (!simulateBackendCall()) {
        System.out.println("Success!");
        return;
      }
      System.out.println("Failed. Retrying...");
      try { Thread.sleep(100); } catch (InterruptedException e) {}
    }
    System.out.println("Max retries reached. Operation failed.");
  }
}

Timeoutien ja uudelleenyritysten yhdistäminen

Timeoutit ja uudelleenyritykset toimivat usein yhdessä:

  • Timeout voi käynnistää uudelleenyrityksen, jos pyyntö ei valmistu määritetyn ajan kuluessa.
  • Jos pyynnön suoritus aikakatkaistaan, yhdyskäytävä voi yrittää pyyntöä uudelleen siinä toivossa, että seuraava yritys on nopeampi tai palvelu vastaa.
  • Nämä asetukset on tärkeää määrittää huolellisesti, jotta vältetään loputtomat silmukat ja liialliset viiveet. Uudelleenyritys voi tapahtua esimerkiksi *lukuajan aikakatkaisun jälkeen*, tai yleinen timeout voi kattaa kaikki uudelleenyritykset.

Resilienssin parhaat käytännöt

Kun otatte käyttöön timeouteja ja uudelleenyrityksiä, huomioikaa seuraavat parhaat käytännöt:

  • Idempotenttius: Yrittäkää toimintoja uudelleen vain, jos ne ovat idempotentteja, kuten GET ja PUT, ellette ole toteuttaneet erityistä logiikkaa ei-idempotenttien toimintojen, kuten POST-pyyntöjen, käsittelyyn.
  • Eksponentiaalinen backoff: Kasvattakaa uudelleenyritysten välistä viivettä, jotta vaikeuksissa olevaa palvelua ei kuormiteta liikaa.
  • Circuit breakerit: Yhdistäkää nämä circuit breakereihin, joita käsiteltiin oppitunnilla 10.1, jotta selvästi toimimattomien palvelujen uudelleenyritykset voidaan lopettaa.
  • Valvonta: Seuratkaa uudelleenyritysten määriä ja timeoutien esiintymistä jatkuvasti ongelmallisten palvelujen tunnistamiseksi.

Yhdyskäytävän resilienssin pikatesti

Määritätte Spring Cloud Gateway -reittiä taustapalvelulle, jossa esiintyy ajoittain lyhyitä verkkohäiriöitä ja joka palauttaa tällöin virheen 503 Service Unavailable. Haluatte, että yhdyskäytävä yrittää pyyntöä automaattisesti uudelleen muutaman kerran ennen luovuttamista. Millä suodattimella ja määrityksellä tämä saavutetaan parhaiten?

Kertaus: Timeoutit ja uudelleenyritykset

Olemme tarkastelleet, kuinka timeoutit ja uudelleenyritykset ovat keskeisiä rakennettaessa resilienttejä API-yhdyskäytäviä Spring Cloud Gatewayllä.

  • Timeoutit estävät pyyntöjä jäämästä odottamaan ja vapauttavat resursseja.
  • ReadTimeout-suodatin määrittää, kuinka kauan taustapalvelun vastausta odotetaan.
  • Uudelleenyritykset lähettävät pyynnöt automaattisesti uudelleen tilapäisten virheiden yhteydessä.
  • Retry-suodatin mahdollistaa uudelleenyritysten, tilakoodien ja HTTP-metodien tarkan hallinnan.
  • Näiden yhdistäminen parhaisiin käytäntöihin auttaa rakentamaan vankkoja mikropalveluarkkitehtuureja.
Aloita maksutta

Opi API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway) tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Uudelleenyritysten ja aikakatkaisujen määritys” ilmainen?

Kyllä – oppitunnin ”Uudelleenyritysten ja aikakatkaisujen määritys” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssin, päivitä CoddyKit PROhon. API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Uudelleenyritysten ja aikakatkaisujen määritys”?

Määrittäkää automaattiset uudelleenyritykset tilapäisten virheiden varalle ja aikakatkaisut, jotta pitkään kestävät pyynnöt eivät varaa resursseja. Harjoittelet API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Uudelleenyritysten ja aikakatkaisujen määritys”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunnilla?

Kyllä. Jokainen API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Circuit Breaker -malli Resilience4j:llä
  2. Uudelleenyritysten ja aikakatkaisujen määritys
  3. Virheenkäsittely ja varatoiminnot
  4. Bulkhead-eristys ja nopeusrajoitus vikasietoisuutta varten
← Takaisin: API-yhdyskäytävä ja käänteisvälityspalvelin (Nginx + Spring Cloud Gateway)