서버리스 아키텍처

황승우·2023년 3월 19일
0
post-thumbnail

1. Serverless란?

  • 서버리스는 말 그대로 ‘서버(Server)가 없다(-less)’는 뜻
  • 하지만 실제로 서버가 없는 구조는 아니고, 서버에서 처리하는 작업을 클라우드 기반의 서비스로 처리해서 서버 구축 및 관리 비용을 줄이는 구조
  • 따라서 개발 기간과 비용을 단축할 수 있을 뿐 아니라, 서버 운영과 유지 보수의 어려움을 크게 줄일 수 있습니다.

서버리스의 두 가지 중요 포인트

  • 서비스형 서버리스(Serviceful Serverless)
  • FaaS(Functions as a Service)

1-1. Serviceful Serverless

  • 서비스형 서버리스는 직접 서버를 구축하고 프로비저닝하고 관리할 필요 없이, 서버의 역할을 서비스 형태로 사용하는 것을 의미.
  • 예를 들어 인증의 경우, 매번 새로 구축해야 하지만 Auth0 이나 Amazon Cognito 와 같은 인증 서비스를 사용하면 대부분의 구현을 대체 가능.
  • 특히 Amazon Web Service 나 Google Cloud Platform 같은 Public Cloud 는 많은 종류의 서비스를 제공
    • 컴퓨팅 리소스, 스토리지, 네트워크, 머신 러닝과 모바일 백엔드, 머신 러닝, 블록체인, IoT, 그리고 인공위성 제어, 데이터베이스와 파일 스토리지, 메시징 서비스 등
    • 이러한 기능을 복잡한 인프라 구성 없이 간편하게 사용할 수 있음.

1-2. FaaS

  • FaaS(Function-as-a-Service)는 함수를 서비스로 제공하는 형태
  • 사용자가 원하는 로직을 함수로 작성만 해놓으면 (특정 조건 하에) 함수가 실행.
  • 좀 더 구체적으로는 함수가 호출되면 VM(또는 컨테이너)가 실행되고 해당 런타임 내에서 정의해놓은 함수가 실행
  • 실행 후 VM(또는 컨테이너)는 종료됩니다.
  • 이러한 함수는 서버가 계속 대기하면서 사용자의 요청을 처리하는 것이 아니라, 이벤트가 있을 때마다 실행되는 작은 코드
  • 따라서 주요 서비스 사이에서 간단한 작업을 처리하는 용도로 사용

vs. XaaS

  • Xaas는 서비스로서 무엇이든 제공하는 일반적인 집합 용어.


)

  • Legacy: 기존 시스템은 인프라부터 소프트웨어까지 전부 구축하고 개발 필요
  • Infrastructure-as-a-Service:필요한 하드웨어와 가상화, OS 등 인프라 요소를 서비스 형태로 제공. 원하는 사양의 서버를 VM 으로 생성 가능.
  • Container-as-a-Service: 서비스 형태로 제공되는 컨테이너를 활용해 애플리케이션을 배포
  • Platform-as-a-Service: 애플리케이션 개발에 집중할 수 있도록 인프라와 런타임 환경을 제공
  • Function-as-a-Service: 실행할 함수 코드에만 집중
  • Software-as-a-Service: 제공되는 소프트웨어를 사용하는 형태.

Paas vs Faas

  • 서버 유무: PaaS 는 그 플랫폼 위에 내 서버를 띄워야 하는 반면, FaaS 는 사용자가 관리할 서버가 없음.
  • 확장: PaaS 는 확장이 서버 단위로, FaaS 는 함수 단위
  • 비용: PaaS 는 실행되는 서버 리소스의 스펙과 사용 시간에 따라 과금이 되고, FaaS 는 해당 함수의 호출 횟수와 수행 시간에 따라 과금

Function 구성 요소

세 가지의 구성 요소로 이루어져 있음.

  1. Handler 함수: 호출 시 실행되는 함수
  2. Event 객체: 함수가 호출된 이벤트 정보를 담고 있는 객체
  3. Context 객체: 해당 함수의 컨텍스트 정보(실행 관련 정보)를 담고 있는 객체

Function 내부 구조

FaaS 는 개념적으로 보면 다음과 같이 구성되어 있습니다.

  • Event Source: 함수가 실행될 조건이자 이벤트 소스 (HTTP 요청, 메시징, Cron 등)
  • Function: 작업할 내용
  • Service: 작업 결과를 처리(DB 저장, 다른 서비스로 전달, 메시징, 출력 등)

위 그림은 함수를 좀 더 자세히 들여다본 그림입니다.

  • Compute substrate: 함수가 실행될 VM(또는 컨테이너)
  • Execution Environment: 그 위에 환경 변수 등 실행 환경이 포함
  • Language runtime: 그 위에 언어별 런타임이 올라갑니다. 언어에 따라 성능 차이가 있음
  • Your function

FaaS 성능 최적화

  • FaaS 는 항상 띄워놓은 서버에 비해서 확실히 자원을 적게 소모하고 비용을 감소
  • 하지만 서버에서 요청이 있을 때마다 VM 이나 컨테이너를 띄운다 → 성능 이슈 → FaaS 성능 향상 필요

Cold Start Delay

  • 위 그림은 AWS Lambda 함수의 라이프사이클
  • 처음에 해당 함수 코드를 찾아 다운로드하고 새로운 실행 환경을 구성
  • 이 과정을 차갑게 식은 서버를 실행하는 것에 비유해 콜드 스타트(Cold Start)라고 불림.
  • 함수를 처음 호출할 때나 업데이트 된 후 실행할 경우 어쩔 수 없이 발생하는 지연(delay)
  • 함수가 실행되고 나면 이후에 또 다른 호출을 대비해서 실행 컨텍스트를 잠깐 동안 유지
  • 따라서 해당 서버가 아직 내려가지 않은 따뜻한(warm) 상태라면 준비 과정을 거치지 않고 빠르게 함수가 수행
  • 이를 이용해 주기적으로 함수를 호출하도록 스케줄링하면, 서버가 내려가지 않도록 warm 상태를 유지

Function

함수 영역을 최적화할 수 있는 방법

  • 함수는 처음 콜드 스타트할 때만 처음부터 끝까지 실행하고, 재사용할 때는 진입점인 핸들러 함수만 실행 → 따라서 필요치 않은 초기화 로직은 핸들러 밖으로 빼서 중복 실행되는 것을 방지.
  • 라이브러리와 프레임워크는 꼭 필요한 것만 사용하고, 무거운 것보다는 가벼운 것을 사용 (e.g. Spring -> Dagger, Guice).
  • 코드를 간결하게 유지
  • 모든 로직을 하나의 함수에 담는 것보다 여러 작은 함수로 쪼개는 것이 좋음. (리소스 데드락 때문).

코드 작성 팁

  • 핵심 로직에서 핸들러(진입점) 함수를 분리하면 단위 테스트를 더 많이 생성 가능
  • 람다 환경 변수를 활용해 하드 코딩을 제거
  • 재귀 함수 호출은 사용하지 않는 것이 추천

2. AWS Lambda

  • FaaS 의 대표주자

  • AWS Lambda 외에 주목할 만한 서비스
    • Knative: 쿠버네티스(Kubernetes) 기반의 서버리스 플랫폼
    • Nuclio: 직접 FaaS 를 제공할 수 있는 오픈 소스 서버리스 프레임워크

3. Serverless Application

  • 클라이언트에서 사용자 인터랙션 로직을 대부분 처리
  • 자주 사용하는 서버 기능은 서버리스형 서비스로 처리
  • 각종 연계를 위해 사용하는 작은 함수(FaaS)

Web Application

  • 사용자에게 보여줄 웹 페이지 및 정적 콘텐츠는 S3 에 저장 후 호스팅
  • 사용자 요청은 API Gateway 로 받기
  • 처리할 내용은 Lambda 에 작성
  • 데이터 저장은 DB 서비스(DynamoDB) 사용
  • 사용자 인증은 Amazon Cognito 사용
  • Route 53으로 도메인 구입 및 제공

Mobile Backend

모바일 백엔드 아키텍처는 웹 애플리케이션과 비슷하지만 몇 가지 추가된 서비스가 존재.

  • DynamoDB 에 저장하는 데이터는 람다를 이용해 검색엔진 서비스인 CloudSearch 에 저장
  • SNS(Simple Notification Service)를 이용해 사용자에게 푸시 전송.

Real-time Stream Processing

  • Kinesis 로 실시간 스트리밍 데이터를 수집
  • 람다에서 들어오는 데이터를 처리하고 저장
  • 이벤트 자체를 장기간 보존하기 위해 S3 에 저장
  • 수집한 데이터는 CloudWatch 를 이용해 모니터링 가능.

4. 내 트리를 꾸며줘

  • Azure Functions로 만든 서버리스 앱 서비스
  • 1600만의 트래픽을 지탱했던 아키텍처
  • Azure App Service는 무엇인가?
    • FaaS 서비스
  • Azure Functions vs AWS Lambda

참고문헌

https://futurecreator.github.io/2019/03/14/serverless-architecture/

https://aws.amazon.com/ko/lambda/serverless-architectures-learn-more/

https://blog.symphonia.io/posts/2018-05-22_revisiting-serverless-architectures

https://dabit3.medium.com/full-stack-development-in-the-era-of-serverless-computing-c1e49bba8580

https://www.youtube.com/watch?v=c6LlMe6xBjQ

https://www.inflearn.com/pages/weekly-inflearn-45-20220330

https://www.g2.com/compare/aws-lambda-vs-azure-app-service

https://iamondemand.com/blog/aws-lambda-vs-azure-functions-ten-major-differences/

profile
백엔드 개발자

0개의 댓글