新着:HeliusがLight Protocolを買収
LaserStreamのご紹介
ブログ/更新情報

LaserStreamのご紹介:次世代のSolanaデータストリーミング

Helius シニアソフトウェアエンジニアXのPedro ManticaLinkedInのPedro Mantica
インテグレーションエンジニアXのGuneyLinkedInのGuney
読了時間:5分
目次

    LaserStreamは、専用ノードでgRPCを運用する代わりに、そのまま導入できるサービスです。48時間分の履歴リプレイと自動再接続により、Solana上のあらゆるチームが、専用インフラを運用する数分の一のコストでトランザクション、スロット、ブロック、アカウントの変更をストリーミングできます。

    LaserStreamとは?

    LaserStreamは、信頼性の高い低レイテンシなSolanaデータを必要とする開発者向けに特化して設計された次世代ストリーミングサービスです。トランザクション、スロット、ブロック、アカウントなどのオンチェーンイベントを、業界トップクラスの信頼性、パフォーマンス、柔軟性でアプリに直接配信します。

    LaserStreamは単一の専用ノードに依存せず、複数のSolanaノードへ接続してデータを集約し、フロントエンドアプリやバックエンドデータベースへストリーミングします。

    このシンプルで冗長性と拡張性に優れた構成により、専用インフラを管理する必要がなく、レイテンシがより安定し、更新を取りこぼすこともありません。

    LaserStreamは履歴リプレイにも対応しているため、サブスクリプションが一時停止または切断された場合でも、過去48時間分のデータを取得して追いつくことができます。

    LaserStreamの仕組み

    各LaserStreamサーバーは複数のSolanaノードに接続し、受信データの重複を排除しながら、開発者が過去のスロットをリプレイできるよう直近のスロットをバッファに保持します。

    高可用性、データの正確性、拡張性を確保するため、LaserStreamは7つのリージョンにデプロイされ、各リージョンでは冗長性を確保するために複数のサーバーを稼働させています。

    あるリージョン内のサーバーが停止した場合、トラフィックは同じリージョン内で次に利用可能なサーバーへ自動的に転送されます。

    そのため、サーバーメンテナンス中や予期しない障害時でも、アプリケーションは高品質なデータフィードへの接続を維持できます。

    LaserStreamの機能

    LaserStreamは専用ノードからそのまま置き換えられ、gRPCを使用するプロダクトに多くの独自のメリットを提供します。

    履歴リプレイと自動再接続

    WebSocketsとgRPCでよくある問題の一つが、ソケット切断とデータの取りこぼしです。LaserStreamは、自動再接続と履歴リプレイによってこの問題を解決します。

    LaserStreamでは最大48時間前のスロットをリプレイできるため、接続が切断されても重要なデータを失いません。再接続を管理したり、予期しない障害で取りこぼしたブロックを補完したりするためのカスタムコードは、もう必要ありません。

    高い冗長性と信頼性

    Solanaデータストリーミングサービスにおいて、信頼性とデータの正確性は妥協できません。LaserStreamはグローバルに分散したサーバークラスターを使用し、それぞれを複数のSolanaノードで支えることで、データストリームが中断されず、常に正確なデータを受信できるようにします。

    • グローバルに分散したクラスターによる高可用性を標準搭載
    • クラスターはフランクフルト、アムステルダム、ソルトレイクシティ、東京、シンガポール、ピッツバーグ、ニューアークの7リージョンに分散
    • 各リージョンで複数のLaserStreamサーバーを稼働
    • 耐障害性を確保するため、各サーバーを複数のSolanaノードでサポート
    • ロードバランサーを介してクライアントを自動的にリダイレクトし、シームレスなフェイルオーバーを実現

    手動フェイルオーバーも、データ損失の心配もありません。継続的なストリーミングだけです。

    ネイティブに近いパフォーマンス

    リアルタイムのデータストリーミングでは時間が極めて重要であり、収益性の高い取引の成否を左右することもあります。

    LaserStreamは、Solanaのエポックが最も混雑するときでも高速かつ安定して動作するよう設計されています。マルチリージョンのリレーメッシュがリアルタイムのレイテンシを常時確認し、各サブスクリプションを最速の経路へルーティングします。これにより、配信ジッターをミリ秒単位に抑えながら、毎秒数万件のメッセージを継続的に処理できます。

    上流ノードやリージョン全体に一時的な障害が発生した場合でも、接続は数ミリ秒で次のリレーへ切り替わり、取りこぼしたスロットを最大48時間分まで自動的にリプレイするため、イベントを見逃すことはありません。

    その結果、欠損のない高スループットのストリームを利用でき、稼働率ではなく戦略に集中できます。

    すぐにセットアップ可能

    従来、トレーダーやレイテンシに敏感なアプリケーションがリアルタイム更新をストリーミングするには、Geyserプラグインを実行する専用ノードが必要でした。しかし、専用ノードの運用は複雑で時間がかかり、希望するロケーションの在庫状況にも左右されます。

    LaserStreamなら、gRPCストリーム用に独自のノードをプロビジョニング、設定、監視、管理する手間がなくなり、より優れたパフォーマンスと開発者に使いやすい機能を利用できます。

    LaserStreamはEnhanced WebSocketsおよびgRPCと完全な互換性を持つ使い慣れたインターフェースを使用しているため、現在の構成からシームレスに置き換えられます。

    複雑な移行も、新しい構文も必要ありません。

    既存のgRPC URLをLaserStream URLに置き換えるだけで、最高のパフォーマンスと信頼性を実現できます。

    高度なフィルタリング

    Solanaの膨大なデータを整理するには、最も重要な情報だけを受信できる包括的で柔軟なフィルタリングオプションが必要です。

    LaserStreamなら、データを正確に制御できます。特定のアカウント、アカウント所有者、トランザクションステータス、ブロックメタデータ、スロットなどで簡単にフィルタリングできます。その他の条件にも対応しています。

    より手頃な料金

    専用ノードは月額$2,900からで、スタートアップやコストを重視するアプリケーションにとって大きな負担となる場合があります。LaserStreamなら、HeliusのProfessionalプラン(月額$999)を利用するすべてのチームが、高性能なリアルタイムデータストリームへアクセスできます。

    詳細はプランと料金のページをご覧ください。

    LaserStreamを使い始める方法

    以下のクイックスタートガイドでは、LaserStream SDKを通じてgRPCで接続する方法を説明します。

    gRPCクイックスタート

    以下の手順に従ってLaserStreamを使い始めてください。

    1. 新しいプロジェクトを作成する

    コード
    mkdir laserstream-grpc-demo
    cd laserstream-grpc-demo
    npm init -y

    2. 依存関係をインストールする

    コード
    npm install helius-laserstream
    npm install --save-dev typescript ts-node
    npx tsc --init

    3. APIキーを取得する

    APIキーを生成し、ダッシュボードのエンドポイントページから使用するエンドポイントを選択してください。

    4. サブスクリプションスクリプトを作成する

    index.tsという名前のファイルに、以下のコードを追加してください。

    コード
    import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream'
    
    async function main() {
      const subscriptionRequest: SubscribeRequest = {
        transactions: {
          client: {
            accountInclude: [‘pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA’],
            accountExclude: [],
            accountRequired: [],
            vote: false,
            failed: false
          }
        },
        commitment: CommitmentLevel.CONFIRMED,
        accounts: {},
        slots: {},
        transactionsStatus: {},
        blocks: {},
        blocksMeta: {},
        entry: {},
        accountsDataSlice: [],
        // Optionally, you can replay missed data by specifying a fromSlot:
        // fromSlot: '224339000'
        // Note: Currently, you can only go back 48 hours
      };
    
      // Replace these values with your actual Laserstream API key and endpoint
      const config: LaserstreamConfig = {
        apiKey: 'your-api-key',
        endpoint: 'your-endpoint',
      }
    
      await subscribe(config, subscriptionRequest, async (data) => {
        console.log(data);
      }, async (error) => {
        console.error(error);
      });
    }
    
    main().catch(console.error);

    5. 実行して結果を確認する

    コード
    npx ts-node index.ts

    確定済みのトランザクションにアカウントpAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEAが関係するたびに、コンソールへトランザクションの更新が表示されます。

    過去のデータをリプレイする場合は、fromSlotパラメーターのコメントを解除し、開始する直近のスロットを指定してください。

    その他のガイドや例については、LaserStreamのgRPCドキュメントをご覧ください。

    LaserStreamの提供状況

    LaserStreamは、Developerプラン(月額$49)以上を利用するすべてのHeliusユーザーがDevnetで利用できます。Professionalプラン(月額$999)以上のユーザーは、Mainnet上のLaserStreamへアクセスできます。

    アップグレードまたは移行する前にSolana mainnetでLaserStreamを評価したい場合は、無料トライアルをリクエストしてください。

    LaserStreamのサポート

    問題が発生した場合、質問がある場合、または全般的なフィードバックをお寄せいただける場合は、DiscordまたはTelegramからお問い合わせください。皆さまのご意見を伺い、問題解決をお手伝いできれば幸いです。

    謝辞

    Kirill Fomichev氏に心より感謝します。LaserStreamは、同氏が手がけた優れたRichatプロジェクトのカスタムフォークです。

    Heliusを購読

    Solana開発の最新情報や新しい記事の公開通知を受け取れます