ERPC - Geliştirilmiş Solana RPC

Geyser gRPC En İyi Uygulamalar

Bu kılavuz sağlam, üretim hazır uygulamaları ile ilgili temel kalıpları kapsar Geyser gRPC. Solana Stream SDK destek destekliyor Geyser gRPC.

Başlanmaya başladı

  • Basit başlayın: karmaşık filtreler eklemeden önce akışla tanıdık almak için slot abonelikleri ile başlayın.
  • Filtreleri akıllıca kullanın: yalnızca bant genişliğini azaltmak için ihtiyacınız olan şeye abone olun /CPUOy işlemleri - trafik% 70'i - onlara ihtiyacınız olup olmadığını unutmayın.
rust
SubscribeRequestFilterTransactions {
    vote: Some(false),   // Exclude ~70% vote txs
    failed: Some(false), // Exclude failed txs
    ..Default::default()
}

Bağlantı yönetimi

  • Otomatik yeniden bağlantı: ağ sorunları bekleyin; üstel arka ile yeniden bağlantı kurun.
  • Ping/pong kullanımı: Yellowstone gRPC sunucular ping gönderir. Her zaman pong veya sunucu ile yanıt verir (~30s bağlantılarının nedeni).
rust
if matches!(update.update_oneof, Some(UpdateOneof::Ping(_))) {
    subscribe_tx.send(SubscribeRequest {
        ping: Some(SubscribeRequestPing { id: 1 }),
        ..Default::default()
    }).await?;
}
  • Gap recovery: kullanımı from_slot Veri kaybından kaçınmak için yeniden bağlantı kurmak (uygunlar kabul edilebilir).
rust
subscribe_request.from_slot = if tracked_slot > 0 {
    Some(tracked_slot) // Optionally subtract a small buffer to dodge reorgs
} else {
    None
};

Mimari modeller

  • Ayrı ingress ve işlem kanallarla iş mantığından çift ağ IO'yu silme ve geri baskı ekleyebilme.
rust
let (tx, rx) = mpsc::channel::<SubscribeUpdate>(10_000);
// ingress task reads stream and tx.send(...)
// processing task consumes rx and does business logic
  • Bağlanmış kanallar kullanın: işlem hızı ve veri kaybına dayanan kapasite seçin (daha az bellek, daha fazla damla; daha fazla bellek, daha az damla).

Performans ve resiliency

  • Eşlerin aşıldığı zaman geç saatler ve log işleme.
  • Batch DB yazıyor; toplu boyutta veya aralığın üzerine dökün.
  • Dış çağrılar için birsync IO kullanın; işçi görevleri / hazırlıkları için ağır hesaplamayı bırakın.
  • Payları azaltmak için yeniden kullanım abonelik talepleri.

Hata işleme

  • Hata türlerini (sabah vs kanalı) bozmak.
  • Exponential backoff yeniden bağlantıda (küçük, makul bir maxda kap)
  • Log/metric yavaş-konsumer koşullarını takip etmek için güncellemelerini bıraktı.

Data management Data management

  • Kullandığında tekrarları from_slot (Zamana bağlı önbellek veya DB kısıtlamaları).
  • Kullanım durumunda taahhüt alın:
    • İşlendi: En hızlı panjurlar geri dönebilir
    • Doğrulandı: çoğu uygulama /indexers için iyi varsayılan
    • Sonlandırılmış: mutlak kesinlik gerektiğinde

Dinamik abonelikler

Takip eden abonelikleri güncellemek için iki yönlü akış kullanın (hot-swap filtreleri, geniş kapsama) yeniden bağlantı kurmadan.

Prodüksiyon checklist

  • Auto yeniden bağlantıya üst üste geri dönüş ile bağlantı
  • Gap kurtarma using using from_slot
  • Ping/pong kullanımı (30'lardan kaçının)
  • Ayrı ingress ve sınırlı kanallar / geri baskı ile işleme
  • Hata Girişi ve metrik /
  • ✅ İşleme geçncy takip
  • Duplicate handle and filter optimizasyon
  • Batch yazıyor (eğer devam ederse)
  • Grace Graceful kapatılması ve sağlık kontrolleri

Ek kaynaklar