1 of 22

Pushing Serverless to the Edge with WebAssembly Runtimes

Philipp Gackstatter, Pantelis A. Frangoudis, and Schahram Dustdar

Distributed Systems Group, TU Wien, Vienna, Austria

IEEE/ACM International Symposium on Cluster Computing and the Grid (CCGRID), 2022

2 of 22

Motivation

2

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • 서버리스는 개발자가 클라우드 인프라를 설정, 관리를 하지 않고도 함수를 실행할 수 있는 서비스
  • 서버리스 제공자는 함수를 프로비저닝하며, scale-to-zero 원칙을 따르고 사용되지 않는 리소스를 해제
  • 함수 인스턴스를 격리하기 위해 일반적으로 Docker 형식의 컨테이너를 통한 OS 수준 가상화를 사용
  • 함수가 처음으로 호출되면 해당 컨테이너가 프로비저닝되는데 이 시간을 콜드 스타트라고 하며 수백 밀리초 이상의 시간이 소요될 수 있음 (AWS 및 Google Cloud Platform에서는 각각 250-265ms 및 110-493ms)

3 of 22

Motivation

3

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • 콜드 스타트 문제는 요청 사이에 컨테이너를 웜 상태를 유지함으로써 일부 해결됨
  • 인기 있는 오픈 소스 서버리스 프레임워크인 Apache OpenWhisk는 함수의 컨테이너를 10분 동안 일시 중지하고 재사용을 위해 준비된 상태로 유지한 다음 완전히 제거
  • AWS Lambda는 인스턴스를 5-7분 동안 유지
  • 사용하지 않는 컨테이너를 유지하는 것은 불필요한 리소스를 사용하고 따라서 scale-to-zero 전제에 반합니다.

4 of 22

Motivation

4

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • 본 논문에서는 콜드 스타트 문제를 컨테이너 런타임을 WebAssembly로 교체하는 방식을 취함
  • Wasm은 메모리 안전하고 샌드박스 실행을 위한 이식 가능한 이진 명령 형식으로, 컴파일된 Wasm 함수는 런타임이 존재하는 어디서든 실행가능
  • Wasm은 다양한 전략으로 컴파일될 수 있으며, 일부는 Docker 컨테이너 내에서 함수 호출과 근접한 네이티브 실행 속도를 보임
  • Wasm 함수는 마이크로초 단위로 생성 및 삭제 가능

5 of 22

Apache OpenWhisk

5

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • OpenWhisk(오픈위스크)는 서버리스 컴퓨팅 플랫폼으로, 애플리케이션을 개발하고 실행하기 위한 오픈 소스 플랫폼

  • 다양한 프로그래밍 언어를 지원하며, 사용자는 자신의 함수를 정의하고 이벤트와 연결하여 서버리스 애플리케이션을 만들 수 있음

  • 컨테이너를 사용하여 함수를 실행하므로 확장성이 뛰어나며, 필요에 따라 자동으로 확장되거나 축소됨

6 of 22

Wasm runtime

6

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • Wasmtime: JIT 컴파일된 코드를 위한 런타임으로, x86 64 및 aarch64 ISA에 사용 가능

  • Wasmer: 세 가지 다른 컴파일러 singlepass, cranelift 및 LLVM을 제공, x86 64 및 aarch64 ISA에 사용 가능

  • WebAssembly Micro Runtime (wamr): 모든 컴파일 전략을 지원, AoT 런타임은 거의 네이티브 속도를 제공

7 of 22

OpenWhisk

7

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

1. 사용자가 api gateway를 통해 함수 실행 요청

2. Controller는 사용자 인증을 하고 invoker에 함수 실행을 요청. 로드 밸런서의 역할도 함.

3. Invoker는 DB에서 함수 관련 소스 코드를 가져와 필요한 언어 런타임과 함께 Docker 컨테이너에 주입 후 실행.

4. 실행한 결과를 다시 db에 저장

container

db

controller

(load balancer)

Container runtime

8 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

8

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

Executor(실행기):

Executor는 WASM 함수 생성, 초기화, 실행 및 종료 담당. 일반적인 서버리스의 컨테이너 런타임과 동등한 역할

9 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

9

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

Invoker(호출기):

API 게이트웨이에서 요청을 받은 Invoker는 함수를 실행 준비하고 Executor와 상호 작용하여 실행을 하고 그 결과를 사용자에게 전달함

10 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

10

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

Wasm 모듈:

서버리스 함수의 실제 Wasm 코드.

일반적인 서버리스의 컨테이너 이미지와 동등한 역할

11 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

11

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

Function Store:

Wasm 코드가 저장됨

Wasm module을 미리 생성하여 직렬화된 상태로 저장.

모듈을 생성할 때는 메모리에 역직렬화만 하면 바로 생성가능 -> 콜드 스타트 시간 적음

12 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

12

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

init: 주어진 ID로 식별된 컨테이너를 초기화하고 코드를 스레드 안전한 HashMap에 저장

WASI 컨텍스트는 파일 시스템 액세스, 네트워킹, 환경 변수 및 기타 시스템 레벨 작업과 관련된 함수와 구조체 등을 포함

모듈은 파일에 액세스하려면 사전에 열려진 파일 서술자가 필요함. 따라서 래퍼는 파일을 열고 모듈에 전달해야 합

13 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

13

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

Run: 컨테이너 ID 및 주어진 매개변수를 입력으로 사용하여 모듈을 실행.

OpenWhisk에서 요구하는대로 매개변수는 JavaScript Object Notation (JSON) 형식의 객체

run은 컨테이너 ID로 이전에 저장된 모듈 또는 해당 바이트를 찾아 생성하고 매개변수를 전달하고 모듈을 호출

14 of 22

WOW: A WEBASSEMBLY CONTAINER RUNTIME FOR OPENWHISK

14

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

destroy: Wasm 컨테이너를 제거하며, 이는 모듈이 차지한 메모리를 해제하는 것을 의미

15 of 22

evaluation

15

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

CPU bound 함수: 이 워크로드에서는 blake3 해시 알고리즘을 사용하여 바이트 문자열을 반복적으로 해시. 해싱은 CPU 바운드이며 시스템 호출이 없으므로 이 워크로드 유형에 적합.

I/O bound 함수: 이 워크로드에서는 HTTP 요청과 같은 블록킹 작업의 영향을 측정. 그러나 WASI에서의 네트워크 기능은 개발 중으로 지원이 안됨. 대신 300ms 슬립 이용.

Mixed workload: 두개의 워크로드를 동일한 비율로 혼합

16 of 22

evaluation

16

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

RPi Model 3B: RPi는 1GB의 RAM을 갖추고 64비트 Raspberry Pi OS 실행

x86 64 서버: 8GB의 RAM, Intel Xeon E3-1231 v3 CPU(3.40GHz, 물리적 코어 4개 및 논리적 스레드 8개), Samsung SSD 850 EVO, Ubuntu 20.04.2 LTS OS 실행

17 of 22

evaluation

17

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • 대기 시간은 waitTime과 initTime, 함수 실행 및 요청을 받고 결과를 반환하는 오버헤드로 구성
  • waitTime: OpenWhisk 내부 오버헤드 및 컨테이너 프로비저닝 시간 (후자는 Docker에만 해당)
  • initTime: 함수 초기화하는 시간 (Executor의 init 호출 기간)
  • cold start 대기 시간은 waitTime + initTime으로 정의. cold start 시간은 OpenWhisk가 요청을 받아 컨테이너가 실행 준비 상태가 될 때까지의 시간

  • 초당 함수 처리량 측정

  • 메모리 사용량 측정

18 of 22

evaluation

18

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

cpu bound 워크로드 cold start 측정

19 of 22

evaluation

19

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • 다양한 런타임에 대한 OpenWhisk의 함수 실행 처리량을 평가
  • 컨테이너를 사전에 워밍 업하고 결과에서 cold start를 제외
  • 동일한 양의 I/O-바운드 및 CPU-바운드 작업으로 구성되어 있는 혼합 워크로드로 측정
  • 각 Wasm 런타임이 Docker 대비 얻은 이득
  • Docker는 RPi에서 약 6.5 요청/초 및 서버급 호스트에서 약 20 요청/초를 처리

함수 처리량 비교

20 of 22

evaluation

20

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

  • 콜드 스타트 테스트를 다시 진행하고 각 컨테이너가 실행을 완료한 후에 OpenWhisk가 제거하기 전에 각 컨테이너의 메모리 양을 측정

  • Wasm은 더 많은 컨테이너를 웜 상태로 유지 가능

메모리 사용량 비교

21 of 22

conclusion

21

2024-01-04 DDPS Seminar, Speaker Seokhyeon Kang

Distributed Data Processing System Lab, KOOKMIN UNIVERSITY

본 논문에서는 웹어셈블리 런타임을 기반으로 한 서버리스 디자인을 통해 콜드 스타트 대기 시간, 함수 처리 처리량 및 메모리 소비에 대해 여러 방면으로 개선을 이루어, 저렴하고 자원이 제한된 엣지 컴퓨팅 인프라에서의 서버리스 워크로드 처리를 현격히 향상시킴.

22 of 22

22

Thank you