API-begrænsning af kald og skaleringsmønstre · Lektion

Circuit breakers og bulkheads

Implementer mønstrene circuit breaker og bulkhead for at forhindre kaskaderende fejl og isolere fejlramte services, så systemets samlede robusthed forbedres.

Lektion 1 af 411 trin

Circuit breakers og bulkheads er en gratis API-begrænsning af kald og skaleringsmønstre-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i API-begrænsning af kald og skaleringsmønstre, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. API-begrænsning af kald og skaleringsmønstre-kurset indeholder 4 lektioner i alt.

Udvikling af robuste API'er

API'er er rygraden i moderne applikationer, men fejl er uundgåelige. At udvikle robuste API'er betyder at designe dem, så de kan modstå problemer og komme sig på en kontrolleret måde.

I denne lektion undersøger vi to effektive mønstre til robusthed: kredsløbsafbrydere og skotter. De hjælper dine systemer med at forblive stabile, selv når afhængigheder har problemer.

Introduktion til kredsløbsafbrydere

Forestil dig en elektrisk kredsløbsafbryder fra den virkelige verden. Når der opstår overbelastning, "slår den fra" for at forhindre skader. I software gør mønstret kredsløbsafbryder noget tilsvarende for API-kald.

Det overvåger kald til en tjeneste. Hvis for mange mislykkes, "åbner" det kredsløbet til tjenesten og stopper yderligere kald i en periode. Det forhindrer, at en fejlramt tjeneste bliver overbelastet, og giver den tid til at komme sig.

Kredsløbsafbryderens tilstande

En kredsløbsafbryder fungerer typisk i tre hovedtilstande:

  • Lukket: Normal drift. Kald til tjenesten går igennem.
  • Åben: Der er registreret for mange fejl. Kald blokeres med det samme og returnerer en fejl eller et reserve-svar uden at ramme tjenesten.
  • Halvåben: Efter en timeout i den åbne tilstand tillades nogle få testkald. Hvis de lykkes, lukkes kredsløbet; ellers åbnes det igen.

Kredsløbsafbryderen i praksis

Når din applikation forsøger at kalde en afhængig tjeneste, opfanger kredsløbsafbryderen kaldet og kontrollerer sin tilstand:

  • Hvis den er OPEN, mislykkes kaldet hurtigt, og en fejl returneres med det samme.
  • Hvis den er HALF-OPEN, tillades ét testkald for at se, om tjenesten er kommet sig.
  • Hvis den er CLOSED, tillades kaldet, og dets succes eller fejl overvåges.

Denne tilgang med hurtig fejlsvigt er afgørende for at forhindre kaskaderende fejl.

function callServiceWithCircuitBreaker(serviceFunc) {
  if (circuitBreaker.isOpen()) {
    return fallbackResponse(); // Service is down, fail fast
  }
  try {
    result = serviceFunc();
    circuitBreaker.recordSuccess();
    return result;
  } catch (error) {
    circuitBreaker.recordFailure();
    return fallbackResponse(); // Service call failed
  }
}

Fordele ved kredsløbsafbrydere

Implementering af kredsløbsafbrydere giver flere vigtige fordele:

  • Forhindrer kaskaderende fejl: En enkelt fejlramt tjeneste opbruger ikke ressourcer (f.eks. tråde) i de tjenester, der kalder den.
  • Hurtigere fejlregistrering: Forbrugere får øjeblikkelig feedback i stedet for at vente på langsomme timeouts.
  • Gendannelse af tjenester: Tjenester med problemer får tid til at stabilisere sig og komme sig, fordi den indgående belastning reduceres.

Forstå skotter

Tænk på et skib med vandtætte rum eller skotter. Hvis ét rum bliver oversvømmet, forbliver de andre tørre, så hele skibet ikke synker.

I software isolerer et skotmønster ressourcer (f.eks. trådpuljer, forbindelser eller hukommelse) for forskellige tjenester eller typer af forespørgsler. Det forhindrer, at en fejl eller forsinkelse i én komponent bruger alle delte ressourcer.

Isolation af skotressourcer

Skotter fungerer ved at opdele ressourcer. Almindelige implementeringsstrategier omfatter:

  • Trådpuljer: Dediker separate trådpuljer til kald til forskellige eksterne tjenester.
  • Semaforer: Begræns antallet af samtidige kald til en bestemt underliggende tjeneste.
  • Forbindelsespuljer: Isolér databaseforbindelsespuljer pr. mikrotjeneste eller funktion.

Hvis én tjeneste bliver langsom eller ikke svarer, bliver dens dedikerede ressourcepulje opbrugt, men andre tjenesters puljer påvirkes ikke.

class ServiceClient {
  ExecutorService serviceAThreadPool = new ThreadPoolExecutor(10);
  ExecutorService serviceBThreadPool = new ThreadPoolExecutor(10);

  // Calls to Service A use its dedicated pool
  Future<Result> callServiceA() {
    return serviceAThreadPool.submit(() -> fetchFromServiceA());
  }

  // Calls to Service B use its dedicated pool
  Future<Result> callServiceB() {
    return serviceBThreadPool.submit(() -> fetchFromServiceB());
  }
}

Fordele ved skotter

Implementering af skotter giver stærk fejl-isolation og forbedrer systemets samlede stabilitet:

  • Forhindrer ressourcemangel: En problematisk tjeneste kan ikke beslaglægge alle tråde eller forbindelser, så der ikke er nogen tilbage til sunde tjenester.
  • Forbedret stabilitet: En fejl eller forsinkelse i ét område afgrænses, så den ikke spreder sig gennem hele systemet.
  • Bedre diagnosticering: Det bliver lettere at identificere den specifikke komponent, der forårsager ressourceproblemer, fordi dens dedikerede pulje viser kapacitetskonflikter.

Kombination af robusthedsmønstre

Kredsløbsafbrydere og skotter bruges ofte sammen for at opnå maksimal robusthed og modstandsdygtighed.

  • Et skot isolerer en tjenestes ressourcer, så fejl i tjenesten ikke påvirker andres kapacitet.
  • En kredsløbsafbryder registrerer derefter fejl i den isolerede ressource og forhindrer gentagne kald til den tjeneste, der har problemer.

Denne lagdelte tilgang gør det muligt for systemer at forringes kontrolleret og komme sig hurtigere efter delvise driftsafbrydelser.

Tjek af robusthed

Du har en API-gateway, der dirigerer forespørgsler til flere backend-mikrotjenester. Én mikrotjeneste, 'Recommendation Service', begynder at få meget høj svartid på grund af et databaseproblem.

Hvilket mønster ville du primært bruge for at sikre, at den langsomme 'Recommendation Service' ikke opbruger alle tilgængelige tråde i API-gatewayen og dermed forhindrer andre sunde mikrotjenester i at blive kaldt?

Opsummering: Udvikling af robuste API'er

Du har undersøgt to vigtige mønstre til at gøre API'er robuste: kredsløbsafbrydere og skotter.

  • Kredsløbsafbrydere forhindrer kaskaderende fejl ved at stoppe kald til en fejlramt tjeneste, så den kan komme sig.
  • Skotter isolerer ressourcer (f.eks. trådpuljer), så fejl begrænses til bestemte komponenter, og ressourcemangel forhindres.

Ved at kombinere disse mønstre kan du udvikle meget robuste og fejltolerante API-systemer, der håndterer fejl kontrolleret og bevarer stabiliteten.

Gratis at komme i gang

Lær API-begrænsning af kald og skaleringsmønstre med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Circuit breakers og bulkheads” gratis?

Ja — hele teksten til “Circuit breakers og bulkheads” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af API-begrænsning af kald og skaleringsmønstre-kurset, skal du opgradere til CoddyKit PRO. API-begrænsning af kald og skaleringsmønstre-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Circuit breakers og bulkheads”?

Implementer mønstrene circuit breaker og bulkhead for at forhindre kaskaderende fejl og isolere fejlramte services, så systemets samlede robusthed forbedres. Du øver dig i API-begrænsning af kald og skaleringsmønstre med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på API-begrænsning af kald og skaleringsmønstre?

Der kræves ingen tidligere erfaring. API-begrænsning af kald og skaleringsmønstre på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Circuit breakers og bulkheads”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne API-begrænsning af kald og skaleringsmønstre-lektion?

Ja. Alle API-begrænsning af kald og skaleringsmønstre-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Circuit breakers og bulkheads
  2. Idempotens og mekanismer til retry
  3. Geodistribuerede API'er og disaster recovery
  4. Belastningsafvisning efter hastighed og backpressure
← Tilbage til API-begrænsning af kald og skaleringsmønstre