[AWS Lambda] Lambda vs Azure Function 내부 구조 비교 본문

AWS/Lambda

[AWS Lambda] Lambda vs Azure Function 내부 구조 비교

최재강 2021. 9. 30. 13:50

서버리스 아키텍쳐를 AWS 에서는 Lambda, MicroSoft에서는 Azure Function으로 제공하고 있다. 두 제공 업체에서 모두 병렬적인 워크로드를 서버리스 환경에서 돌려보았다.
AWS Lambda에서는 높은 처리량을 보였던 반면 Azure Function에서는 병렬적인 처리도 순차적으로 진행하는 경향을 보였다.
따라서 내부 구조에 대해 이해해 보려고 정리해보았다. Benchmarking Parallelism in FaaS Platforms 이라는 논문을 참고하여 구조에 대해 이해했다.

3.2. AWS Lambda architecture

Control Plane은 사용자가 AWS Lambda 와Invoke Service 등을 구성하는 부분이다. Data Plane은 내부적으로 실행 환경을 구성하는 부분이다. 이벤트 트리거 호출을 대기 시키거나 Lambda Worker에 전달하는 등의 작업이 일어난다.

AWS EC2에 독립적인 microVM을 생성하고 새 호출에 대하여 사용자가 지정한 메모리 크기만큼(128MB ~ 3008MB) 리소스를 할당한다. 현재 사용가능한 microVM이 없다면 새로 생성한다(cold start), 사용가능한 miroVM이 있다면 재사용하여 사용할 수 있다(warm start). 메모리를 할당할 때 CPU와 같은 리소스들을 또한 메모리의 양과 비례하여 확장한다고 한다. 최대 병렬 처리는 사용자당 1000건 까지 동시 실행이 가능하도록 제한하고 있다고 한다.

microVM에서는 호출이 오는만큼(기본 최대 1000) 처리를 해버리기 때문에 병렬적인 실험에서 크게 문제가 없었던 것 같다.

3.3 Azure Functions architecture

Scale Controller라는 것이 존재한다고 한다. Function의 인스턴스 수를 관리하는 역할을 맡는다. 인스턴스를 늘리기도 제거하기도 하는데 그 시기를 결정하기 위해 이벤트 속도와 인스턴스 사용량을 계속 모니터링 한다. 처리되지 않은 호출이 쌓이면 컨트롤러가 새로 인스턴스를 생성한다고 한다.

Azure Function에서 Http Trigger의 경우, 초당 하나의 인스턴스만 생성될 수 있다고 한다.

즉 처음부터 할당을 과하게 해놓는 것이 아닌, 이벤트 호출을 쌓아두고 이벤트의 양이 쌓이거나 인스턴스 하나의 사용량이 임계점을 넘으면 새로 인스턴스를 켜서 활용하는 방식인 듯 하다.

정리하자면, AWS Lambda의 경우 호출에 따라서 microVM을 새로 생성하여 각 호출 마다 VM이 할당되어 병렬적으로 처리를 하게 되는 것이고 Azure Function의 경우 병렬적인 처리도 우선 Quene의 형태로 쌓아두고 처리량이 부족하면 하나씩 늘리는 방식이다. 따라서 Azure Function에서는 병렬적인 처리도 순차적으로 처리되는 경향이 보였던 것이다.

 

참조

Comments