Mikropalveluiden viestintämallit (Saga, Circuit Breaker) · Oppitunti

Uudelleenyritysmallin perusteet

Oppikaa uudelleenyritysmallin perusteet, jotta epäonnistuneet toiminnot voidaan yrittää automaattisesti uudelleen ja järjestelmän vankkuutta parantaa.

Oppitunti 2/412 vaihetta

Uudelleenyritysmallin perusteet on ilmainen Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-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 Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-kurssilla on yhteensä 4 oppituntia.

Kohtaatteko tilapäisiä häiriöitä?

Kuvitelkaa yrittävänne lähettää viestin, mutta internet-yhteytenne katkeaa hetkeksi. Mitä teette?

Yritätte todennäköisesti uudelleen! Tämä yksinkertainen ihmisen toimintatapa on ohjelmistojen Retry Pattern -mallin perusidea.

Mikä Retry Pattern on?

Retry Pattern on keskeinen vikasietoisuustekniikka. Siinä epäonnistunutta operaatiota yritetään suorittaa automaattisesti uudelleen.

Sitä käytetään, kun virheen odotetaan olevan tilapäinen, eli lyhytaikainen ja todennäköisesti itsestään pian korjaantuva, kuten lyhyt verkkokatkos tai väliaikainen tietokantalukko.

Miksi uudelleenyrityksiä käytetään?

Hajautetuissa järjestelmissä palvelut ovat usein riippuvaisia toisistaan. Virheitä voi ilmetä monista syistä:

  • Verkko-ongelmat: Lyhyt yhteyskatkos tai suuri viive.
  • Resurssikiistat: Tietokanta tai palvelu on tilapäisesti ylikuormittunut.
  • Palveluiden uudelleenkäynnistykset: Riippuvainen palvelu ei ole lyhyen aikaa käytettävissä päivityksen aikana.

Uudelleenyritykset auttavat sovellusta palautumaan sujuvasti näistä häiriöistä ilman kaatumista tai manuaalisen puuttumisen tarvetta.

Uudelleenyrityssilmukan perusteet

Yksinkertaisimmillaan Retry Pattern toimii näin:

  1. Yritetään suorittaa operaatio.
  2. Jos se epäonnistuu, tarkistetaan, onko kyseessä uudelleenyritykseen sopiva virhe.
  3. Jos uudelleenyritys on mahdollinen, laskuria kasvatetaan ja yritetään uudelleen.
  4. Lopetetaan tietyn yritysmäärän jälkeen tai, kun operaatio onnistuu.

Katsotaan seuraavaksi yksinkertaista esimerkkiä ilman viiveitä.

Koodi: yksinkertainen uudelleenyrityslogiikka

Tämä koodi simuloi operaatiota, joka epäonnistuu kaksi kertaa ennen onnistumista. Huomaatte, kuinka while-silmukka jatkaa yrittämistä, kunnes operaatio onnistuu tai yritykset loppuvat.

public class Main {
  public static void main(String[] args) {
    boolean success = false;
    int maxAttempts = 3;
    int currentAttempt = 0;

    while (!success && currentAttempt < maxAttempts) {
      currentAttempt++;
      System.out.println("Attempt " + currentAttempt + ": Trying to connect...");
      // Simulate failure for first two attempts
      if (currentAttempt < 3) {
        System.out.println("Connection failed!");
      } else {
        System.out.println("Connection successful!");
        success = true;
      }
    }

    if (!success) {
      System.out.println("Failed after " + maxAttempts + " attempts.");
    }
  }
}

Viiveen lisääminen: kiinteä uudelleenyritysviive

Välitön uudelleenyritys voi kuormittaa vaikeuksissa olevaa palvelua liikaa tai epäonnistua uudelleen, jos ongelman korjaantuminen vaatii aikaa. Siksi lisäämme viiveitä.

Kiinteää viivettä käyttävä uudelleenyritys odottaa saman ajan jokaisen epäonnistuneen yrityksen välillä. Näin järjestelmällä on mahdollisuus palautua.

Koodi: kiinteä uudelleenyritysviive

Tässä olemme lisänneet 1 sekunnin viiveen (1000ms) käyttämällä Thread.sleep()-kutsua jokaisen epäonnistuneen yrityksen jälkeen. Tämä on yleinen tapa antaa järjestelmälle hieman hengähdystaukoa.

public class Main {
  public static void main(String[] args) {
    boolean success = false;
    int maxAttempts = 3;
    int currentAttempt = 0;
    long delayMillis = 1000; // 1 second delay

    while (!success && currentAttempt < maxAttempts) {
      currentAttempt++;
      System.out.println("Attempt " + currentAttempt + ": Trying to connect...");
      // Simulate failure for first two attempts
      if (currentAttempt < 3) {
        System.out.println("Connection failed!");
        try {
          Thread.sleep(delayMillis); // Wait before retrying
          System.out.println("Waiting " + delayMillis + "ms...");
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
        }
      } else {
        System.out.println("Connection successful!");
        success = true;
      }
    }

    if (!success) {
      System.out.println("Failed after " + maxAttempts + " attempts.");
    }
  }
}

Älykkäämmät odotusajat: eksponentiaalinen viive

Vaikka kiinteät viiveet toimivat, joskus odotusaikaa on parempi kasvattaa jokaisen peräkkäisen uudelleenyrityksen yhteydessä. Tätä kutsutaan eksponentiaaliseksi viiveeksi.

Voitte esimerkiksi odottaa ensin yhden sekunnin, sitten kaksi, neljä ja lopuksi kahdeksan sekuntia. Tämä vähentää vaikeuksissa olevan palvelun kuormitusta ja antaa sille enemmän aikaa palautua.

Milloin Retry Pattern -mallia käytetään?

Uudelleenyritykset ovat tehokkaimpia seuraavissa tilanteissa:

  • Tilapäiset verkkovirheet: Lyhyet yhteyskatkokset ja aikakatkaisut.
  • Resurssien tilapäinen saavuttamattomuus: Tietokantayhteyksien allas on hetkellisesti täynnä.
  • Optimistiset samanaikaisuusristiriidat: Kun useat käyttäjät yrittävät päivittää samaa tietuetta samanaikaisesti.
  • Lyhyet palvelun uudelleenkäynnistykset: Mikropalvelua otetaan parhaillaan uudelleen käyttöön.

Milloin uudelleenyrityksiä EI pidä käyttää

Uudelleenyritykset eivät ratkaise kaikkia ongelmia. Vältä niiden käyttöä seuraavissa tilanteissa:

  • Ei-tilapäiset virheet: Virheet, jotka johtuvat virheellisistä syötteistä, valtuutusvirheistä tai puuttuvista resursseista ja jotka eivät poistu itsestään.
  • Ei-idempotentit operaatiot: Jos operaation toistaminen aiheuttaa tahattomia sivuvaikutuksia, kuten asiakkaan laskuttamisen kahdesti. Idempotenssi tarkoittaa, että operaatio voidaan suorittaa useita kertoja ilman, että tulos muuttuu ensimmäisen suorituksen jälkeen.
  • Pitkäkestoiset häiriöt: Jos palvelu on pysyvästi poissa käytöstä tai siinä on laaja häiriö.

Testaa tietosi!

Missä tilanteessa Retry Pattern -mallin käyttäminen on yleensä hyvä ratkaisu?

Retry Pattern -mallin yhteenveto

Olet oppinut Retry Pattern -mallin perusteet!

  • Sitä käytetään epäonnistuneiden operaatioiden automaattiseen uudelleenyritykseen.
  • Se on tärkeä hajautettujen järjestelmien tilapäisten häiriöiden käsittelyssä.
  • Perustoteutus sisältää silmukan ja yritysten enimmäismäärän.
  • Viiveiden lisääminen, joko kiinteän viiveen tai eksponentiaalisen backoffin avulla, antaa järjestelmille aikaa palautua.
  • On tärkeää tietää, milloin mallia käytetään, esimerkiksi verkko-ongelmissa, ja milloin sitä vältetään, esimerkiksi ei-tilapäisten virheiden ja ei-idempotenttien operaatioiden yhteydessä.

Seuraavaksi tutustumme muihin vikasietoisuusmalleihin, kuten vararatkaisuihin ja aikakatkaisuihin!

Aloita maksutta

Opi Mikropalveluiden viestintämallit (Saga, Circuit Breaker) 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 ”Uudelleenyritysmallin perusteet” ilmainen?

Kyllä – oppitunnin ”Uudelleenyritysmallin perusteet” 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 Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-kurssin, päivitä CoddyKit PROhon. Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Uudelleenyritysmallin perusteet”?

Oppikaa uudelleenyritysmallin perusteet, jotta epäonnistuneet toiminnot voidaan yrittää automaattisesti uudelleen ja järjestelmän vankkuutta parantaa. Harjoittelet Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Uudelleenyritysmallin perusteet”-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ä Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppitunnilla?

Kyllä. Jokainen Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-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. Miksi vikasietoisuus on tärkeää
  2. Uudelleenyritysmallin perusteet
  3. Varamenetelmien ja aikakatkaisujen toteuttaminen
  4. Bulkhead-malli
← Takaisin: Mikropalveluiden viestintämallit (Saga, Circuit Breaker)