Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) · Lektion

Ordningen på resiliens-dekoratörer

Lär dig varför ordningen du staplar resiliensmönster i (retry, circuit breaker, bulkhead, timeout, rate limiter) ändrar beteendet, och hur du väljer rätt ordning.

Lektion 4 av 413 steg

Ordningen på resiliens-dekoratörer är en gratis lektion i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker), och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) innehåller totalt 4 lektioner.

Kombinera mönster

Resiliensbibliotek låter dig omsluta ett anrop med flera mönster samtidigt: retry, circuit breaker, bulkhead, time limiter och rate limiter. Mönstren bildar en kedja, och ordningen spelar roll.

Samma uppsättning mönster ger olika beteende beroende på hur de kapslas in.

Dekoratorer som lager

Tänk på varje mönster som ett lager som omsluter nästa. Det yttersta lagret ser anropet först; det innersta anropar faktiskt beroendet.

layers = ['Retry', 'CircuitBreaker', 'Bulkhead', 'TimeLimiter', 'ServiceCall']
for i, l in enumerate(layers):
    print('  ' * i + l)

Retry utanför brytaren

Den rekommenderade ordningen i Resilience4j placerar Retry utanför Circuit Breaker.

Det innebär att varje retry-försök själv utvärderas av brytaren. Efter tillräckligt många misslyckade försök öppnas brytaren och stoppar alla ytterligare retry-försök.

Vad händer om Retry låg inuti?

Om Retry låg inuti brytaren skulle brytaren bara se ett resultat per komplett retry-cykel. En serie interna retry-försök skulle kunna överbelasta en tjänst som redan har fel innan brytaren ens märker det.

Därför omsluter retry vanligtvis brytaren, inte tvärtom.

Placering av Bulkhead

Placera Bulkhead inuti brytaren så att den begränsar samtidigheten för de faktiska anropen. Brytaren kan då kortsluta anropet innan en tråd ens har hämtats, vilket hindrar bulkhead från att fyllas med dömda anrop.

breaker_open = True

def call(breaker_open):
    if breaker_open:
        return 'short-circuited; no bulkhead slot used'
    return 'acquire bulkhead slot then call'

print(call(breaker_open))

Placering av TimeLimiter

TimeLimiter placeras nära anropet så att varje enskilt försök begränsas i tid. Ett långsamt anrop får timeout, räknas som ett fel för brytaren och kan utlösa ett retry från det yttre lagret.

Placering av RateLimiter

Placera RateLimiter ytterst om du vill begränsa den totala anropsfrekvensen inklusive retry-försök, eller innerst om du bara vill begränsa de faktiska anropen till beroendet. Bestäm utifrån vad du vill skydda.

Rekommenderad standardordning

En vanligt använd standardordning, från ytterst till innerst:

  • Retry
  • Circuit Breaker
  • Rate Limiter
  • Time Limiter
  • Bulkhead

Anpassa ordningen efter era mål, men förstå effekten av varje ändring.

Reservlösningen ytterst

Reservlösningen bör omsluta allt så att den kan fånga fel från alla inre lager, inklusive ett retry där alla försök har förbrukats eller en brytare som är öppen.

def with_fallback(inner):
    try:
        return inner()
    except Exception:
        return 'fallback value'

print(with_fallback(lambda: (_ for _ in ()).throw(Exception('all layers failed'))))

Se upp med kombinationerna

Var uppmärksam på överraskande kombinationer:

  • Retry tillsammans med en rate limiter kan förstärka belastningen om den inte begränsas.
  • En kort time limiter inuti ett aggressivt retry kan storma en långsam tjänst.
  • Avvisningar från Bulkhead kan räknas som fel av brytaren.

Verifiera genom testning

Eftersom effekterna av ordningen är subtila bör du verifiera kedjan med integrationstester som injicerar fel och långsamhet. Kontrollera sedan att det observerade beteendet stämmer med avsikten.

Snabb kontroll

Varför placeras Retry vanligtvis UTANFÖR Circuit Breaker i stället för inuti?

Sammanfattning

Du har lärt dig varför dekoratorernas ordning spelar roll:

  • Mönster kapslas som lager; det yttersta körs först.
  • Retry utanför brytaren gör att brytaren kan stoppa retry-stormar.
  • Bulkhead och time limiter placeras nära anropet.
  • Reservlösningen omsluter allt.

Välj ordning utifrån avsikten och verifiera den sedan med tester som injicerar fel.

Gratis att börja

Lär dig Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Ordningen på resiliens-dekoratörer” gratis?

Ja – hela texten till ”Ordningen på resiliens-dekoratörer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker), kan Ni uppgradera till CoddyKit PRO. Kursen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) innehåller totalt 4 lektioner.

Vad lär jag mig i ”Ordningen på resiliens-dekoratörer”?

Lär dig varför ordningen du staplar resiliensmönster i (retry, circuit breaker, bulkhead, timeout, rate limiter) ändrar beteendet, och hur du väljer rätt ordning. Ni övar på Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)?

Du behöver inga förkunskaper. Utbildningen i Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker) på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Ordningen på resiliens-dekoratörer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)-lektionen?

Ja. Varje Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Circuit breaker och bulkhead
  2. Circuit breaker med återförsökslogik
  3. Integrera hastighetsbegränsning
  4. Ordningen på resiliens-dekoratörer
← Tillbaka till Kommunikationsmönster för mikrotjänster (Saga, Circuit Breaker)