Geyser gRPC - Best practices
Deze handleiding behandelt essentiële patronen voor het bouwen van robuuste, productieklare applicaties met Geyser gRPC. Solana Stream SDK ondersteunt Geyser gRPC.
Aan de slag
- Begin eenvoudig: start met slot-abonnementen om vertrouwd te raken met streaming voordat u complexe filters toevoegt.
- Gebruik filters verstandig: abonneer u alleen op wat u nodig heeft om bandbreedte/CPU te verminderen.
rust
Verbindingsbeheer
- Automatische herverbinding: verwacht netwerkproblemen; maak opnieuw verbinding met exponentiële backoff.
- Ping/pong-afhandeling: Yellowstone gRPC-servers sturen een ping. Reageer altijd met pong, anders kan de server de verbinding sluiten (veelvoorkomende oorzaak van verbroken verbindingen na ~30s).
rust
- Gap recovery: gebruik
from_slotna herverbinding om gegevensverlies te voorkomen (duplicaten zijn acceptabel).
rust
Architectuurpatronen
- Scheid inkomend verkeer en verwerking met channels om netwerk-IO los te koppelen van bedrijfslogica en backpressure toe te voegen.
rust
- Gebruik bounded channels: kies de capaciteit op basis van verwerkingssnelheid en tolerantie voor gegevensverlies (kleiner = minder geheugen, meer weggevallen updates; groter = meer geheugen, minder weggevallen updates).
Prestaties en veerkracht
- Monitor verwerkingslatentie en log wanneer drempelwaarden worden overschreden.
- Bundel DB-schrijfacties; flush bij een bepaalde batchgrootte of na een interval.
- Gebruik async IO voor externe aanroepen; verplaats zware berekeningen naar worker-taken/threads.
- Hergebruik abonnementsverzoeken om allocaties te verminderen.
Foutafhandeling
- Onderscheid fouttypen (stream vs verwerking vs channel).
- Herstel een ongeldige aanvraag voordat u opnieuw probeert; gebruik pauzebewuste exponentiële backoff alleen wanneer een antwoord om een herhaling vraagt.
- Log en meet weggevallen updates om situaties met een trage consument te volgen.
Herstel vóór opnieuw proberen en pauzebewuste backoff
Bewaar de eerste gRPC-fout voordat een herverbindingslus deze vervangt. Leg status en bericht vast, plus aanwezige metadata
x-erpc-error-code, x-erpc-error-reason, x-erpc-doc-url, x-erpc-retry-after-seconds en x-erpc-retry-at. Een vroege sluiting kan op een algemene transportfout lijken en bevat mogelijk niet elke trailer.Herstel een ongeldige aanvraag, afgewezen filtervorm of afwijkende IP-registratie voordat u opnieuw probeert. Wacht bij een ERPC-pauze tot de teruggegeven deadline; die is specifieker dan lokale backoff. Gebruik begrensde exponentiële backoff voor beschikbaarheidsfouten en andere herhaalbare antwoorden. Herhaal een ongewijzigde aanvraag niet alleen omdat die een niet-nulstatus gaf.
Resourcegebruik en verwerkingscapaciteit
Shared-bescherming voorkomt dat één workload aflevercapaciteit verbruikt die andere ERPC-klanten nodig hebben. Een stream kan traag worden door effectieve bandbreedte, CPU, geheugen, de consumentwachtrij, schrijfacties naar de database of externe aanroepen. Resources moeten bij de workload passen; een trage ontvanger wijst niet zelfstandig de beperking aan.
Meet de piekdatasnelheid bij de consument. Zet MB/s met
MB/s × 8 om naar Mbps en houd ruimte boven de gemeten piek. Er is geen vaste ongemeten ondergrens. Houd ontvangstwerk kort, geef updates door aan een begrensde wachtrij en schaal het abonnement op of beperk het als de verwerking het niet kan bijhouden. Een begrensde wachtrij beperkt geheugen; zij lost een blijvend trage consument niet op.Gegevensbeheer
- Behandel duplicaten bij gebruik van
from_slot(tijdgebonden cache of DB-constraints). - Kies commitment per use case:
- processed: snelste dashboards, kan worden teruggedraaid
- confirmed: goede standaard voor de meeste apps/indexers
- finalized: wanneer absolute zekerheid vereist is
Dynamische abonnementen
Gebruik de bidirectionele stream om abonnementen tijdens runtime bij te werken (hot-swap filters, dekking uitbreiden) zonder opnieuw te verbinden.
Productiechecklist
- ✅ Automatische herverbinding met exponentiële backoff
- ✅ Gap recovery met
from_slot - ✅ Ping/pong-afhandeling (voorkom verbroken verbindingen na 30s)
- ✅ Gescheiden inkomend verkeer en verwerking met bounded channels/backpressure
- ✅ Foutlogging en metrics/alerting
- ✅ Bijhouden van verwerkingslatentie
- ✅ Duplicaatafhandeling en filteroptimalisatie
- ✅ Gebundelde schrijfacties (bij opslag van gegevens)
- ✅ Graceful shutdown en health checks
Aanvullende bronnen
- Solana Stream SDK (Geyser gRPC-ondersteuning): https://github.com/ValidatorsDAO/solana-stream






