13P by xguru 6달전 | favorite | 댓글과 토론
  • Meta가 내부적으로 사용하는 FaaS 플랫폼
  • 수십 개의 데이터센터 리전들에 분산된 10만 대 이상의 서버에서 매일 수조 건의 함수 호출을 처리
  • AWS Lambda, Azure Functions 보다 효율적이라고 주장하며 "XFaaS: Hyperscale and Low Cost Serverless Functions" 논문을 통해서 공개

흥미로운 통계 및 시사점

  • 논문의 핵심은 소프트웨어로 하드웨어 사용을 최적화하여 서버리스 성능을 개선할 수 있다는 것
  • 메타는 Serverless Functions의 스타트업 오버헤드 낭비를 인식하고, 모든 워커가 시작 오버헤드 없이 모든 기능을 즉시 실행할 수 있는 Universal Worker를 에뮬레이트하는 것을 목표로 함
    • 이정도 대규모에서 하드웨어 비용은 막대하며 아주 작은 비율이라도 중요함
  • XFaaS는 사용자를 대면하지 않는 기능에만 사용됨. 서버리스 함수는 사용자 대면 기능에 일관되게 사용하기에는 가변 지연 시간이 너무 많음
  • XFaaS의 클라이언트는 매우 급격한 방식으로 함수 호출을 실행. 피크 수요는 오프 피크 수요보다 4.3배 더 높음
    • 한 예로 15분 이내에 2,000만 건의 함수 호출이 XFaaS에 제출되기도 함
    • Meta는 급증하는 함수에도 패턴이 있다는 것을 발견하고, 이를 활용하여 워크로드에서 급증하는 함수를 더 예측 가능하게 만들었음

XFaaS 는 얼마나 효율적인가?

  • 업계 평균보다 훨씬 높은 66%의 일일 평균 CPU 사용률을 달성
  • 시간(함수 지연을 통해)과 공간(부하가 적은 데이터센터로 전송하여)을 사용하여 부하를 효율적으로 분산

    메타는 많은 기능을 - 부하와 비용을 예측할 수 있는 - 사용량이 많지 않은 시간대에 예약하도록 계속 전환중

  • 내부 클라우드이기 때문에 Meta는 동일한 프로세스에서 여러 사용자의 여러 기능을 실행하는 등 여러 가지 고유한 최적화를 수행할 수 있음
  • 대부분의 함수는 1초 이내에 실행되지만 모든 함수가 그렇지는 않음

XFaaS로 해결한 문제들

  • 문제: 긴 콜드 스타트 시간
    • 컨테이너가 너무 일찍 종료되면 다음 호출을 위해 전체 컨테이너를 다시 초기화해야 함
    • 컨테이너가 너무 늦게 종료되면 유휴 상태로 남아 귀중한 컴퓨팅 리소스를 낭비하게 됨
    • 해결책: XFaaS는 JIT 컴파일과 같은 방법을 사용하여 모든 워커가 모든 함수를 즉시 실행할 수 있도록 근사화(approximate)함
  • 문제: 심한 부하 분산
    • 오버-프로비저닝으로 인해 추가 하드웨어 비용이 발생하거나 오버프로비저닝 시 시스템 속도가 느려짐
    • 해결책: XFaaS는 delay-tolerant한 함수 실행을 사용량이 적은 시간까지 연기하고 전 세계 데이터센터 리전으로 함수 호출을 분산
  • 문제: 다운스트림 서비스에 과부하가 걸림
    • 예: 사용자를 대면하지 않는 함수의 호출이 급증하여 사용자를 대면하는 온라인 서비스가 중단된 적이 있음
    • 해결책: XFaaS는 TCP 혼잡 제어와 유사한 메커니즘을 사용하여 함수 실행을 조절

일반 FaaS 와의 비교 (AWS Lambda, Google Cloud Functions, Azure Functions)

  • 퍼블릭 클라우드 FaaS는 함수 실행을 단일 데이터센터 리전으로 제한하는 반면, XFaaS는 함수 호출을 전 세계로 분산할 수 있어 로드 밸런싱을 개선할 수 있음
  • FaaS 플랫폼은 하드웨어 사용률을 간과한 채 지연 시간을 줄이는 데 우선 초점을 맞춤. XFaaS는 하드웨어 사용률과 함수 호출의 처리량에 중점을 둠
  • 퍼블릭 클라우드에 도움이 될 수 있는 XFaaS 기술들
    • 호출자가 함수 실행 시작 시간을 지정할 수 있도록 허용
    • 함수 소유자가 완료 기한에 관한 서비스 수준 목표(SLO)를 설정할 수 있음 (SLO가 낮으면 더 나은 실행시간을 위해 지연 가능)
    • 함수 소유자가 함수에 중요도 수준을 지정할 수 있도록 허용
  • 퍼블릭 클라우드는 XFaaS처럼 여러 사용자의 기능을 동일한 프로세스에서 실행할 수 없지만, 대규모 클라우드 고객은 가상 프라이빗 클라우드에서 XFaaS 접근 방식을 채택할 수 있음
  • 소수의 메타 팀이 XFaaS 용량의 상당 부분을 소비. 퍼블릭 클라우드를 사용하는 유사한 대규모 고객도 XFaaS 전략의 이점을 누릴 수 있을 것

Background: 가정 및 요구 사항

  • 가정
    • 핵심 인사이트는 대부분의 XFaaS 기능이 자동화된 워크플로우에 의해 트리거되며, 지연이 있어도 괜찮다는 것
    • 이를 통해 XFaaS는 시간(기능을 지연시킴으로써)과 공간(부하가 적은 데이터센터로 전송함으로써)에 걸쳐 부하를 분산 가능
    • XFaaS는 PHP, Python, Erlang, Haskell의 런타임과 모든 언어에 대한 일반 컨테이너 기반 런타임을 지원
    • 함수에는 함수 이름, 인수, 런타임, 중요도, 실행 시작 시간, 실행 완료 기한, 리소스 할당량, 동시성 제한, 재시도 정책 등 개발자가 설정할 수 있는 여러 가지 속성이 있으며, 실행 완료 기한은 초에서 24시간까지 설정 가능
    • XFaaS는 지역마다 하드웨어 용량이 다르므로 로드 밸런싱은 이를 고려해야 함
  • 워크로드 유형
    • 메타는 세 가지 유형의 워크로드를 XFaaS에서 지원
      • 대기열 트리거 함수
      • 이벤트 트리거 함수(데이터 웨어하우스 및 데이터 스트림 시스템의 데이터 변경 이벤트)
      • 타이머 트리거 함수(미리 설정된 타이밍에 자동 실행)
    • XFaaS는 비사용자 대면 기능인 비동기 추천 시스템, 로깅, 생산성 봇, 알림 등에 사용됨

전체 아키텍처

(이 부분은 너무 길고 논문의 내용을 거의 그대로 옮긴 것이라 생략합니다.)