Grunnleggende systemdesign for backendutviklere · leksjon

Circuit breakers og kontrollert degradering

Lær hvordan circuit breakers hindrer kaskaderende feil, og hvordan kontrollert degradering holder et system nyttig selv når avhengigheter svikter.

Leksjon 4 av 413 trinn

Circuit breakers og kontrollert degradering er en gratis leksjon i Grunnleggende systemdesign for backendutviklere på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende systemdesign for backendutviklere, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende systemdesign for backendutviklere inneholder totalt 4 leksjoner.

Problemet med kaskaderende feil

I et system med avhengige tjenester kan én treg tjeneste trekke ned alt som kaller den. Tråder hoper seg opp mens de venter, køer fylles, og feilen sprer seg som en kaskade gjennom hele systemet.

Høy tilgjengelighet handler om å begrense feil, ikke bare om å forhindre dem.

Hva en kretsbryter gjør

En kretsbryter omslutter kall til en avhengighet. Når feilene overskrider en terskel, åpnes den og feiler raskt i stedet for å vente på en død tjeneste.

  • Slutter å sløse tråder på kall som uansett vil mislykkes
  • Gir den sviktende tjenesten tid til å gjenopprette seg

De tre tilstandene

En kretsbryter har tre tilstander:

  • Closed: Kall flyter normalt, og feil telles
  • Open: Kall feiler umiddelbart uten å kontakte avhengigheten
  • Half-open: Noen få prøve-kall tester om avhengigheten er gjenopprettet
CLOSED --(too many failures)--> OPEN
OPEN --(timeout elapsed)--> HALF_OPEN
HALF_OPEN --(trial succeeds)--> CLOSED
HALF_OPEN --(trial fails)--> OPEN

En enkel kretsbryter i kode

Her er hovedideen: Tell feil, utløs bryteren når en terskel nås, og avvis kall mens den er åpen.

class Breaker:
    def __init__(self, limit):
        self.fails = 0
        self.limit = limit
        self.open = False
    def call(self, ok):
        if self.open:
            return 'rejected'
        if ok:
            self.fails = 0
            return 'success'
        self.fails += 1
        if self.fails >= self.limit:
            self.open = True
        return 'failure'

b = Breaker(3)
for ok in [False, False, False, True]:
    print(b.call(ok))

Tidsavbrudd er avgjørende

En kretsbryter hjelper bare hvis kall har tidsavbrudd. Uten et tidsavbrudd holder en avhengighet som har hengt seg opp, en tråd opptatt for alltid, og feilene telles aldri. Angi alltid korte, eksplisitte tidsavbrudd for eksterne kall.

Nye forsøk og backoff

Nye forsøk kan hjelpe ved midlertidige feil, men kan også forsterke en overbelastning. Bruk eksponentiell backoff med jitter og begrens antallet nye forsøk. Kombiner dette med en kretsbryter, slik at nye forsøk stopper helt når kretsen er åpen.

import random
delay = 1
for attempt in range(4):
    wait = delay + random.uniform(0, delay)
    print('attempt', attempt, 'wait', round(wait, 2))
    delay *= 2

Grasiøs degradering

Grasiøs degradering betyr at systemet fortsatt gjør noe nyttig når en avhengighet er utilgjengelig, i stedet for å returnere en feil.

  • Vis foreldede data fra hurtigbufferet
  • Skjul en funksjon som ikke er kritisk
  • Returner en fornuftig standardverdi

Reservealternativer

Når kretsbryteren er åpen, ruter De til et reservealternativ. Hvis anbefalingstjenesten er nede på en produktside, kan De vise en generell liste over bestselgere i stedet for å la hele siden feile.

def get_recommendations(breaker):
    if breaker.open:
        return ['bestseller-1', 'bestseller-2']
    return ['personalized-1', 'personalized-2']

Skott

Skottmønsteret isolerer ressurser, slik at én sviktende avhengighet ikke kan bruke opp alle tråder eller tilkoblinger. Gi hver nedstrømsavhengighet sin egen begrensede pool — som vanntette skott i et skip.

Belastningsavvisning

Ved ekstrem belastning er det bedre å avvise noen forespørsler raskt enn å gjøre systemet tregere for alle. Belastningsavvisning forkaster trafikk med lav prioritet for å beskytte kritiske baner og holde svartiden begrenset.

Slik henger det sammen

Robuste tjenester kombinerer disse mønstrene: korte tidsavbrudd, kretsbrytere, skott for isolasjon, reserve løsninger ved redusert funksjonalitet og belastningsreduksjon under press. Til sammen gjør de et mulig driftsavbrudd til en liten, avgrenset forstyrrelse.

Kort sjekk

Test forståelsen din av kretsbrytere.

Oppsummering

Du har lært å avgrense feil for høy tilgjengelighet:

  • Kretsbrytere feiler raskt og går gjennom tilstandene lukket, åpen og halvåpen
  • Tidsavbrudd og begrensede retries med eksponentiell backoff hindrer at overbelastning forsterkes
  • Gradvis redusert funksjonalitet og reserv løsninger holder systemet nyttig
  • Skott og belastningsreduksjon isolerer og beskytter kritiske baner
Gratis å komme i gang

Lær deg Grunnleggende systemdesign for backendutviklere med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Circuit breakers og kontrollert degradering» gratis?

Ja – hele teksten i «Circuit breakers og kontrollert degradering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Grunnleggende systemdesign for backendutviklere-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Grunnleggende systemdesign for backendutviklere inneholder totalt 4 leksjoner.

Hva lærer jeg i «Circuit breakers og kontrollert degradering»?

Lær hvordan circuit breakers hindrer kaskaderende feil, og hvordan kontrollert degradering holder et system nyttig selv når avhengigheter svikter. Du øver på Grunnleggende systemdesign for backendutviklere med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Grunnleggende systemdesign for backendutviklere?

Ingen tidligere erfaring er nødvendig. Grunnleggende systemdesign for backendutviklere på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Circuit breakers og kontrollert degradering»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Grunnleggende systemdesign for backendutviklere-leksjonen?

Ja. Alle Grunnleggende systemdesign for backendutviklere-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Redundans og failover-mekanismer
  2. Planlegging av katastrofegjenoppretting
  3. Overvåking, varsling og logging
  4. Circuit breakers og kontrollert degradering
← Tilbake til Grunnleggende systemdesign for backendutviklere