Communicatiepatronen voor microservices (Saga, Circuit Breaker) · Les

Casestudy's: patroonselectie

Bestudeer praktijkscenario's om te begrijpen wanneer u Saga, Circuit Breaker of andere communicatiepatronen toepast.

Les 1 van 411 stappen

Casestudy's: patroonselectie is een gratis Communicatiepatronen voor microservices (Saga, Circuit Breaker)-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Communicatiepatronen voor microservices (Saga, Circuit Breaker). Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Communicatiepatronen voor microservices (Saga, Circuit Breaker) bevat in totaal 4 lessen.

Het juiste patroon kiezen

Welkom bij de laatste minicursus! In microservices is het cruciaal om het juiste communicatiepatroon te kiezen voor het bouwen van robuuste en schaalbare systemen.

In deze les verken je scenario's uit de praktijk en leer je wanneer je patronen zoals Saga, Circuit Breaker, Retry of eenvoudigere methoden toepast.

Samenvatting: kernpatronen

Voordat we de casestudy's bekijken, halen we kort de belangrijkste patronen aan die we hebben behandeld:

  • Saga: beheert gedistribueerde transacties over meerdere services.
  • Circuit Breaker: voorkomt kettingreacties van fouten door verzoeken naar ongezonde services te stoppen.
  • Retry: probeert mislukte bewerkingen automatisch opnieuw.
  • Asynchronous Messaging: ontkoppelt services, waardoor niet-blokkerende communicatie mogelijk wordt.

Elk patroon heeft een eigen doel.

Casestudy 1: orderverwerking

Stel je een e-commerceplatform voor. Wanneer een klant een bestelling plaatst, moeten er verschillende dingen gebeuren:

  1. Items uit de voorraad halen.
  2. De betaling verwerken.
  3. De bestelling verzenden.

Als een stap mislukt, moet de volledige transactie idealiter worden teruggedraaid of gecompenseerd. Hiervoor is coördinatie tussen verschillende services nodig.

Oplossing 1: het Sagapatroon

Voor ons scenario met orderverwerking past het Sagapatroon perfect. Het zorgt ervoor dat een langlopende bedrijfstransactie die meerdere services omvat, óf succesvol wordt voltooid óf correct wordt gecompenseerd.

Een Saga coördineert lokale transacties in elke service met behulp van gebeurtenissen (Choreography) of een centrale orchestrator (Orchestration) om consistentie te behouden.

Casestudy 2: externe betalingsgateway

Je betalingsservice is afhankelijk van een externe betalingsgateway van een derde partij. Deze gateway kan soms uitvallen of traag worden door een hoge belasting.

Als je service verzoeken naar een defecte gateway blijft sturen, kunnen de eigen resources (threadpools, verbindingen) uitgeput raken en kan de service uiteindelijk crashen, wat tot een kettingreactie van fouten leidt.

Oplossing 2: Circuit Breaker en Retry

Om je te beschermen tegen een onbetrouwbare externe betalingsgateway is een Circuit Breaker essentieel. Deze laat aanvragen snel mislukken wanneer de gateway niet beschikbaar is, zodat uitputting van resources wordt voorkomen.

Je kunt dit combineren met een Retry pattern voor tijdelijke fouten. Als het circuit gesloten is en een aanvraag mislukt, kan een nieuwe poging slagen. Als het circuit echter open is, moeten nieuwe pogingen worden onderdrukt.

Conceptuele code: Circuit Breaker

Hier zie je een vereenvoudigde conceptuele weergave van hoe je een aanroep met een Circuit Breaker kunt omwikkelen. In echte implementaties worden bibliotheken gebruikt, maar de logica blijft hetzelfde.

class PaymentService {
  private CircuitBreaker cb = new CircuitBreaker();

  public void processPayment(double amount) {
    if (cb.allowRequest()) {
      try {
        // call external gateway
        System.out.println("Calling gateway...");
        // Assume gateway.charge(amount) might fail
        if (Math.random() < 0.3) {
          throw new RuntimeException("Gateway error");
        }
        cb.recordSuccess();
        System.out.println("Payment successful.");
      } catch (Exception e) {
        cb.recordFailure();
        System.out.println("Payment failed: " + e.getMessage());
      }
    } else {
      System.out.println("Circuit is open. Falling back.");
      // Implement fallback logic here
    }
  }
}

// Dummy CircuitBreaker for concept
class CircuitBreaker {
  private int failureCount = 0;
  private boolean isOpen = false;

  public boolean allowRequest() {
    if (isOpen) {
      // Add logic for Half-Open state here
      return false;
    }
    return true;
  }

  public void recordFailure() {
    failureCount++;
    if (failureCount > 3) { // Threshold
      isOpen = true;
      System.out.println("Circuit opened!");
    }
  }

  public void recordSuccess() {
    failureCount = 0;
    if (isOpen) {
      isOpen = false;
      System.out.println("Circuit closed!");
    }
  }
}

public class Main {
  public static void main(String[] args) {
    PaymentService service = new PaymentService();
    for (int i = 0; i < 10; i++) {
      System.out.println("\nAttempt " + (i + 1) + ":");
      service.processPayment(100.0);
    }
  }
}

Casestudy 3: rapportgeneratie

Een gebruiker vraagt een complex financieel rapport aan waarvan het genereren enkele minuten kan duren. De gebruiker heeft het rapport niet direct nodig, maar verwacht een melding wanneer het klaar is.

Als je deze aanvraag synchroon verwerkt, loopt de gebruikersinterface vast en blijven de resources van de webserver langdurig bezet. Dat heeft gevolgen voor andere gebruikers.

Oplossing 3: asynchrone verwerking

Voor langdurige, niet-kritieke bewerkingen zoals het genereren van rapporten is Asynchronous Messaging (met een berichtenwachtrij of eventbus) ideaal.

  • De aanvraag van de gebruiker wordt direct op een wachtrij geplaatst.
  • Een speciale worker-service pakt de taak op en verwerkt deze op de achtergrond.
  • Na voltooiing brengt de worker de gebruiker op de hoogte (bijvoorbeeld via e-mail of een pushmelding).

Hierdoor worden de aanvraag en de uitvoering van elkaar losgekoppeld, wat de responsiviteit en schaalbaarheid verbetert.

Welk patroon gebruik je?

Stel je voor dat je analyseservice regelmatig een aanbevelingsservice aanroept om gepersonaliseerde gegevens op te halen. De aanbevelingsservice is intern, maar heeft bij zware belasting soms korte pieken in latency of kleine fouten.

Samenvatting: slimme patroonkeuze

We hebben bekeken hoe verschillende patronen specifieke uitdagingen in microservices aanpakken:

  • Saga: voor gedistribueerde transacties die atomiciteit vereisen.
  • Circuit Breaker & Retry: voor het omgaan met onbetrouwbare afhankelijkheden en tijdelijke fouten.
  • Asynchronous Messaging: voor ontkoppeling en langdurige, niet-kritieke taken.

De kern is dat je de vereisten van je service, de behoeften op het gebied van consistentie en de fouttolerantie begrijpt, zodat je de meest geschikte patronen kunt kiezen.

Gratis beginnen

Leer Communicatiepatronen voor microservices (Saga, Circuit Breaker) met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Casestudy's: patroonselectie” gratis?

Ja — de volledige tekst van “Casestudy's: patroonselectie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Communicatiepatronen voor microservices (Saga, Circuit Breaker) wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Communicatiepatronen voor microservices (Saga, Circuit Breaker) bevat in totaal 4 lessen.

Wat leer ik in “Casestudy's: patroonselectie”?

Bestudeer praktijkscenario's om te begrijpen wanneer u Saga, Circuit Breaker of andere communicatiepatronen toepast. Je oefent met Communicatiepatronen voor microservices (Saga, Circuit Breaker) door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Communicatiepatronen voor microservices (Saga, Circuit Breaker) te beginnen?

Ervaring vooraf is niet nodig. Communicatiepatronen voor microservices (Saga, Circuit Breaker) op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Casestudy's: patroonselectie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Communicatiepatronen voor microservices (Saga, Circuit Breaker)?

Ja. Elke les over Communicatiepatronen voor microservices (Saga, Circuit Breaker) bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Casestudy's: patroonselectie
  2. Veelvoorkomende valkuilen en antip patronen
  3. Communicatiestrategieën ontwikkelen
  4. Chaos engineering voor communicatiepatronen
← Terug naar Communicatiepatronen voor microservices (Saga, Circuit Breaker)