MỚI: Helius mua lại Light Protocol
tăng thông lượng của ứng dụng Solana JavaScript gRPC gấp 40 lần với SDK LaserStream
Blog/Phát triển

Truyền phát Solana hiệu năng cao với các SDK LaserStream 

Kỹ sư tích hợpHet Dagli trên XHet Dagli trên LinkedIn
Đọc trong 4 phút
Mục lục

    LaserStream là dịch vụ truyền phát gRPC thế hệ mới, được tối ưu hóa để cung cấp dữ liệu Solana với độ trễ thấp nhất. Dịch vụ này hoàn toàn tương thích ngược với giao diện Yellowstone gRPC và có thể thay thế trực tiếp chỉ bằng cách thay đổi endpoint và x-token mà không cần sửa đổi mã.

    Các đội ngũ hàng đầu như DFlow sử dụng LaserStream để vận hành quy trình theo dõi luồng lệnh và thực thi theo thời gian thực với tốc độ và độ tin cậy vượt trội.

    Khả năng tương thích này giúp các nhà phát triển di chuyển liền mạch những triển khai Yellowstone hiện có. Tuy nhiên, các ứng dụng Yellowstone tiêu chuẩn không có sẵn những tính năng tối ưu hóa hiệu năng và độ tin cậy.

    Các SDK LaserStream khắc phục những hạn chế này bằng khả năng tự động kết nối lại, phát lại theo slot và kiến trúc thông lượng cao được thiết kế cho khối lượng công việc khắt khe — mang đến cả độ tin cậy lẫn khả năng truyền phát với độ trễ cực thấp mà không phải đánh đổi.

    Truyền phát ổn định nhờ kết nối lại và phát lại

    Cả ba SDK LaserStream—JavaScript/TypeScript, Rust và Go—đều giải quyết một thách thức quan trọng trong truyền phát băng thông cao: duy trì tính liên tục của dữ liệu khi mạng gián đoạn.

    Mỗi SDK đều triển khai khả năng tự động kết nối lại kèm theo dõi slot. Khi mất kết nối, ứng dụng sẽ theo dõi nội bộ slot cuối cùng đã xử lý.

    Sau khi kết nối lại, ứng dụng tiếp tục từ chính xác vị trí đó và yêu cầu phát lại dữ liệu lịch sử trong tối đa 48 giờ.

    Kiến trúc này ngăn mất dữ liệu khi máy chủ tạm thời ngắt kết nối mà không yêu cầu logic thử lại ở cấp ứng dụng.

    Trình theo dõi slot lưu số hiệu các slot đã xử lý trong bộ nhớ. Khi replay: true (mặc định), SDK đảm bảo luồng dữ liệu không có khoảng trống. Một số triển khai, đặc biệt là các node chuyên dụng, không hỗ trợ phát lại dữ liệu lịch sử. Với các endpoint này, hãy đặt replay: false để tắt tính năng theo dõi slot nội bộ và tiếp tục từ slot hiện tại khi kết nối lại.

    Điểm nghẽn hiệu năng của JavaScript trong các luồng gRPC

    Các luồng gRPC trên Node.js gặp phải những điểm nghẽn thực tế và chúng trở nên nghiêm trọng khi khối lượng dữ liệu lớn. Đây không phải vấn đề lý thuyết, mà là những gì xảy ra khi callback xử lý từng thông điệp.

    Vòng lặp sự kiện đơn luồng của JavaScript đồng nghĩa với việc mọi thao tác trong trình xử lý dữ liệu (ví dụ: phân tích JSON, xác thực dữ liệu, chạy logic nghiệp vụ, ghi nhật ký sự kiện, v.v.) đều chặn các thông điệp tiếp theo.

    Khi thông điệp đến nhanh hơn tốc độ xử lý của trình xử lý, luồng sẽ bị chậm lại, áp lực ngược gia tăng, callback xếp hàng và ứng dụng phải xử lý dữ liệu ngày càng lỗi thời.

    Các ứng dụng gRPC thuần JS còn làm tăng thêm chi phí xử lý: 

    • Giải tuần tự hóa protobuf trong JavaScript
    • Áp lực thu gom rác do phân bổ đối tượng
    • Liên tục vượt qua ranh giới giữa JavaScript và mã native để thực hiện I/O mạng

    Đối với các ứng dụng xử lý hàng nghìn bản cập nhật account hoặc thông báo transaction mỗi giây, chẳng hạn như hạ tầng MEV, phân tích theo thời gian thực hoặc theo dõi sổ lệnh, những độ trễ này làm mất đi mọi lợi thế cạnh tranh. Hệ thống của bạn đang phản ứng với các sự kiện đã xảy ra từ vài giây trước.

    Sử dụng lõi Rust với liên kết NAPI zero-copy để tối ưu hóa hiệu năng SDK JavaScript

    SDK LaserStream JavaScript giải quyết những điểm nghẽn này bằng cách chuyển hoàn toàn các thao tác tốn kém ra khỏi JavaScript.

    Toàn bộ công cụ truyền phát, hoạt động quản lý kết nối gRPC, tuần tự hóa protobuf và theo dõi slot đều chạy trong Rust. Chỉ logic ứng dụng của bạn chạy trong JavaScript.

    Kiến trúc này giải quyết các vấn đề cốt lõi: 

    1. I/O mạng và quá trình giải tuần tự hóa protobuf không bao giờ đi qua vòng lặp sự kiện JavaScript.
    2. Lớp Rust xử lý mọi thông điệp trong các luồng riêng biệt.
    3. Lớp Rust chuyển các byte protobuf đã được tuần tự hóa sẵn đến callback JavaScript thông qua liên kết NAPI (Node-API).

    Dưới đây là sơ đồ hoạt động của SDK LaserStream JavaScript:

    Các liên kết NAPI cung cấp khả năng truyền dữ liệu zero-copy cho các bản cập nhật trong luồng. Khi LaserStream gửi một thông điệp protobuf, lớp Rust giải tuần tự hóa thông điệp đó, theo dõi slot nếu cần, rồi chuyển trực tiếp các byte thô đến JavaScript dưới dạng Uint8Array mà không cần tuần tự hóa bổ sung hay tạo bản sao trung gian.

    Khác biệt về hiệu năng rất lớn: 1.3 GB/s so với 30 MB/s, nhanh hơn 40 lần so với các ứng dụng Yellowstone JavaScript tiêu chuẩn. 

    Đây không phải là một cải tiến nhỏ. Đó là khác biệt giữa việc xử lý các luồng khối đầy đủ theo thời gian thực và bị chậm hàng phút.

    Lõi Rust xử lý:

    • Vòng đời kết nối gRPC và kiểm soát luồng
    • Tự động kết nối lại với thời gian chờ tăng theo cấp số nhân
    • Logic theo dõi và phát lại slot
    • Mã hóa/giải mã protobuf
    • Điều phối callback an toàn luồng thông qua hàng đợi có giới hạn (ngăn bộ nhớ phình to khi callback chậm lại)

    JavaScript xử lý logic ứng dụng, hoạt động lọc, quy tắc nghiệp vụ và lưu trữ dữ liệu mà không phải đối mặt với các điểm nghẽn về I/O mạng hoặc tuần tự hóa.

    Hỗ trợ nén

    LaserStream hỗ trợ nhiều thuật toán nén ở lớp truyền tải gRPC. So với các luồng không nén, cơ chế nén Zstd giảm 70-80% băng thông. Điều này rất quan trọng với các gói đăng ký lưu lượng lớn, khi chi phí dữ liệu đầu ra tăng tuyến tính theo lượng dữ liệu truyền.

    Cấu hình nén rất đơn giản:

    Mã
    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 có tỷ lệ nén tốt hơn gzip với mức sử dụng CPU tương đương, vì vậy đây là lựa chọn được khuyến nghị.

    Kết luận

    Các SDK LaserStream giải quyết những thách thức cơ bản trong truyền phát dữ liệu hiệu năng cao. Chúng duy trì khả năng tương thích với Yellowstone, đồng thời bổ sung các tính năng đảm bảo độ tin cậy, tự động kết nối lại và phát lại theo slot mà những ứng dụng tiêu chuẩn không có. 

    Đối với các ứng dụng JS, kiến trúc vận hành bằng Rust loại bỏ những điểm nghẽn vòng lặp sự kiện khiến các giải pháp thuần JS không thể vận hành thực tế ở quy mô lớn.

    Mức cải thiện thông lượng gấp 40 lần không phải là một tối ưu hóa nhỏ. Đó là khác biệt về kiến trúc giữa việc xử lý các luồng khối đầy đủ theo thời gian thực và bị chậm hàng phút khi chịu tải cực lớn.

    Đối với các ứng dụng production không thể đánh đổi độ trễ và độ tin cậy—hạ tầng MEV, phân tích theo thời gian thực và hệ thống giao dịch tự động—các SDK LaserStream cung cấp nền tảng bạn cần.

    Tài nguyên bổ sung

    Đăng ký nhận tin từ Helius

    Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài

    Hình ảnh phóng to