Implementering av reserveløsninger og tidsavbrudd
Utforsk hvordan De implementerer reserveløsninger og tidsavbrudd for å håndtere utilgjengelige tjenester eller langsomme svar på en kontrollert måte.
Implementering av reserveløsninger og tidsavbrudd er en gratis leksjon i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) på CoddyKit. Dette er leksjon 3 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 Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker), og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) inneholder totalt 4 leksjoner.
Velkommen til motstandsdyktighetsmønstre
I denne leksjonen skal vi se nærmere på to viktige mønstre for å bygge motstandsdyktige mikrotjenester: fallbacks og timeouts.
Disse mønstrene hjelper applikasjonene dine med å håndtere feil og trege svar fra andre tjenester på en kontrollert måte, slik at systemet blir mer robust og pålitelig.
Hva er en fallback?
En fallback-mekanisme tilbyr en alternativ fremgangsmåte når en primæroperasjon mislykkes eller støter på en feil.
- Den sørger for at applikasjonen fortsatt kan svare, selv om svaret er begrenset, i stedet for å mislykkes fullstendig.
- Tenk på det som en plan B for tjenestekallene dine.
- Dette fører til kontrollert funksjonsreduksjon, der systemet tilbyr redusert funksjonalitet i stedet for å slutte å fungere helt.
Fallback i praksis: Standarddata
Se for deg en e-handelsnettsted. Hvis tjenesten som leverer personlig tilpassede produktanbefalinger, mislykkes, ønsker du ikke at hele siden skal slutte å fungere.
En fallback kan vise:
- Populære varer (standardliste)
- Bufrede anbefalinger
- En enkel melding som «Anbefalinger er for øyeblikket utilgjengelige»
Brukeropplevelsen forblir intakt, selv ved et mindre problem.
Koding av en enkel fallback
La oss se på et enkelt Java-eksempel. Hvis den «eksterne tjenesten» vår utløser en feil, fanger vi den opp og returnerer en standardverdi i stedet for å la applikasjonen krasje.
public class FallbackExample {
public String getProductRecommendation() {
try {
// Simulate calling an external service that might fail
if (Math.random() < 0.5) {
throw new RuntimeException("Service unavailable!");
}
return "Personalized Recommendation A";
} catch (Exception e) {
// Fallback: return a default recommendation
System.out.println("Fallback activated: " + e.getMessage());
return "Default Popular Product";
}
}
public static void main(String[] args) {
FallbackExample app = new FallbackExample();
System.out.println("Recommendation: " + app.getProductRecommendation());
System.out.println("Recommendation: " + app.getProductRecommendation());
}
}Hvorfor trenger vi timeouts?
Mens fallbacks håndterer feil, håndterer timeouts trege svar. En tjeneste trenger ikke å mislykkes helt, men den kan bruke for lang tid på å svare.
- Uttømming av ressurser: Ubegrenset venting beslaglegger ressurser (tråder og forbindelser).
- Kaskaderende feil: En treg tjeneste kan gjøre andre avhengige tjenester trege, noe som fører til at hele systemet blir tregere.
Timeouts angir en maksimal varighet for en operasjon.
Typer timeouts
Når du foretar nettverkskall, vil du ofte møte ulike typer timeouts:
- Tilkoblingstimeout: Den maksimale tiden som tillates for å opprette en tilkobling til fjerntjenesten. Hvis det ikke opprettes noen tilkobling innen denne tiden, mislykkes operasjonen.
- Lesetimeout: Den maksimale tiden som tillates for å motta data etter at tilkoblingen er opprettet. Hvis tjenesten slutter å sende data, utløses denne timeouten.
- Forespørselstimeout: En samlet timeout for hele operasjonen, fra start til slutt. Denne omfatter ofte både tilkoblings- og lesetimeouten.
Angi en forespørselstimeout
I Java avhenger det å angi timeouts av hvilket klientbibliotek du bruker (for eksempel OkHttp eller HttpClient). Konseptuelt ser det slik ut:
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://slowservice.com/data"))
.timeout(Duration.ofSeconds(10)) // Request timeout
.GET()
.build();Dette sørger for at forespørselen din ikke blir hengende for alltid.
Kombinere timeout og fallback
Timeouts og fallbacks er effektive når de brukes sammen. En timeout utløser en feil, som deretter kan håndteres av en fallback.
La oss utvide det forrige eksempelet. Vi simulerer et kall til en treg tjeneste. Hvis det tar for lang tid, oppstår det en timeout, og fallbacken vår leverer et standardsvar.
import java.util.concurrent.*;
public class TimeoutFallbackExample {
public String getProductRecommendationWithTimeout() {
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
Future<String> future = executor.submit(() -> {
// Simulate a slow external service
long delay = (long) (Math.random() * 3000) + 1000; // 1-4 seconds
Thread.sleep(delay);
return "Personalized Recommendation B";
});
// Wait for the result, but only for 2 seconds
return future.get(2, TimeUnit.SECONDS);
} catch (TimeoutException e) {
System.out.println("Timeout occurred: " + e.getMessage());
return "Fallback: Timed out default product";
} catch (Exception e) {
System.out.println("Other error: " + e.getMessage());
return "Fallback: Error default product";
} finally {
executor.shutdown();
}
}
public static void main(String[] args) {
TimeoutFallbackExample app = new TimeoutFallbackExample();
System.out.println("Recommendation: " + app.getProductRecommendationWithTimeout());
System.out.println("Recommendation: " + app.getProductRecommendationWithTimeout());
}
}Fordeler ved å bruke begge
Ved å kombinere timeouts og fallbacks oppnår du et høyere nivå av motstandsdyktighet:
- Bedre brukeropplevelse: Brukerne slipper å vente ubegrenset på at en side skal lastes inn eller en operasjon skal fullføres.
- Beskyttelse av ressurser: Tjenestene dine bruker ikke opp ressurser på å vente på avhengigheter som ikke svarer.
- Systemstabilitet: Forhindrer kaskaderende feil, der én treg tjeneste får mange andre til å slutte å fungere.
- Forutsigbar atferd: Systemet oppfører seg forutsigbart, selv under belastning.
Rask sjekk: Motstandsdyktighet
Du utformer en mikrotjeneste som kaller en ekstern betalingsgateway. Hvis gatewayen er treg eller utilgjengelig, ønsker du å:
- Forhindre at tjenesten blir hengende ubegrenset.
- Vise meldingen «Betaling er for øyeblikket utilgjengelig» til brukeren i stedet for en feinside.
Hvilke motstandsdyktighetsmønstre bør du prioritere i dette scenarioet?
Oppsummering: Fallbacks og timeouts
Godt jobbet! Du har lært om to viktige motstandsdyktighetsmønstre:
- Fallbacks: Tilbyr alternative svar for å håndtere feil på en kontrollert måte og gir en bedre brukeropplevelse.
- Timeouts: Setter grenser for hvor lang tid en operasjon kan ta, og forhindrer uttømming av ressurser og kaskaderende feil fra trege tjenester.
Ved å bruke disse mønstrene sammen blir mikrotjenestene dine mer robuste og pålitelige.
Lær deg Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) 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 «Implementering av reserveløsninger og tidsavbrudd» gratis?
Ja – hele teksten i «Implementering av reserveløsninger og tidsavbrudd» 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 Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) inneholder totalt 4 leksjoner.
Hva lærer jeg i «Implementering av reserveløsninger og tidsavbrudd»?
Utforsk hvordan De implementerer reserveløsninger og tidsavbrudd for å håndtere utilgjengelige tjenester eller langsomme svar på en kontrollert måte. Du øver på Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) 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 Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)?
Ingen tidligere erfaring er nødvendig. Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker) 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 3 av 4.
Hvor lang tid tar leksjonen «Implementering av reserveløsninger og tidsavbrudd»?
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 Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-leksjonen?
Ja. Alle Kommunikasjonsmønstre for mikrotjenester (Saga, Circuit Breaker)-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
- Hvorfor robusthet er viktig
- Grunnleggende om retry-mønsteret
- Implementering av reserveløsninger og tidsavbrudd
- Bulkhead-mønsteret