Geyser gRPC - 모범 사례

이 가이드는 견고한, 생산-ready 응용 프로그램을 구축하기위한 필수 패턴을 다룹니다. Geyser gRPC. Solana Stream SDK 지원 Geyser gRPC.

시작하기

  • 간단한 시작: 슬롯 구독을 사용하여 복잡한 필터를 추가하기 전에 스트리밍에 익숙해지기 시작합니다.
  • 필터를 현명하게 사용하십시오: 대역폭/을 줄이기 위한 필요만 구독하십시오CPU. 투표 거래는 ~70%의 트래픽을 떼어내지 않으면 삭제됩니다.
rust
SubscribeRequestFilterTransactions {
    vote: Some(false),   // Exclude ~70% vote txs
    failed: Some(false), // Exclude failed txs
    ..Default::default()
}

연결 관리

  • 자동 연결: 네트워크 문제를 기대; exponential 백 오프와 다시 연결.
  • Ping/pong 취급: Yellowstone gRPC 서버는 ping을 보냅니다. 항상 pong 또는 서버와 응답은 연결 (일반적인 원인의 ~30s는 차단합니다)를 닫을 수 있습니다.
rust
if matches!(update.update_oneof, Some(UpdateOneof::Ping(_))) {
    subscribe_tx.send(SubscribeRequest {
        ping: Some(SubscribeRequestPing { id: 1 }),
        ..Default::default()
    }).await?;
}
  • Gap 회복: 사용 from_slot 데이터 손실 (duplicates 허용)을 방지하기 위해 다시 연결 후.
rust
subscribe_request.from_slot = if tracked_slot > 0 {
    Some(tracked_slot) // Optionally subtract a small buffer to dodge reorgs
} else {
    None
};

건축 패턴

  • 채널과 분리된 진입 및 처리는 사업 논리에서 네트워크 IO를 분리하고 backpressure를 추가합니다.
rust
let (tx, rx) = mpsc::channel::<SubscribeUpdate>(10_000);
// ingress task reads stream and tx.send(...)
// processing task consumes rx and does business logic
  • 결합된 채널을 사용: 처리 속도와 자료 손실 포용력 (smaller = 더 적은 기억, 더 하락에 근거를 둔 수용량을 선택하십시오; 더 큰 = 더 많은 기억, 더 적은 하락).

성과 및 탄력

  • 임계값이 초과될 때 모니터 처리 대기시간 및 로그.
  • 배치 DB 쓰기; 배치 크기 또는 간격에 플러시.
  • 외부 통화에 대한 async IO를 사용합니다. worker 작업/threads에 대한 의거한 compute를 해제하십시오.
  • 할당을 줄이기 위해 구독 요청을 재사용합니다.

오류 처리

  • Distinguish 오류 유형 (대 채널 처리 대 스트림).
  • 재연결에 노출된 백오프 (최초, 적당한 최대 모자).
  • Log/metric는 느린 소비자 조건을 추적하는 업데이트가 떨어졌습니다.

Data Management(데이터 관리)

  • 사용시 핸들 중복 from_slot (시간 반동 캐시 또는 DB 제약).
  • 사용 케이스 당 약속을 선택하십시오:
    • 처리: 빠른 대쉬보드, 뒤를 구출지도 모릅니다
    • 확인: 대부분의 apps/indexers를 위한 좋은 과태
    • 최종화: 절대 특정이 필요한 경우

동적 구독

런타임(hot-swap filter, expand apply)에서 구독을 업데이트하는 양방향 스트림을 사용합니다.

회사 소개

  • ✅ 자동차 연결은 폭발성 백오프로
  • ✅ Gap 복구 사용 from_slot
  • ✅ Ping/pong 처리 (아보이드 30s 차단)
  • ✅ 분리된 진입 및 처리와 경계 채널/backpressure
  • ✅ 오류 로그 및 메트릭 / 알러지
  • ✅ 처리 대기 시간 추적
  • ✅ 중복 처리 및 필터 최적화
  • ✅ 일괄 쓰기 ( persisting 경우)
  • ✅ Graceful 폐쇄 및 건강 검사

추가 리소스