Cloudflare giới thiệu hỗ trợ Rust native trên Workers thông qua Emscripten
Cloudflare vừa công bố bản xem trước thử nghiệm cho phép chạy mã Rust native và các ứng dụng dựa trên Tokio trực tiếp trên Workers thông qua công cụ Emscripten.
Cloudflare vừa chính thức công bố bản xem trước thử nghiệm (experimental preview) nhằm hỗ trợ tốt hơn cho mã Rust native, bao gồm cả các ứng dụng dựa trên Tokio, chạy trực tiếp trên nền tảng Workers. Cụ thể, Cloudflare đã tích hợp hỗ trợ cho wasm32-unknown-emscripten vào chuỗi công cụ wasm-bindgen.
Table Of Content
Bước tiến mới cho Rust trên Workers
wasm-bindgen là công cụ nguồn mở cốt lõi giúp vận hành các ứng dụng WebAssembly dựa trên Rust trong môi trường V8 của Cloudflare Workers. Việc kích hoạt mục tiêu Emscripten là kết quả của quá trình hợp tác lâu dài giữa Google và đội ngũ kỹ sư tại Cloudflare. Mặc dù vẫn đang trong giai đoạn tiền phát hành, công nghệ này mở ra khả năng chạy các ứng dụng Rust native trên web, Node.js và nền tảng toàn cầu của Cloudflare.
Trong các thử nghiệm thực tế, đội ngũ kỹ sư đã thành công trong việc chạy một máy chủ Minecraft (Pumpkin) viết bằng Rust bên trong một Durable Object, sử dụng các TCP socket thực thông qua Tokio. Điều này chứng minh khả năng tương thích thư viện được cải thiện đáng kể.
Cơ chế hoạt động của Emscripten trên Workers
Emscripten là chuỗi công cụ biên dịch WebAssembly cho phép kết nối mã native với nền tảng web, ảo hóa các tính năng như bộ đếm thời gian (timers), thao tác hệ thống tệp và socket. Nhờ vào việc Cloudflare Workers hỗ trợ các Web Platform API và khả năng tương thích với Node.js, Emscripten có thể tận dụng các flag biên dịch Node.js để ảo hóa các tính năng native này.
Giải quyết thách thức với Tokio
Một trong những rào cản lớn nhất là sự khác biệt giữa mô hình đơn luồng của Workers (dựa trên JS event loop) và mô hình đa luồng của Tokio. Để giải quyết vấn đề này, Cloudflare đã thực hiện hai phương pháp:
- JSPI (JavaScript Promise Integration): Cho phép tạm dừng ngăn xếp WebAssembly khi thực hiện các thao tác chặn (blocking) và trả quyền điều khiển về cho JS event loop.
- LocalEventLoop: Thiết kế một runtime mới cho Tokio, nơi các thao tác chờ (wait) được thay thế bằng tín hiệu đánh thức (wake), giúp tích hợp mượt mà với event loop của host mà không gây chặn luồng.
Ngoài ra, Cloudflare đã đóng góp hơn 40 pull request cho Emscripten để bổ sung tùy chọn -sNODERAWSOCKETS, cho phép hỗ trợ epoll, TCP, UDP và Unix sockets cho các ứng dụng Emscripten trên môi trường Node.js và Workers.
Các nhà phát triển hiện có thể bắt đầu thử nghiệm với các ví dụ về xây dựng Emscripten Rust Workers và chạy Tokio async runtime trên Workers thông qua tài liệu hướng dẫn chính thức từ Cloudflare.
Nguồn tham khảo: Cloudflare Blog



No Comment! Be the first one.