Geyser gRPC - ฝึกได้ดีที่สุด

มัคคุเทศก์นี้ครอบคลุมรูปแบบที่จําเป็นสําหรับการก่อสร้างอย่างรัดกุม, โปรแกรมที่พร้อมการผลิตด้วย Geyser gRPC. Solana รองรับระบบ SDK Geyser gRPC.

เริ่ม

  • เริ่มที่: เริ่มจากการบอกจํานวนช่อง เพื่อให้คุ้นเคยกับการไหลกระเพื่อม ก่อนการเพิ่มตัวกรองที่ซับซ้อน
  • ใช้ตัวกรองอย่างฉลาด: การบอกรับเฉพาะสิ่งที่คุณต้องการ เพื่อลด bandwidth/CPUการซื้อขายแบบโวตมี ~70% ของการจราจร -- ทิ้งมันหากคุณไม่ต้องการมัน
rust
SubscribeRequestFilterTransactions {
    vote: Some(false),   // Exclude ~70% vote txs
    failed: Some(false), // Exclude failed txs
    ..Default::default()
}

การจัดการการเชื่อมต่อ

  • การกลับมาเชื่อมต่ออัตโนมัติ: คาดว่าจะเกิดปัญหาเครือข่าย การติดต่อกับเอกซ์โปเนนเชียล รีเอกซ์โปเนนเชียล
  • การจัดการปิง/พ็อง: Yellowstone gRPC เซิร์ฟเวอร์ส่งเสียงping. ตอบสนองด้วยเสียงป้อบอัพ หรือเซิร์ฟเวอร์สามารถปิดการเชื่อมต่อได้ (สาเหตุของ ~30s ถูกตัดการเชื่อมต่อ)
rust
if matches!(update.update_oneof, Some(UpdateOneof::Ping(_))) {
    subscribe_tx.send(SubscribeRequest {
        ping: Some(SubscribeRequestPing { id: 1 }),
        ..Default::default()
    }).await?;
}
  • การกู้คืนช่อง: ใช้ from_slot หลัง จาก กลับ มา อยู่ ร่วม กัน อีก เพื่อ หลีก เลี่ยง การ สูญ เสีย ข้อมูล (ความ ยุ่งเหยิง เป็น ที่ ยอม รับ).
rust
subscribe_request.from_slot = if tracked_slot > 0 {
    Some(tracked_slot) // Optionally subtract a small buffer to dodge reorgs
} else {
    None
};

รูปแบบสถาปัตยกรรม

  • แยกทางรุกและดําเนินการด้วยช่องทางในการแยกเครือข่ายที่ขาดลอยจากตรรกะทางธุรกิจ และเพิ่มการกดทับ
rust
let (tx, rx) = mpsc::channel::<SubscribeUpdate>(10_000);
// ingress task reads stream and tx.send(...)
// processing task consumes rx and does business logic
  • ใช้ช่องเสียงแบบมีขอบเขต: เลือกความจุที่อิงมาจากความเร็วในการประมวลผล และความอดทนข้อมูลสูญหาย (ค่าหน่วยความจําน้อย= ค่ามาก, ค่าหยดมากกว่า = ค่าหน่วยความจํามากขึ้น, ค่าหยดน้อยลง)

ประสิทธิภาพ และ ความ ยืดหยุ่น

  • การประมวลผลความล่าช้าและล็อกเมื่อ ขีดจํากัดเกินขีด
  • Batch DB เขียนไว้ว่า; กดเมื่อมีขนาดหรือช่วงเวลาต่าง ๆ
  • ใช้ข้อมูล async IO สําหรับเรียกภายนอก; ไม่ให้โหลดการคํานวณหนักในการงาน/theads
  • ใช้การขอสมัครสมาชิกใหม่เพื่อลดการจองที่

การจัดการข้อผิดพลาด

  • แยกแยะรายการข้อผิดพลาด (Tream vs clate vs V transl)
  • การ ต่อ คู่ (เริ่ม ด้วย การ ทํา ซ้ํา กัน เล็ก ๆ, ทํา ให้ ถึง ขีด ที่ สม เหตุ สม ผล).
  • ปูมบันทึก/ สมมาตร ลดลง เข้าสู่สถานะการประมวลผลที่ช้า

การจัดการข้อมูล

  • จัดการกับการซ้ําเมื่อใช้งาน from_slot (ข้อจํากัดการส่งข้อมูลแบบเวลา หรือ DB)
  • เลือกข้อผูกมัดต่อตัวพิมพ์ตัวพิมพ์เล็ก:
    • ประมวลผล: แผงหน้าปัดที่เร็วที่สุด อาจม้วนกลับได้
    • ยืนยัน: ค่าปริยายที่ดีสําหรับโปรแกรม/ indexer ส่วนมาก
    • เสร็จสิ้นเมื่อจําเป็นความแน่นอนที่แน่นอน

การบอกรับข้อมูลแบบไม่ตายตัว

ใช้สายข้อมูล b ทางเดียว เพื่อปรับปรุงข้อมูลบอกรับเมื่อทํางาน (ตัวกรองที่อยู่ด้านบน, ครอบคลุมการส่งภาพ) โดยไม่เชื่อมต่อ

ตรวจหาการเพิ่มประสิทธิภาพ

  • ○ การ กลับ มา ใช้ เครื่อง บิน อัตโนมัติ อีก ครั้ง หนึ่ง
  • ○ ฟื้น ตัว จาก การ เป็น โรค กามโรค โดย ใช้ from_slot
  • ○ การ จัด การ แบบ พิง/ ป็อง (ตัด ขาด 30 ช่วง)
  • ○ แยก ตัว อยู่ ต่าง หาก ใน สภาพ ก้าวร้าว และ การ ดําเนิน งาน ด้วย การ กระชับ ช่อง/ หด ตัว
  • ○ เกิด ความ ผิด พลาด ใน การ ทํา ไม้ และ การ วัด ความ จํา
  • ○ กําลังประมวลผลการติดตามความล่าช้า
  • ○ การ จับ และ การ ปรับ ตั้ง ตัว เอง ให้ เหมาะ กับ เครื่อง กรอง แบบ ต่าง ๆ
  • ○ เขียน แบบ บัค (หาก ไม่ ทํา ตาม)
  • ○ การ หยุด งาน อย่าง ดี และ การ ตรวจ สุขภาพ

ทรัพยากรเพิ่มเติม