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

Varamenetelmien ja aikakatkaisujen toteuttaminen

Tutustukaa varamenetelmien ja aikakatkaisujen toteuttamiseen, jotta palvelujen käytöstä poissaolo tai hitaat vastaukset voidaan käsitellä hallitusti.

Oppitunti 3/411 vaihetta

Varamenetelmien ja aikakatkaisujen toteuttaminen on ilmainen Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Tervetuloa vikasietoisuusmalleihin

Tässä oppitunnissa tutustumme kahteen tärkeään malliin vikasietoisten mikropalveluiden rakentamisessa: vararatkaisuihin ja aikakatkaisuihin.

Näiden mallien avulla sovelluksesi voivat käsitellä muiden palveluiden häiriöitä ja hitaita vastauksia hallitusti, mikä tekee järjestelmästä vakaamman ja luotettavamman.

Mikä on vararatkaisu?

Vararatkaisu tarjoaa vaihtoehtoisen toimintatavan, kun ensisijainen operaatio epäonnistuu tai kohtaa virheen.

  • Sen ansiosta sovellus voi vastata edelleen, vaikka toiminnallisuus olisi osittainen, sen sijaan että se epäonnistuisi kokonaan.
  • Voitte ajatella sitä palvelukutsujen varasuunnitelmana.
  • Tämä mahdollistaa hallittuasteisen toimintojen heikkenemisen, jossa järjestelmä tarjoaa rajoitetummat toiminnot täydellisen epäonnistumisen sijaan.

Vararatkaisu käytännössä: oletustiedot

Kuvitelkaa verkkokauppa. Jos yksilöllisiä tuotesuosituksia tarjoava palvelu epäonnistuu, ette halua koko sivun rikkoutuvan.

Vararatkaisu voisi näyttää esimerkiksi:

  • Suosittuja tuotteita (oletusluettelo)
  • Välimuistiin tallennettuja suosituksia
  • Yksinkertaisen viestin, kuten ”Suositukset eivät ole tällä hetkellä saatavilla”

Käyttökokemus säilyy toimivana pienestä häiriöstä huolimatta.

Yksinkertaisen vararatkaisun koodaaminen

Katsotaan yksinkertaista Java-esimerkkiä. Jos tässä esimerkissä ”ulkoinen palvelu” heittää virheen, otamme virheen kiinni ja palautamme oletusarvon sen sijaan, että sovellus kaatuisi.

public class FallbackExample {

  public String getProductRecommendation() {
    try {
      // Simulate calling an external service that might fail
      if (Math.random() < 0.5) {
        throw new RuntimeException("Service unavailable!");
      }
      return "Personalized Recommendation A";
    } catch (Exception e) {
      // Fallback: return a default recommendation
      System.out.println("Fallback activated: " + e.getMessage());
      return "Default Popular Product";
    }
  }

  public static void main(String[] args) {
    FallbackExample app = new FallbackExample();
    System.out.println("Recommendation: " + app.getProductRecommendation());
    System.out.println("Recommendation: " + app.getProductRecommendation());
  }
}

Miksi aikakatkaisuja tarvitaan?

Vararatkaisut käsittelevät häiriöitä, kun taas aikakatkaisut ratkaisevat hitaiden vastausten ongelmia. Palvelu ei välttämättä epäonnistu kokonaan, mutta vastaaminen voi kestää liian kauan.

  • Resurssien ehtyminen: Rajaton odottaminen sitoo resursseja, kuten säikeitä ja yhteyksiä.
  • Ketjureaktiomaiset häiriöt: Hidas palvelu voi hidastaa muita siitä riippuvia palveluita, mikä johtaa koko järjestelmän hidastumiseen.

Aikakatkaisut määrittävät operaatiolle enimmäiskeston.

Aikakatkaisujen tyypit

Verkkokutsuja tehdessänne kohtaatte usein erilaisia aikakatkaisuja:

  • Yhteyden aikakatkaisu: Etäpalveluun muodostettavan yhteyden enimmäisaika. Jos yhteyttä ei muodosteta tämän ajan kuluessa, operaatio epäonnistuu.
  • Lukuajan aikakatkaisu: Enimmäisaika, jonka kuluessa tietoja on vastaanotettava yhteyden muodostamisen jälkeen. Jos palvelu lakkaa lähettämästä tietoja, tämä aikakatkaisu laukeaa.
  • Pyynnön aikakatkaisu: Koko operaation alusta loppuun kattava aikakatkaisu. Se sisältää usein sekä yhteyden että lukemisen aikakatkaisut.

Pyynnön aikakatkaisun määrittäminen

Java-kielessä aikakatkaisujen määrittäminen riippuu käyttämästänne asiakaskirjastosta, kuten OkHttp- tai HttpClient-kirjastosta. Periaate näyttää tältä:

HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(5)) .build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://slowservice.com/data")) .timeout(Duration.ofSeconds(10)) // Request timeout .GET() .build();

Näin varmistetaan, ettei pyyntö jää odottamaan loputtomasti.

Aikakatkaisun ja vararatkaisun yhdistäminen

Aikakatkaisut ja vararatkaisut ovat yhdessä käytettyinä tehokkaita. Aikakatkaisu aiheuttaa häiriön, jonka vararatkaisu voi sen jälkeen käsitellä.

Laajennetaan edellistä esimerkkiä. Simuloimme hidasta palvelukutsua. Jos kutsu kestää liian kauan, aikakatkaisu laukeaa ja vararatkaisumme tarjoaa oletusvastauksen.

import java.util.concurrent.*;

public class TimeoutFallbackExample {

  public String getProductRecommendationWithTimeout() {
    ExecutorService executor = Executors.newSingleThreadExecutor();
    try {
      Future<String> future = executor.submit(() -> {
        // Simulate a slow external service
        long delay = (long) (Math.random() * 3000) + 1000; // 1-4 seconds
        Thread.sleep(delay);
        return "Personalized Recommendation B";
      });

      // Wait for the result, but only for 2 seconds
      return future.get(2, TimeUnit.SECONDS);

    } catch (TimeoutException e) {
      System.out.println("Timeout occurred: " + e.getMessage());
      return "Fallback: Timed out default product";
    } catch (Exception e) {
      System.out.println("Other error: " + e.getMessage());
      return "Fallback: Error default product";
    } finally {
      executor.shutdown();
    }
  }

  public static void main(String[] args) {
    TimeoutFallbackExample app = new TimeoutFallbackExample();
    System.out.println("Recommendation: " + app.getProductRecommendationWithTimeout());
    System.out.println("Recommendation: " + app.getProductRecommendationWithTimeout());
  }
}

Molempien käytön hyödyt

Yhdistämällä aikakatkaisut ja vararatkaisut saavutatte paremman vikasietoisuuden:

  • Parempi käyttökokemus: Käyttäjien ei tarvitse odottaa loputtomasti sivun latautumista tai operaation valmistumista.
  • Resurssien suojaaminen: Palvelunne eivät kuluta resursseja vastaamattomien riippuvuuksien odottamiseen.
  • Järjestelmän vakaus: Tämä estää ketjureaktiomaiset häiriöt, joissa yksi hidas palvelu kaataa useita muita palveluita.
  • Ennakoitava toiminta: Järjestelmä toimii ennakoitavasti myös kuormituksen aikana.

Pikatarkistus: vikasietoisuus

Suunnittelette mikropalvelua, joka kutsuu ulkoista maksuvälityspalvelua. Jos maksupalvelu on hidas tai poissa käytöstä, haluatte:

  • Estää palvelua jäämästä odottamaan loputtomasti.
  • Näyttää käyttäjälle virhesivun sijaan viestin ”Maksaminen ei ole tällä hetkellä saatavilla”.

Mitä vikasietoisuusmalleja tässä tilanteessa kannattaa priorisoida?

Kertaus: vararatkaisut ja aikakatkaisut

Hienoa työtä! Olet oppinut kaksi olennaista vikasietoisuusmallia:

  • Vararatkaisut: Tarjoavat vaihtoehtoisia vastauksia häiriöiden hallittuun käsittelyyn ja parantavat käyttökokemusta.
  • Aikakatkaisut: Rajoittavat operaation kestoa ja estävät hitaiden palveluiden aiheuttaman resurssien ehtymisen ja ketjureaktiomaiset häiriöt.

Näiden mallien käyttäminen yhdessä tekee mikropalveluista vakaampia ja luotettavampia.

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 ”Varamenetelmien ja aikakatkaisujen toteuttaminen” ilmainen?

Kyllä – oppitunnin ”Varamenetelmien ja aikakatkaisujen toteuttaminen” 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 ”Varamenetelmien ja aikakatkaisujen toteuttaminen”?

Tutustukaa varamenetelmien ja aikakatkaisujen toteuttamiseen, jotta palvelujen käytöstä poissaolo tai hitaat vastaukset voidaan käsitellä hallitusti. 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 3/4.

Kuinka kauan ”Varamenetelmien ja aikakatkaisujen toteuttaminen”-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)