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

Choreography Saga selitettynä

Ymmärtäkää choreografiaan perustuva lähestymistapa, jossa palvelut viestivät suoraan tapahtumien välityksellä ilman keskitettyä koordinaattoria.

Oppitunti 2/412 vaihetta

Choreography Saga selitettynä 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.

Choreography Sagan esittely

Tervetuloa! Tässä oppitunnissa tutustumme Choreography Saga -malliin. Se on tapa hallita monimutkaisia, useiden palvelujen läpi kulkevia liiketoimintatransaktioita hajautetusti.

Toisin kuin orkesterissa, jossa on kapellimestari, choreography muistuttaa tanssia, jossa jokainen tanssija tuntee oman osuutensa ja reagoi muiden liikkeisiin.

Hajautettu tapahtumavirta

Choreography Sagassa ei ole keskitettyä koordinaattoripalvelua. Sen sijaan jokainen transaktioon osallistuva palvelu julkaisee tapahtumia ja kuuntelee muiden palvelujen tapahtumia.

  • Palvelut reagoivat tapahtumiin.
  • Ne suorittavat oman osuutensa transaktiosta.
  • Ne julkaisevat uusia tapahtumia käynnistääkseen seuraavan vaiheen.

Esimerkki tilauksen käsittelystä

Käytetään yleistä esimerkkiä: asiakastilauksen käsittelyä. Se sisältää useita vaiheita eri palveluissa:

  • Order Service: Luo tilauksen.
  • Payment Service: Käsittelee maksun.
  • Inventory Service: Päivittää varastotiedot.

Miten nämä palvelut koordinoivat toimintaansa ilman keskitettyä ohjausta?

Vaihe 1: Order Created -tapahtuma

Kun asiakas tekee tilauksen, Order Service käynnistää Sagan. Se tallentaa tilauksen ja julkaisee sitten tapahtuman OrderCreatedEvent.

Tämä tapahtuma ilmoittaa muille palveluille, että uusi tilaus on valmis käsiteltäväksi.

public class OrderService {
  public static void processNewOrder(String orderId) {
    System.out.println("Order Service: Received new order " + orderId);
    System.out.println("Order Service: Saving order " + orderId + " to database...");
    // Imagine database interaction here
    System.out.println("Order Service: Order " + orderId + " saved.");
    System.out.println("Order Service: Publishing 'OrderCreatedEvent' for " + orderId);
  }

  public static void main(String[] args) {
    processNewOrder("ORD789"); // Simulate a new order coming in
  }
}

Vaihe 2: Payment Service reagoi

Payment Service on tilannut OrderCreatedEvent-tapahtumat. Kun se vastaanottaa tällaisen tapahtuman, se käsittelee tilauksen maksun.

Käsittelyn jälkeen se julkaisee joko tapahtuman PaymentProcessedEvent tai PaymentFailedEvent.

public class PaymentService {
  public static void handleOrderCreated(String orderId) {
    System.out.println("Payment Service: Received 'OrderCreatedEvent' for order " + orderId);
    System.out.println("Payment Service: Processing payment for " + orderId + "...");
    // Simulate payment gateway interaction
    boolean paymentSuccess = true; // For this example, assume success
    if (paymentSuccess) {
      System.out.println("Payment Service: Payment successful for " + orderId + ".");
      System.out.println("Payment Service: Publishing 'PaymentProcessedEvent' for " + orderId);
    } else {
      System.out.println("Payment Service: Payment failed for " + orderId + ".");
      System.out.println("Payment Service: Publishing 'PaymentFailedEvent' for " + orderId);
    }
  }

  public static void main(String[] args) {
    handleOrderCreated("ORD789"); // Simulate receiving an event
  }
}

Vaihe 3: Inventory Service päivittää tiedot

Seuraavaksi Inventory Service kuuntelee PaymentProcessedEvent-tapahtumia. Vastaanotettuaan sellaisen se vähentää tilattujen tuotteiden varastomäärää.

Sen jälkeen se julkaisee tapahtuman InventoryUpdatedEvent ilmoittaakseen tehtävänsä valmistumisesta.

public class InventoryService {
  public static void handlePaymentProcessed(String orderId) {
    System.out.println("Inventory Service: Received 'PaymentProcessedEvent' for order " + orderId);
    System.out.println("Inventory Service: Updating stock for order " + orderId + "...");
    // Simulate inventory database update
    System.out.println("Inventory Service: Stock updated for order " + orderId + ".");
    System.out.println("Inventory Service: Publishing 'InventoryUpdatedEvent' for " + orderId);
  }

  public static void main(String[] args) {
    handlePaymentProcessed("ORD789"); // Simulate receiving an event
  }
}

Epäonnistumisten haaste

Mitä tapahtuu, jos jokin tämän kulun vaihe epäonnistuu? Jos esimerkiksi maksu epäonnistuu, emme voi päivittää varastoa. Lisäksi meidän on kumottava kaikki aiemmin onnistuneesti suoritetut vaiheet.

Tässä tarvitaan kompensaatiologiikkaa. Siinä aiemmin suoritetut toimet perutaan.

Kompensaatio Choreography-mallissa

Choreography Sagassa myös kompensaatio toteutetaan tapahtumien avulla. Jos palvelu epäonnistuu, se julkaisee kompensaatiotapahtuman.

Muut palvelut kuuntelevat näitä kompensaatiotapahtumia ja suorittavat omat peruutustoimensa.

Esimerkki kompensaatiosta: maksu epäonnistuu

Oletetaan, että Payment Service epäonnistuu ja julkaisee tapahtuman PaymentFailedEvent. Sagan käynnistänyt Order Service kuuntelee tätä tapahtumaa.

Vastaanotettuaan tapahtuman Order Service päivittää tilauksen tilaksi 'Cancelled' ja peruu näin transaktion omalta osaltaan.

public class OrderService {
  public static void handlePaymentFailed(String orderId) {
    System.out.println("Order Service: Received 'PaymentFailedEvent' for order " + orderId);
    System.out.println("Order Service: Initiating compensation for " + orderId + ".");
    // Change order status to 'Cancelled'
    System.out.println("Order Service: Updating order " + orderId + " status to 'Cancelled'.");
    // Could publish OrderCancelledEvent if other services need to know
  }

  public static void main(String[] args) {
    handlePaymentFailed("ORD789"); // Simulate receiving a compensation event
  }
}

Choreography-mallin edut ja haitat

Choreography tarjoaa etuja, mutta siihen liittyy myös haasteita:

  • Edut: Palvelut ovat hyvin löyhästi kytkettyjä, keskitettyä vikapistettä ei ole, ja malli on yksinkertaisille kuluille helppo toteuttaa.
  • Haitat: Koko transaktiokulun valvonta voi olla vaikeampaa, kompensaatiologiikka voi olla monimutkaista, ja huolellisesti suunnittelemattomana seurauksena voi olla ”tapahtumamyrskyjä”.

Choreography-testi

Ajatellaan Choreography Sagaa, jossa julkaistaan tapahtuma 'OrderConfirmedEvent'. Mikä seuraavista väitteistä kuvaa oikein, miten seuraava vaihe käynnistetään?

Kertaus: Choreography Saga

Olette oppineet Choreography Saga -mallista:

  • Se on hajautettu lähestymistapa hajautettuihin transaktioihin.
  • Palvelut viestivät julkaisemalla tapahtumia ja tilaamalla niitä.
  • Keskitettyä koordinaattoria ei ole, vaan jokainen palvelu tuntee oman roolinsa.
  • Epäonnistumisten kompensointi hoidetaan myös tapahtumien avulla, jolloin palvelut voivat perua omat toimensa.

Tämä malli edistää löyhää kytkentää, mutta valvonta ja kompensointi on suunniteltava huolellisesti.

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 ”Choreography Saga selitettynä” ilmainen?

Kyllä – oppitunnin ”Choreography Saga selitettynä” 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 ”Choreography Saga selitettynä”?

Ymmärtäkää choreografiaan perustuva lähestymistapa, jossa palvelut viestivät suoraan tapahtumien välityksellä ilman keskitettyä koordinaattoria. 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 ”Choreography Saga selitettynä”-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. Mikä on Saga-malli
  2. Choreography Saga selitettynä
  3. Orchestration Saga selitettynä
  4. Choreographyn ja orchestrationin välillä valitseminen
← Takaisin: Mikropalveluiden viestintämallit (Saga, Circuit Breaker)