26P by xguru 29일전 | favorite | 댓글 4개
  • Non-Rust 서버(JavaScript, Python, Java 등)에서 점진적으로 Rust를 추가하는 전략 소개
  • CPU 병목으로 인해 성능 요구 사항을 충족하지 못하는 핫 함수를 식별하고, Rust로 대체 구현하는 것이 목표
  • 전략은 Tier(Rust 채택 수준)로 구분되며, Tier 0은 Rust 미사용, 마지막 Tier는 전체 서버를 Rust로 재작성

전략

Tier 0: Rust 미사용

  • Node.js 서버에서 QR 코드 생성 엔드포인트 구현
  • 기준 성능: 초당 1464 요청, 평균 지연 68ms, p99 지연 96ms, 평균 응답 크기 1506바이트, 메모리 1353MB

Tier 1: Rust CLI 도구

  • QR 코드 생성 함수를 Rust로 재작성하고 CLI 도구로 컴파일
  • 호스트 서버에서 CLI 도구 호출
  • 기준 대비 성능: 초당 요청 1.76배 증가, 평균 지연 0.57배 감소, 평균 응답 크기 0.52배 감소, 메모리 0.92배 감소

Tier 2: Rust Wasm 모듈

  • Rust 함수를 Wasm 모듈로 컴파일하고 호스트 서버에서 Wasm 런타임을 사용해 로드 및 실행
  • Node.js 서버에는 wasm-bindgen 사용
  • 기준 대비 성능: 초당 요청 2.03배 증가, 평균 지연 0.50배 감소
  • 수동으로 Wasm 바인딩 작성하는 방법 설명 (다른 언어 사용자를 위해)

Tier 3: Rust 네이티브 함수

  • Rust로 함수 작성, 네이티브 코드로 컴파일, 호스트 런타임에서 로드 및 실행
  • Node.js에는 napi-rs 사용
  • 기준 대비 성능: 초당 요청 3.75배 증가, 평균 지연 0.26배 감소

Tier 4: Rust 재작성

  • 호스트 서버 전체를 Rust로 재작성
  • 실제로는 호스트 서버 일부만 재작성하는 것이 현실적
  • 기준 대비 성능: 초당 요청 4.93배 증가, 평균 지연 0.21배 감소, 메모리 0.01배 감소 (13MB 사용)

결론

  • 모든 전략이 좋지만, Tier 3이 가장 효과적
  • 오프더셸프 바인딩 생성기 라이브러리를 사용할 수 있다면 Rust로 네이티브 함수 작성이 쉬우며 성능에 큰 영향

전에는 C/C++로 해결했던 영역에서 확실히 Rust가 인기있나보네요.

오........ 여러 일들을 잡부처럼 하다가 둘 다 조금씩 쓰게 되었는데 굉장히 좋은 정보네요.

최근 rust보고 있는데. 흥미로운 글이네요.

상당히 좋은 글이네요. 이런게 Rust를 제대로 사용한 예죠.