Resilienssidekoraattoreiden järjestys
Opitte, miksi resilienssimallien (retry, circuit breaker, bulkhead, timeout, rate limiter) pinoamisjärjestys muuttaa toimintaa ja miten valitsette oikean järjestyksen.
Resilienssidekoraattoreiden järjestys on ilmainen Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-kurssilla on yhteensä 4 oppituntia.
Mallien ketjuttaminen
Resilienssikirjastojen avulla kutsuun voi kääriä useita malleja samanaikaisesti: uudelleenyritys, piirikatkaisija, Bulkhead, aikarajoitin ja nopeusrajoitin. Mallit muodostavat ketjun, ja järjestyksellä on merkitystä.
Sama mallijoukko tuottaa erilaista toimintaa sen mukaan, miten mallit on sisäkkäistetty.
Koristelijat kerroksina
Ajatelkaa jokaista mallia kerroksena, joka käärii seuraavan kerroksen. Uloimpana oleva kerros näkee kutsun ensimmäisenä, kun taas sisimpänä oleva kutsuu varsinaista riippuvuutta.
layers = ['Retry', 'CircuitBreaker', 'Bulkhead', 'TimeLimiter', 'ServiceCall']
for i, l in enumerate(layers):
print(' ' * i + l)Uudelleenyritys piirikatkaisijan ulkopuolella
Resilience4j:n suositeltu järjestys sijoittaa Retry-mallin Circuit Breaker -mallin ulkopuolelle.
Tällöin piirikatkaisija arvioi jokaisen uudelleenyritysyrityksen erikseen. Kun epäonnistuneita yrityksiä on tarpeeksi, piiri avautuu ja estää kaikki uudet uudelleenyritykset.
Mitä jos Retry olisi sisäpuolella?
Jos Retry olisi piirikatkaisijan sisäpuolella, piirikatkaisija näkisi vain yhden lopputuloksen jokaista kokonaista uudelleenyrityssykliä kohden. Useat sisäiset uudelleenyritykset voisivat kuormittaa vikaantuvaa palvelua voimakkaasti ennen kuin piirikatkaisija ehtii havaita tilanteen.
Siksi uudelleenyritys yleensä käärii piirikatkaisijan eikä päinvastoin.
Bulkhead-mallin sijoittaminen
Sijoittakaa Bulkhead piirikatkaisijan sisäpuolelle, jotta se rajoittaa samanaikaisten varsinaisten kutsujen määrää. Piirikatkaisija voi tällöin katkaista kutsun jo ennen säikeen varaamista, jolloin Bulkhead ei täyty epäonnistumaan tuomituista kutsuista.
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))TimeLimiter-mallin sijoittaminen
TimeLimiter sijoitetaan lähelle kutsua, jotta jokaiselle yksittäiselle yritykselle voidaan asettaa aikaraja. Hidas kutsu aikakatkaistaan, se lasketaan piirikatkaisijan virheeksi ja voi käynnistää ulomman kerroksen uudelleenyrityksen.
RateLimiter-mallin sijoittaminen
Sijoittakaa RateLimiter ulkopuolelle, jos haluatte rajoittaa kaikkien pyyntöjen määrää uudelleenyritykset mukaan lukien, tai sisäpuolelle, jos haluatte rajoittaa vain riippuvuuteen kohdistuvia todellisia kutsuja. Päättäkää sijoitus sen perusteella, mitä haluatte suojata.
Suositeltu oletusjärjestys
Laajasti käytetty oletusjärjestys uloimmasta sisimpään:
- Retry
- Circuit Breaker
- Rate Limiter
- Time Limiter
- Bulkhead
Mukauttakaa järjestystä tavoitteidenne mukaan, mutta ymmärtäkää jokaisen muutoksen vaikutus.
Varamenettely uloimmaksi
Varamenettelyn tulee kääriä kaikki muut kerrokset, jotta se voi käsitellä minkä tahansa sisemmän kerroksen virheet, kuten kaikki uudelleenyritysyritykset käyttäneen Retry-mallin tai avoimen piirikatkaisijan aiheuttaman virheen.
def with_fallback(inner):
try:
return inner()
except Exception:
return 'fallback value'
print(with_fallback(lambda: (_ for _ in ()).throw(Exception('all layers failed'))))Huomioitavat yhteisvaikutukset
Seuratkaa yllättäviä yhdistelmiä:
- Retry ja nopeusrajoitin voivat rajoittamattomina voimistaa kuormaa.
- Lyhyt aikarajoitin yhdessä aggressiivisen uudelleenyrityksen kanssa voi kuormittaa hidasta palvelua rajusti.
- Bulkheadin hylkäykset voidaan laskea piirikatkaisijan virheiksi.
Varmistaminen testaamalla
Koska järjestyksen vaikutukset ovat hienovaraisia, varmistakaa ketjun toiminta integraatiotesteillä, joissa aiheutetaan virheitä ja hitautta. Varmistakaa sitten, että havaittu toiminta vastaa tavoitettanne.
Pikatarkistus
Miksi Retry sijoitetaan yleensä Circuit Breaker -mallin ULKOPUOLELLE eikä sen sisäpuolelle?
Kertaus
Opitte, miksi koristelijoiden järjestyksellä on merkitystä:
- Mallit sisäkkäistyvät kerroksiksi; uloin suoritetaan ensin.
- Piirikatkaisijan ulkopuolella oleva Retry antaa piirikatkaisijan pysäyttää uudelleenyritysmyrskyt.
- Bulkhead ja aikarajoitin sijoitetaan lähelle kutsua.
- Varamenettely käärii kaiken.
Valitkaa järjestys tavoitteen mukaan ja varmistakaa se sitten vianseurannan testeillä.
Opi Mikropalveluiden viestintämallit (Saga, Circuit Breaker) tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Resilienssidekoraattoreiden järjestys” ilmainen?
Kyllä – oppitunnin ”Resilienssidekoraattoreiden järjestys” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-kurssin, päivitä CoddyKit PROhon. Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Resilienssidekoraattoreiden järjestys”?
Opitte, miksi resilienssimallien (retry, circuit breaker, bulkhead, timeout, rate limiter) pinoamisjärjestys muuttaa toimintaa ja miten valitsette oikean järjestyksen. Harjoittelet Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Resilienssidekoraattoreiden järjestys”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppitunnilla?
Kyllä. Jokainen Mikropalveluiden viestintämallit (Saga, Circuit Breaker)-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Piirin katkaisija ja laipio
- Piirin katkaisija ja uudelleenyrityslogiikka
- Nopeusrajoituksen integrointi
- Resilienssidekoraattoreiden järjestys