피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Rust-WASM 기반 DES 엔진으로 브라우저 내 10만 RPS 시뮬레이션 구현
I compiled Rust to WebAssembly to build a system design simulator that runs entirely in your browser!
AI 요약
Context
정적 다이어그램 기반의 시스템 설계 검증 한계와 JavaScript의 Garbage Collection으로 인한 런타임 지연 문제 발생. 특히 초당 수십만 건의 상태 변경이 일어나는 Discrete-Event Simulation(DES) 환경에서 JS의 Stop-the-world 현상으로 인한 시간적 충실도(Time Fidelity) 저하가 핵심 병목 지점으로 분석됨.
Technical Solution
- Deterministic Memory Management를 제공하는 Rust를 채택하여 GC Pause 없는 예측 가능한 성능 확보
- BinaryHeap 기반의 Priority Queue를 활용하여 타임스탬프 순으로 이벤트를 처리하는 DES 엔진 설계
- wasm-pack을 통한 WebAssembly 컴파일로 브라우저 네이티브 수준의 실행 속도 구현
- opt-level = "s" 설정을 통한 WASM 바이너리 크기 최적화로 네트워크 전송 효율 및 런타임 명령어 수 감소
- Simulation State와 UI State를 엄격히 분리하는 Rust의 Ownership 모델을 적용한 데이터 무결성 확보
- JS/WASM 경계의 Serialization 비용 최소화를 위해 프레임당 호출 횟수를 제한하는 통신 구조 설계
실천 포인트
- JS의 GC 부하가 심한 고성능 연산 로직은 Rust-WASM 전환 검토 - WASM 도입 시 JS-WASM Boundary의 Serialization 오버헤드를 고려한 데이터 교환 주기 설계 - 바이너리 크기 최적화를 위해 Rust의 opt-level 설정을 통한 코드 사이즈 관리 - 복잡한 상태 전이 모델 설계 시 Discrete-Event Simulation 구조의 적용 가능성 확인