NOUVEAU : Helius acquiert Light Protocol
multiplier par 40 le débit du client grpc javascript pour solana avec le sdk laserstream
Blog/Développement

Streaming Solana haute performance avec les SDK LaserStream 

Ingénieur intégrationHet Dagli sur XHet Dagli sur LinkedIn
4 min de lecture
Sommaire

    LaserStream est un service de streaming gRPC nouvelle génération, optimisé pour fournir les données Solana avec une latence minimale. Entièrement rétrocompatible avec l’interface gRPC Yellowstone, il peut la remplacer directement et ne nécessite que de modifier l’endpoint et le x-token, sans aucun changement de code.

    Des équipes de premier plan comme DFlow utilisent LaserStream pour assurer le suivi en temps réel des flux d’ordres et de leur exécution avec une rapidité et une fiabilité inégalées.

    Grâce à cette compatibilité, les développeurs peuvent migrer facilement leurs implémentations Yellowstone existantes. Cependant, les clients Yellowstone standards ne disposent ni d’optimisations intégrées des performances ni de fonctionnalités de fiabilité.

    Les SDK LaserStream comblent ces lacunes en proposant une reconnexion automatique, une relecture basée sur les slots et une architecture à haut débit conçue pour les charges de travail exigeantes. Ils offrent ainsi un streaming fiable à latence ultra-faible, sans compromis.

    Un streaming fiable grâce à la reconnexion et à la relecture

    Les trois SDK LaserStream — JavaScript/TypeScript, Rust et Go — répondent à un enjeu essentiel du streaming à large bande passante : maintenir la continuité des données lors des interruptions réseau.

    Chaque SDK implémente une reconnexion automatique avec suivi des slots. En cas de perte de connexion, le client suit en interne le dernier slot traité.

    Lors de la reconnexion, il reprend exactement à cet endroit en demandant une relecture historique couvrant jusqu’à 48 heures.

    Cette architecture évite toute perte de données lors de déconnexions temporaires côté serveur, sans nécessiter de logique de nouvelle tentative au niveau de l’application.

    Le système de suivi des slots stocke en mémoire les numéros des slots traités. Lorsque replay: true (valeur par défaut), le SDK garantit l’absence de lacunes dans votre flux de données. Certains déploiements, notamment les nœuds dédiés, ne prennent pas en charge la relecture historique. Pour ces endpoints, définissez replay: false afin de désactiver le suivi interne des slots et de reprendre au slot actuel lors de la reconnexion.

    Goulots d’étranglement des performances JavaScript dans les flux gRPC

    Les flux gRPC Node.js rencontrent des goulots d’étranglement concrets qui deviennent critiques avec des volumes élevés. Le problème n’est pas théorique : il tient à ce qui se passe lorsque votre callback traite chaque message.

    Avec la boucle d’événements monothread de JavaScript, chaque opération effectuée dans votre gestionnaire de données — analyse de JSON, validation des données, exécution de la logique métier, journalisation des événements, etc. — bloque les messages suivants.

    Lorsque les messages arrivent plus vite que votre gestionnaire ne peut les traiter, le flux prend du retard, la contre-pression augmente, les callbacks s’accumulent et votre application traite des données de plus en plus obsolètes.

    Les clients gRPC entièrement écrits en JS aggravent ce problème par une surcharge supplémentaire : 

    • Désérialisation de Protobuf en JavaScript
    • Pression exercée sur le ramasse-miettes par l’allocation d’objets
    • Franchissement répété de la frontière entre JavaScript et le code natif pour les entrées/sorties réseau

    Pour les applications qui traitent chaque seconde des milliers de mises à jour de comptes ou de notifications de transactions, telles que les infrastructures MEV, les analyses en temps réel ou le suivi des carnets d’ordres, ces délais réduisent à néant tout avantage concurrentiel. Vos systèmes réagissent à des événements qui se sont déjà produits plusieurs secondes auparavant.

    Utiliser un cœur Rust avec des liaisons NAPI sans copie pour optimiser les performances du SDK JavaScript

    Le SDK JavaScript LaserStream élimine ces goulots d’étranglement en transférant entièrement les opérations coûteuses hors de JavaScript.

    L’ensemble du moteur de streaming, la gestion des connexions gRPC, la sérialisation Protobuf et le suivi des slots s’exécutent en Rust. Seule la logique de votre application s’exécute en JavaScript.

    Cette architecture résout les problèmes fondamentaux : 

    1. Les entrées/sorties réseau et la désérialisation Protobuf n’utilisent jamais la boucle d’événements JavaScript.
    2. La couche Rust traite tous les messages dans des threads distincts.
    3. La couche Rust transmet des octets Protobuf présérialisés aux callbacks JavaScript via des liaisons NAPI (Node-API).

    Voici un schéma du fonctionnement du SDK JavaScript LaserStream :

    Les liaisons NAPI permettent un transfert de données sans copie pour les mises à jour en streaming. Lorsque LaserStream envoie un message Protobuf, la couche Rust le désérialise, suit le slot si nécessaire, puis transmet directement les octets bruts à JavaScript sous la forme d’un Uint8Array, sans sérialisation supplémentaire ni copie intermédiaire.

    L’écart de performances est spectaculaire : 1,3 Go/s contre 30 Mo/s, soit 40 fois plus rapide que les clients JavaScript Yellowstone standards. 

    Il ne s’agit pas d’une amélioration progressive. C’est ce qui fait la différence entre traiter les flux de blocs complets en temps réel et accumuler plusieurs minutes de retard.

    Le cœur Rust gère :

    • Le cycle de vie des connexions gRPC et le contrôle des flux
    • La reconnexion automatique avec temporisation exponentielle
    • Le suivi des slots et la logique de relecture
    • L’encodage et le décodage Protobuf
    • La distribution thread-safe des callbacks via des files d’attente bornées, afin d’éviter une consommation excessive de mémoire lorsque les callbacks ralentissent

    JavaScript gère la logique applicative, le filtrage, les règles métier et la persistance des données, sans subir les goulots d’étranglement liés aux entrées/sorties réseau ou à la sérialisation.

    Prise en charge de la compression

    LaserStream prend en charge plusieurs algorithmes de compression au niveau de la couche de transport gRPC. La compression Zstd réduit la bande passante de 70 à 80 % par rapport aux flux non compressés. C’est essentiel pour les abonnements à haut volume, dont les coûts de trafic sortant augmentent proportionnellement au transfert de données.

    La configuration de la compression est simple :

    Code
    const config = {
      apiKey: 'your-key',
      endpoint: 'your-endpoint',
      channelOptions: {
        'grpc.default_compression_algorithm': CompressionAlgorithms.zstd,
        'grpc.max_receive_message_length': 1_000_000_000,
      }
    };

    Zstd offre de meilleurs taux de compression que gzip pour une charge CPU comparable, ce qui en fait le choix recommandé.

    Conclusion

    Les SDK LaserStream répondent aux principaux défis du streaming de données haute performance. Ils restent compatibles avec Yellowstone tout en ajoutant des fonctionnalités de fiabilité, une reconnexion automatique et une relecture basée sur les slots, absentes des clients standards. 

    Pour les applications JS, l’architecture basée sur Rust élimine les goulots d’étranglement de la boucle d’événements qui rendent les implémentations entièrement écrites en JS peu adaptées au passage à l’échelle.

    L’amélioration du débit par un facteur de 40 n’est pas une optimisation progressive. C’est une différence architecturale qui permet de traiter les flux de blocs complets en temps réel plutôt que d’accumuler plusieurs minutes de retard sous une charge extrême.

    Pour les applications en production où la latence et la fiabilité sont indispensables — infrastructures MEV, analyses en temps réel et systèmes de trading automatisé — les SDK LaserStream fournissent la base dont vous avez besoin.

    Ressources supplémentaires

    Abonnez-vous à Helius

    Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication

    Image agrandie