Linux-nätverk och TCP/IP för utvecklare · Lektion

Resiliensmönster: circuit breakers, retries och timeouts

Håll distribuerade system stabila vid fel med timeouts, begränsade retries med backoff och circuit breaker-mönstret för att förhindra kaskadfel.

Lektion 4 av 413 steg

Resiliensmönster: circuit breakers, retries och timeouts är en gratis lektion i Linux-nätverk och TCP/IP för utvecklare 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 Linux-nätverk och TCP/IP för utvecklare, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Linux-nätverk och TCP/IP för utvecklare innehåller totalt 4 lektioner.

Fel är normalt

I ett mikrotjänstnätverk passerar anrop maskiner och nätverkslänkar som kommer att fallera. Resiliensmönster hindrar en långsam eller trasig tjänst från att dra ner hela systemet.

Ange alltid tidsgränser

Ett anrop utan tidsgräns kan hänga för evigt och tömma trådar och anslutningar. Alla fjärranrop måste ha en tidsgräns.

import requests
r = requests.get('http://orders/api', timeout=2.0)

Faran med naiva omförsök

Om ni försöker igen direkt efter ett fel kan ett avbrott förvärras — en redan överbelastad tjänst utsätts för ännu högre belastning. Omförsök måste vara begränsade och ske med mellanrum.

Exponentiell backoff

Öka väntetiden mellan försöken exponentiellt så att en tjänst som återhämtar sig får utrymme att återhämta sig.

for attempt in range(5):
    try:
        return call()
    except Exception:
        wait = 2 ** attempt
        time.sleep(wait)

Lägg till jitter

Om många klienter använder samma backoff-schema försöker de igen samtidigt, vilket skapar en stampedeffekt. Lägg till slumpmässig jitter för att sprida belastningen.

import random
wait = (2 ** attempt) + random.uniform(0, 1)

Försök endast igen med idempotenta åtgärder

Om ni försöker igen med en icke-idempotent skrivåtgärd (till exempel 'debitera kortet') kan den utföras två gånger. Försök endast igen med säkra åtgärder, eller använd idempotensnycklar för att göra skrivåtgärder säkra.

Kretsbrytaren

En kretsbrytare spårar fel hos ett beroende. Efter för många fel öppnas den och misslyckas snabbt i stället för att vänta på en otillgänglig tjänst.

Detta hindrar resurser från att ansamlas kring ett anrop som ändå är dömt att misslyckas.

Kretsbrytarens tillstånd

En kretsbrytare har tre tillstånd:

  • Stängd — anrop flödar normalt
  • Öppen — anrop misslyckas omedelbart
  • Halvöppen — några testanrop undersöker om återhämtning har skett

Kretsbrytare i kod

En minimal kretsbrytare räknar fel och löser ut efter ett tröskelvärde, varefter den avvisar anrop tills en nedkylningsperiod har löpt ut.

if breaker.is_open():
    raise CircuitOpenError()
try:
    result = call()
    breaker.record_success()
except Exception:
    breaker.record_failure()
    raise

Reservlösningar och kontrollerad degradering

När en kretsbrytare är öppen returnerar ni en rimlig reservlösning: cachad data, ett standardvärde eller en begränsad uppsättning funktioner. Ett degraderat svar är bättre än ett totalt fel.

Skottväggar

Mönstret med skottväggar isolerar resurser (trådpooler, anslutningspooler) per beroende, så att ett överbelastat beroende inte kan svälta ut de andra.

Snabbtest

Testa dina kunskaper om resiliens.

Sammanfattning

Nu kan du bygga resilienta tjänsteanrop:

  • Ange alltid tidsgränser
  • Begränsade omförsök med exponentiell backoff + jitter
  • Försök endast igen med idempotenta åtgärder
  • Kretsbrytare (stängd/öppen/halvöppen) för att misslyckas snabbt
  • Reservlösningar och skottväggar för kontrollerad degradering

Detta kompletterar dina lektioner om lastbalansering, service mesh och API-gateways.

Gratis att börja

Lär dig Linux-nätverk och TCP/IP för utvecklare 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 ”Resiliensmönster: circuit breakers, retries och timeouts” gratis?

Ja – hela texten till ”Resiliensmönster: circuit breakers, retries och timeouts” 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 Linux-nätverk och TCP/IP för utvecklare, kan Ni uppgradera till CoddyKit PRO. Kursen i Linux-nätverk och TCP/IP för utvecklare innehåller totalt 4 lektioner.

Vad lär jag mig i ”Resiliensmönster: circuit breakers, retries och timeouts”?

Håll distribuerade system stabila vid fel med timeouts, begränsade retries med backoff och circuit breaker-mönstret för att förhindra kaskadfel. Ni övar på Linux-nätverk och TCP/IP för utvecklare 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 Linux-nätverk och TCP/IP för utvecklare?

Du behöver inga förkunskaper. Utbildningen i Linux-nätverk och TCP/IP för utvecklare 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 ”Resiliensmönster: circuit breakers, retries och timeouts”?

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 Linux-nätverk och TCP/IP för utvecklare-lektionen?

Ja. Varje Linux-nätverk och TCP/IP för utvecklare-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. Strategier för lastbalansering
  2. Tjänstemesh-arkitekturer (Istio/Linkerd)
  3. API-gateway och edge-routing
  4. Resiliensmönster: circuit breakers, retries och timeouts
← Tillbaka till Linux-nätverk och TCP/IP för utvecklare