Nguồn: Cloudflare Engineering
Tóm tắt
Cloudflare Workers hỗ trợ Rust thông qua việc biên dịch sang WebAssembly (Wasm), nhưng Wasm có một số “sharp edges” khi xử lý lỗi. Khi một Rust Worker gặp panic hoặc abort không được xử lý, runtime có thể rơi vào trạng thái không xác định, gây ảnh hưởng đến các request tiếp theo — thậm chí “brick” Worker trong một khoảng thời gian.
Nguyên nhân gốc rễ nằm ở wasm-bindgen, thư viện tạo bindings giữa Rust và JavaScript. Trước đây, wasm-bindgen không có cơ chế recovery khi xảy ra abort, khiến sandbox bị “đầu độc” (poisoned). Một request thất bại có thể kéo theo nhiều request khác trong cùng instance.
Bài viết mô tả cách Cloudflare đã đóng góp upstream vào wasm-bindgen để thêm recovery semantics toàn diện cho Wasm errors. Giải pháp bao gồm việc phát hiện và phục hồi từ trạng thái abort, ngăn chặn việc một lỗi đơn lẻ làm nhiễm độc toàn bộ Worker instance.
Với bản cập nhật mới nhất của Rust Workers, abort-induced sandbox poisoning đã được giải quyết hoàn toàn. Kỹ thuật này có ý nghĩa rộng hơn cho toàn bộ hệ sinh thái Wasm khi các ngôn ngữ như Rust, C, C++ được triển khai trong môi trường serverless và edge computing.