workerd - Cloudflare가 공개한 Workers 런타임 오픈소스
(blog.cloudflare.com)- 실제 CloudFlare Workers에서 사용하는 JavaScript/WASM 런타임 코드
- 다른 환경에 포팅 가능하도록 일부만 변경
- 이름은 Unix 서버의 -d "daemon" 에서 가져와서 "worker dee"
용도
- Workers를 셀프호스팅 가능. 단순히 API로 이용가능한 웹서버이기도 함. 어떤 환경에서도 쉽게 적용
- 로컬 개발 및 테스팅용으로 사용
- 프로그래밍 가능한 프록시(포워드 & 리버스). JavaScript로 요청/응답을 가로채서 처리 가능
What it is
- Server-first : 많은 JS/WASM 런타임이 다용도로 사용가능하지만, workerd는 오직 서버에만 집중. 그중에서도 HTTP 서버
- Web standard APIs : 웹브라우저에서 사용하는 것과 같은 표준 API를 제공(Fetch, URL, WebCrypto 등). 즉 여기서 개발한 코드는 브라우저로 포팅도 가능
- Nanoservices : 이제 마이크로서비스를 넘어 나노서비스!
- 나노서비스는 독립적인 배포의 장점과 라이브러리 함수 호출 정도의 오버헤드만 가지는 새로운 모델
- workerd를 이용하면 많은 Worker들이 같은 프로세스 안에서 설정 가능하고, 각 Worker는 독립되어 실행되지만 서로간에 통신도 가능
- Homogeneous deployment : 예전엔 특정 컨테이너에서 특정 서비스를 실행해야 했지만, workerd는 모든 머신들이 모든 서비스를 구동 가능
- Capability bindings: 깔끔한 설정과 SSRF 안전성 보장
- Always backwards compatible : 항상 하위 호환성 보장
What it's not
- workerd is not a Secure Sandbox : 악성 코드가 실행될수도 있음. 이걸 방지하기 위해서는 별도의 샌드박싱 레이어가 필요
- workerd is not an independent project : Cloudflare Workers의 핵심이자 일부. 외부 커밋을 받긴 하지만 보장하기는 어려움.
- workerd is not an off-the-shelf edge compute platform : Workers 서비스 전체는 아님
Homogeneous deployment : 예전엔 특정 컨테이너에서 특정 서비스를 실행해야 했지만, workerd는 모든 머신들이 모든 서비스를 구동 가능
이게 무슨 의미인가 했더니 바로 앞에서 설명하는 나노서비스(functions) 방식으로 개발을 하게 되면 그냥 모든 나노서비스를 한 머신에 배포하고(오버헤드가 적어서 가능하다고) 필요하면 그냥 똑같은 머신을 늘리면 되니까 복잡한 배포 구성이 필요 없다는 말이었네요.