Cloudflare, Emscripten 지원으로 Workers에서 네이티브 Rust와 Tokio 실행 가능
핵심 내용
Cloudflare가 Emscripten 지원으로 Workers에서 네이티브 Rust와 Tokio 실행을 가능하게 했다.
자세히 보기
Cloudflare가 wasm-bindgen 도구 체인 내에서 Emscripten wasm32-unknown-emscripten Rust 컴파일러 타겟을 지원하는 실험적 프리뷰를 공개했다. 이 통합으로 Tokio 비동기 런타임을 사용하는 네이티브 Rust 코드를 Cloudflare Workers 및 기타 WebAssembly 환경에서 직접 실행할 수 있게 됐다.
도구 체인 상호 운용성
이 기능은 JavaScript 바인딩과 모듈 로딩을 관리하던 Emscripten과 wasm-bindgen 간의 기존 충돌을 해결한다. Google의 Portable Toolchains 팀과 협력한 새로운 워크플로우는 Emscripten이 빌드를 주도하고 wasm-bindgen이 이식 가능한 JavaScript 바인딩을 생성하도록 하며, -sWASM_BINDGEN 구성으로 활성화된다.
Tokio 런타임 통합
단일 스레드 JavaScript 이벤트 루프에서 Tokio의 비동기 모델을 지원하기 위해 Cloudflare는 두 가지 접근 방식을 구현했다.
- JSPI (JavaScript Promise Integration): Tokio의 parking 시맨틱을 JSPI 스택 서스펜션에 매핑하며, 런타임 패닉을 방지하기 위해 신중한 스레드 로컬 컨텍스트 스왑이 필요하다.
- LocalEventLoop: Tokio의 루프를 명시적인
drive()연산과 호스트 소유의Waker로 분리하는 제안된 설계로, 호스트 이벤트 루프가 차단 없이 자체 작업과 Tokio 작업을 교대로 처리할 수 있게 한다.
네트워킹 및 소켓
epoll에 의존하는 Tokio의 I/O 드라이버를 지원하기 위해 Cloudflare는 Emscripten에 40개 이상의 풀 리퀘스트를 기여하여 -sNODERAWSOCKETS 계층을 생성했다. 이 계층은 Emscripten의 가상화 계층을 node:net API에 연결하여 Workers에서 TCP, UDP, Unix 소켓을 사용할 수 있게 한다.
데모: Workers에서의 Minecraft
스택 검증을 위해 엔지니어들은 Rust 기반 Minecraft 서버인 Pumpkin을 Durable Object 내에서 실행되도록 포팅했다. 이 포팅은 Pumpkin의 멀티스레드 아키텍처를 협력형 Tokio 작업으로 변환하고, 커스텀 파일 시스템 백엔드를 사용해 월드 데이터를 Durable Object의 SQLite 데이터베이스에 저장했다. 해당 서버는 Workers TCP 인그레스를 통해 멀티플레이어 연결을 성공적으로 처리한다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.