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.
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=5000Tilapä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, esimerkiksi503(Service Unavailable).methods: HTTP-metodit, joille uudelleenyritykset sallitaan, esimerkiksiGETjaPUT.
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:
- GETYksinkertainen 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
GETjaPUT, ellette ole toteuttaneet erityistä logiikkaa ei-idempotenttien toimintojen, kutenPOST-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.
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
- Circuit Breaker -malli Resilience4j:llä
- Uudelleenyritysten ja aikakatkaisujen määritys
- Virheenkäsittely ja varatoiminnot
- Bulkhead-eristys ja nopeusrajoitus vikasietoisuutta varten