gRPC ja suorituskykyiset API:t · Oppitunti

Suoratoiston vuonhallinta ja backpressure

Oppikaa hallitsemaan, miten gRPC-suoratoistot käsittelevät vuonhallintaa ja backpressurea, jotta nopeat tuottajat eivät koskaan kuormita hitaita kuluttajia liikaa pitkäkestoisissa kaksisuuntaisissa yhteyksissä.

Oppitunti 4/413 vaihetta

Suoratoiston vuonhallinta ja backpressure on ilmainen gRPC ja suorituskykyiset API:t-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 gRPC ja suorituskykyiset API:t-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. gRPC ja suorituskykyiset API:t-kurssilla on yhteensä 4 oppituntia.

Miksi vuonhallinta on tärkeää

Virran tuottaja voi muodostaa viestejä paljon nopeammin kuin kuluttaja lukee niitä. Ilman rajoituksia puskurit kasvavat rajattomasti ja muisti loppuu.

Vuonhallinta on mekanismi, joka pitää tuottajan ja kuluttajan tasapainossa.

HTTP/2:n vuonhallintaikkunat

gRPC toimii HTTP/2:n päällä, ja HTTP/2:ssa on sisäänrakennettu vuonhallinta. Jokaisella virralla ja koko yhteydellä on ikkuna — tavumääräinen kiintiö, jonka lähettäjä saa siirtää.

Kun vastaanottaja käsittelee dataa, se lähettää WINDOW_UPDATE-kehyksiä kiintiön täydentämiseksi.

Mitä backpressure tarkoittaa?

Backpressure on palautesignaali, joka ilmoittaa tuottajalle, että sen on hidastettava. Kun vastaanottajan ikkuna on täynnä, lähettäjä ei yksinkertaisesti voi kirjoittaa lisää tavuja, ennen kuin krediittiä palautuu.

Tämä rajoittaa luonnostaan nopean lähettäjän nopeuden kuluttajan tahdille.

Blokkaavat ja ei-blokkaavat lähetykset

Eri kielten stubit tuovat backpressuren esiin eri tavoin:

  • Blokkaavat stubit: kirjoitus blokkaa, kunnes ikkuna sallii sen
  • Async-stubit: callback tai isReady-lippu ilmoittaa, milloin voit jatkaa

isReady-signaali (Java)

Javan async-API:ssa CallStreamObserver.isReady() ilmoittaa, voiko siirtokerros vastaanottaa lisää viestejä puskuroimatta niitä.

if (responseObserver.isReady()) {
  responseObserver.onNext(buildChunk());
} else {
  // pause until onReadyHandler fires
}

Reagointi onReady-tapahtumaan

Rekisteröi onReadyHandler, jotta runtime kutsuu koodiasi takaisin, kun ikkuna avautuu uudelleen. Näin voit jatkaa lähettämistä ilman aktiivista odottamista.

observer.setOnReadyHandler(() -> {
  while (observer.isReady() && hasMore()) {
    observer.onNext(next());
  }
});

Go-suoratoisto ja backpressure

Gossa stream.Send blokkaa, kun HTTP/2-ikkuna on käytetty loppuun, joten saat implisiittisen backpressuren automaattisesti. Käske vain silmukan lähettää tietoja; kutsu palautuu, kun tilaa on taas käytettävissä.

for _, item := range items {
  if err := stream.Send(item); err != nil {
    return err
  }
}

Ikkunakokojen säätäminen

Voit säätää vuonhallinnan toimintaa käynnistyksen yhteydessä:

  • InitialWindowSize suoratoistoa kohden
  • InitialConnWindowSize yhteyttä kohden

Suuremmat ikkunat parantavat läpimenoa suuren viiveen yhteyksissä, mutta käyttävät enemmän muistia.

grpc.WithInitialWindowSize(1 << 20)

Rajoittamattomien puskureiden välttäminen

Yleinen virhe on lukea tietokannasta tai tiedostosta nopeammin kuin suoratoisto ehtii tyhjentyä ja puskuroida kaikki tiedot muistiin. Rajoita tuotanto aina valmiussignaalin perusteella, jotta myös lähde pysähtyy.

Suurten hyötykuormien pilkkominen

Jaa suuret siirrot rajatun kokoisiin osiin (esimerkiksi 64 kilotavuun) ja suoratoista ne. Jokainen osa noudattaa vuonhallintaa, joten muistin käyttö pysyy tasaisena kokonaiskoon suuruudesta riippumatta.

for offset := 0; offset < len(data); offset += 65536 {
  end := min(offset+65536, len(data))
  stream.Send(&Chunk{Data: data[offset:end]})
}

Käytännön vinkit

Toimiva suoratoisto edellyttää seurantaa:

  • Seuraa lähettäjien muistin kasvua
  • Seuraa pysähtyneitä suoratoistoja (nollaan juuttuneita ikkunoita)
  • Yhdistä määräajat vuonhallintaan, jotta jumiutuneet kutsut voidaan rajata

Pikatesti

Testaa vuonhallinnan ymmärtämisesi.

Kertaus

Opit suoratoiston vuonhallinnan ja backpressuren:

  • HTTP/2-ikkunat määrittävät, kuinka monta tavua voi siirtyä
  • Backpressure ilmoittaa tuottajalle, että sen on hidastettava
  • Blokkaavat stubit blokkaavat; async-stubit tarjoavat isReady- ja onReadyHandler-toiminnot
  • Säädä ikkunakokoja läpimenon ja muistin käytön tasapainottamiseksi
  • Pilkko suuret hyötykuormat ja rajoita lähteitä, jotta muistin käyttö pysyy tasaisena
Aloita maksutta

Opi gRPC ja suorituskykyiset API:t 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 ”Suoratoiston vuonhallinta ja backpressure” ilmainen?

Kyllä – oppitunnin ”Suoratoiston vuonhallinta ja backpressure” 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 gRPC ja suorituskykyiset API:t-kurssin, päivitä CoddyKit PROhon. gRPC ja suorituskykyiset API:t-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Suoratoiston vuonhallinta ja backpressure”?

Oppikaa hallitsemaan, miten gRPC-suoratoistot käsittelevät vuonhallintaa ja backpressurea, jotta nopeat tuottajat eivät koskaan kuormita hitaita kuluttajia liikaa pitkäkestoisissa kaksisuuntaisissa y… Harjoittelet gRPC ja suorituskykyiset API:t-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni gRPC ja suorituskykyiset API:t-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin gRPC ja suorituskykyiset API:t-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Suoratoiston vuonhallinta ja backpressure”-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ä gRPC ja suorituskykyiset API:t-oppitunnilla?

Kyllä. Jokainen gRPC ja suorituskykyiset API:t-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

  1. Palvelinpohjainen streamaus
  2. Asiakaspohjainen streamaus
  3. Kaksisuuntainen streamaus
  4. Suoratoiston vuonhallinta ja backpressure
← Takaisin: gRPC ja suorituskykyiset API:t