AWS Lambda 런타임별 Cold/Warm 시작 시간 비교 2021/09
(filia-aleks.medium.com)- API-Gateway → AWS Lambda → DynamoDB 플로우로 POST 메소드를 테스트
- 메모리 128/256/512/1024/10240MB 각각 테스트
- Cold Start
ㅤ→ 전체적으로 Rust가 가장 빠름. 128Mb에서만 Python이 1등
ㅤ→ Java 와 .NET을 제외하고는 대부분 빠름
ㅤ→ Java는 128Mb로는 시작도 불가능이지만, GraalVM은 가능
- Warm Start
ㅤ→ Golang 과 Rust 가 승리자
ㅤ→ .Net도 Go/Rust와 거의 비슷한 성능을 보여주지만, 1k 반복실행 후에만 가능(JIT 이후)
ㅤ→ GraalVM도 .Net과 비슷한 안정적인 성능을 보여주고, Rust/Go 보다는 약간 느림. 최소 셋업에서는 잘 동작하지 않음
ㅤ→ Java가 GraalVM 바로 뒤. Java 역시 .Net처럼 1~3k 반복후에만 성능이 나옴
ㅤ→ Python이 안정적인 좋은 성능을 보이지만, 128MB에서는 너무 느림
ㅤ→ Ruby 는 Python과 비슷한 성능을 보이지만, 20분 정도(15k 반복)후에는 약간의 지속시간(duration)이 증가함
ㅤ→ Node.js 가 가장 느린 런타임. 지속시간도 가장 김
- Cold + Warm 으로 보면 Golang 과 Rust가 승리자. 항상 빠르고 안정적인 결과를 보여줌
- 비교 런타임 : NodeJs(14.x), Python(3.9), Go(1.x), Ruby(2.7), .Net(3.1), Java (11), Rust(1.54.0), GraalVM(21.2)
대충 보기는 했지만,
Rust, Golang ~~ Python, Ruby 구도는 일반적인 기대와 크게 다르지 않은 것 같기는 하고...
Java가 VM 뜨는 비용이 없고 JIT 적용되어도 느린 것은 조금 의외이긴 하네요.
Node.js도 JIT 후에는 빠르다고 생각했는데 느린 결과가 나왔네요.
Lambda가 동작하는 아키텍쳐나 가상화 스택 이런 게 달라서 그런걸까나요..
성능 테스트에는 영향 줄 수 있는 요소가 너무 많기는 해서 너무 심각하게 결과를 받아들이지는 않아도 될 것 같기도 하구요... ㅎㅎㅎ