5. Servers서버의 물리적인 장애를
어플리케이션에서 어떻게 처리하지?
내 서버들에 대한 접근을
어떻게 통제할 수 있지?
서버의 수를 언제
늘려야 하지?
내 서버의 용량을
언제 늘려야 하지? 내 예산에 맞는
서버의 크기는?
내 서버들의 남아있는 용량은
얼마나 되지?
(AAHHHHHHHHH!!)
6. 서버리스 아키텍쳐
완전 관리형
• 프로비져닝 없음
• 관리요소 없음
• 높은 가용성
개발자 생산성
• 중요한 코드에 집중
• 빠르게 혁신
• 시장에 빠르게 접근
지속적인 스케일링
• 자동으로
• 스케일 업/다운
7. AWS의 수많은 서버리스 옵션
스토리지
데이터베이스
네트워크
컴퓨팅
콘텐츠 전송
메시징 및 대기열보안
게이트웨이
사용자 관리
모니터링 및 로깅
사물 인터넷
기계 학습
데이터 분석
8. 챗봇
• 챗봇 로직 구현
아마존 알렉사
• 음성 인식
애플리케이션
• 알렉사 스킬
키트
대게 자주 사용되는 곳
웹
애플리케이션
• 정적 웹사이트
• 동적 웹
애플리케이션
• Flask 와
Express
패키지
데이터 처리
• 실시간
• MapReduce
• 배치
백엔드
• 애플레케이션
및 서비스
• 모바일
• IoT
</></>
15. Lambda : 동작 원리
Bring your own code
• Node.js, Java, Python
• Java = Scala, Clojure 등의
어떠한 JVM기반 언어.
• Bring your own libraries
유연한 호출 경로
• Event 혹은
Request/Response 호출
옵션
• 여러 AWS 서비스들과
통합
단순한 자원 모델
• 128MB부터 1.5GB까지
64MB 단위로 메모리 설정
• 할당된 메모리에 비례하여
CPU 및 네트웍 자원 할당
• 실제 사용량 내역 보고
효과적인 권한 통제
• AWS IAM (Identity and
Access Management)
Role을 사용한 실행 권한
설정
• AWS 이벤트 소스에 대한
자원 정책
16. Lambda : 동작 원리
제작 기능
• AWS SDK 포함
• 인바운드 네트웍 처리
• 프로세스, 쓰레드, /tmp,
소켓 …
배포 옵션
• 콘솔의 WYSIWIG
편집기를 사용하여 직접
제작/배포
• 코드를 zip 파일로 묶어
Lambda 서비스 혹은
S3로 전송
Stateless 기능
• S3/Amazon
DynamoDB/Amazon
ElastiCache를 사용한 저장
• 인프라스트럭쳐와의
연관성 없음 (로그인 불가)
모니터링 및 로깅
• Amazon CloudWatch
메트릭 – 요청 수, 에러 수,
처리 시간, 처리량
• Amazon CloudWatch
Log를 사용하여 로깅
17. 배포 관리: 버저닝 - 개발
람다 함수에 하나 이상의 버전 퍼블리싱
람다 함수 배포는 여전히 손쉬움:
• 변경 시 코드 업로드
• 변경 적용
• 마지막 업데이트가 최신
exports.handler =
function(event,context)
{context.succeed(“bye”);}
exports.handler =
function(event,context)
{context.succeed(“hi”);}
18. 배포 관리: 버저닝 - 배포
효과적인 프로덕션 람다 함수 코드 관리
개발 중 필요 시 마다 신규 버전 배포:
• 개발 버전을 번호 버전으로 복제 배포
• 배포된 버전은 읽기 전용 (구성 포함)
• 함수 별 간단한, 정수 버전
exports.handler =
function(event,context)
{context.succeed(“bye”);}
exports.handler =
function(event,context)
{context.succeed(“hi”);}
1
2
Versions
19. 배포 관리: 버저닝 - 별칭
서로 다른 버전에 대한 변경 가능한 별칭 사용
특정 버전에 대하여 이름으로 별칭(alias) 지정
• 함수 소유자가 ARNs를 코드에 매핑
• 클라이언트 변경 없이 업데이트 가능
exports.handler =
function(event,context)
{context.succeed(“bye”);}
exports.handler =
function(event,context)
{context.succeed(“hi”);} prod
dev
Aliases
20. 배포 관리: 버저닝 – Lambda 함수 호출
다양한 버전의 Lambda 함수 사용: 개발, 베타, 프로덕션
개발 버전:
FunctionName (or)
FunctionName:$LATEST
특정 버전:
FunctionName:1
FunctionName:2
명명된 버전:
FunctionName:production
FunctionName:v1_2_3_4
21. 추가 정보
• 메모리 = “파워 레벨“
• 더 많은 메모리는 더 높은 CPU 파워를 제공
• 성능 튜닝
• JIT (Just-in-time) 초기화: 처음 대기 시간 비용 (“콜드 스타트“)
• 컨테이너를 재사용하여 반복 호출에 대한 지연을 피함
• Python 은 Node 보다 더 빨리 시작하며, 둘 모두 Java 보다 빨리 시작
• 사용자 라이브러리가 적으면 코드가 더 빨리 시작될 수 있음 (불필요한 종속성 제거)
• VPC 내에서 동작되는 함수는 VPC 가 아닌 것 보다 느릴 수 있음
• 높은 파워 레벨 (메모리) 설정은 빠르게 시작 될 것임 (특히 많은 사용자 라이브러리 또는
초기화 코드가 사용되는 경우)
• 함수에는 상태 개념이 없음
• 지속성을 위해 DynamoDB, S3, ElastiCache 를 사용
• 로컬 캐시 사용도 가능
• 메타 데이터 전달을 위해 환경 변수를 사용
23. AWS Serverless Application Model (SAM)
• 서버리스 앱의 컨텐츠를 기술하기 위한 공통 언어
• CloudFormation 에서 SAM 을 지원하여 서버리스 구성이
손 쉬워짐
• 람다 기반 애플리케이션을 패키지하고 배포하기 위한
CloudFormation 도구
• 콘솔에서 SAM 포맷으로 람다 블루프린트와 함수를
내보내기 가능
24. AWS Serverless Application Model
AWSTemplateFormatVersion: '2010-09-09’
Transform: AWS::Serverless-2016-10-31
Resources: GetHtmlFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: s3://flourish-demo-bucket/todo_list.zip
Handler: index.gethtml
Runtime: nodejs4.3
Policies: AmazonDynamoDBReadOnlyAccess
Events:
GetHtml: Type: Api
Properties: Path: /{proxy+} Method: ANY
ListTable: Type: AWS::Serverless::SimpleTable
함수
API
저장소
25. Dead-letter 큐
안정적인 엔드-투-엔드 이벤트 처리 솔루션을 손 쉽게 생성
• 처리되지 않은 모든 이벤트를
SQS 큐나 SNS 토픽으로 보냄:
3 스트라이크 규칙
• 코드에 문제가 있거나 호출이
쓰로틀 된 경우에도 이벤트를
보존
• 함수 별 동작
• S3 및 SNS 이벤트를 포함한
모든 비동기 호출에도 작동 Amazon
SQS
Amazon
SNS
AWS
Lambda
30. 기존의 어려움
다양한 API 버전 및 스테이지 관리의 어려움
타사 개발자들의 접근 모니터링에 시간 소요
접근 권한 관리의 어려움
트래픽 증감에 따른 운영 부담
서버를 전혀 갖지 않고 싶으면?
31. Amazon API Gateway 개요
다양한 API 버전 및 스테이지를 제공
타사 개발자에 API 키 생성 및 배포
API 접근 권한 관리를 위한 ‘AWS 서명 버전 4’ 활용
요청을 모니터링 및 제한하여 백엔드 보호
AWS Lambda 활용
32. API Gateway 사용의 장점
API 응답을 저장하기 위한 관리형 캐시
CloudFront를 통한 응답속도 개선 및 DDoS 보호
iOS, Android 및 JavaScript 를 위한 SDK 생성
API 정의를 위한 Swagger 지원
Request/response 데이터 변환
33. Supercell 고객 사례
Supercell also makes good use of the Amazon
API Gateway, and it uses AWS Lambda to run
code in response to events and automatically
manage the associated compute resources.
Yliharju says, “We use AWS Lambda and the
API Gateway when building API-based
services that need scalability.”
https://aws.amazon.com/solutions/case-studies/supercell/
34. API 호출 흐름
Internet
Mobile apps
Websites
Services
AWS Lambda
functions
AWS
API Gateway
cache
Endpoints on
Amazon
EC2/AWS
Elastic
Beanstalk
Any other publicly
accessible endpoint
Amazon
CloudWatch
monitoring
API
Gateway
35. 관리형 서비스
새로운, 완전 관리형 모델
InternetMobile apps
AWS Lambda
functions
AWS
API Gateway
cache
Endpoints on
Amazon EC2
Any other publicly
accessible endpoint
Amazon
CloudWatch
Amazon
CloudFront
API
Gateway
API Gateway
Other AWS
services
AWS Lambda
functions
36. AWS 로 앱 및 서버리스 마이크로서비스 개발
Amazon
Cognito
Identity
AWS
Device Farm
AWS Lambda
API Gateway
Amazon
Simple Email
Service
Mobile Hub
Android SDK
iOS SDK
JavaScript SDK
Amazon
DynamoDB
Amazon RDS
Amazon
S3
Amazon
CloudFront
Amazon EMR
Amazon Kinesis
Amazon
Redshift
Amazon SNS
Amazon
Mobile
Analytics
모바일 앱 개발
서버리스
백엔드
ID 관리
테스팅
및 개발 도구
데이터
저장소와
컨텐츠
모바일
분석
이메일과
푸시 알림
분석과
빅데이터
AWS
CodeCommit
AWS
CodeDeploy
AWS
CodePipeline
Amazon
Cognito
Sync
38. 서버리스 활용 시나리오
데이터 처리
별도 혹은 데이터 저장소나
메시지 버스에
스트리밍되는 데이터를
stateless 하게 처리
시스템 제어
AWS 내의 상태 및 데이터
변경에 대한 응답 및 응답
워크플로우 제어
앱 백엔드 개발
Web, 모바일, 디바이스,
음성인식과 관련하여 서버의
비지니스 로직 실행
39. 데이터 소스
변경 사항 폴링을 위한
서버 플릿
소스 리스닝 작업 큐 푸시 작업 큐 풀
데이터 처리를 위한
작업자 서버 플릿
부하 대응을
위한
오토스케일
링
S3 객체
Amazon Kinesis 레코드
DynamoDB 테이블
SNS 메시지
IoT 장치
…
고가용성을
위한 다중
가용영역
분산
트래픽
분산을 위한
로드밸런서
서버를 통한 데이터 처리 아키텍처
어플리케이션 코드
40. 데이터 소스
Lambda 함수 연결
이것으로 끝!
Lambda가 수행
리스닝/폴링
작업 큐 관리
오토스케일링
고가용성
로드 밸런싱
서버리스 데이터 처리 아키텍처
어플리케이션 코드
41. Amazon S3 Bucket Events AWS Lambda
Original image Thumbnailed image
1
2
3
참조 아키텍처: 이미지 리사이징
튜토리얼: Using AWS Lambda with Amazon S3 -
http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html
42. 참조 아키텍처: 서버리스 비디오 스트리밍 아키텍처
AWS
Lambda
Amazon S3
비디오 파일 입수
PUT 이벤트
Lambda 트리거
Amazon Elastic
Transcoder
트랜스코딩
Job 시작
Amazon S3
여러 bit-rate
HLS 스트리밍
Amazon
CloudFront
시청자
43. 서버리스 웹 앱 : API Gateway + Lambda
정적 컨텐츠 제공 : S3
동적 컨텐츠 제공 : Lambda
HTTPS 억세스 및 인터페이스 : API Gateway
저장소 : DynamoDB
Dynamic Content
in AWS Lambda
Data Stored in
Amazon
DynamoDB
API GatewayStatic content in
Amazon S3
44. 비동기 프로세싱: S3 + Lambda
New data
available
Amazon S3 AWS Lambda Amazon S3
45. 데이터베이스 트리거: DynamoDB + Lambda
New data
available
Amazon DynamoDB AWS Lambda
Amazon
DynamoDB
Amazon
Redshift
46. 실시간 분석 처리: Kinesis + Lambda
고속 대용량 데이터 수집 : Kinesis
Lambda 내 “Kinesis” 블루프린트 활용
수집 및 집계 결과 저장 : Redshift, S3, DynamoDB
Data Ingestion with
Amazon Kinesis
(PUT record)
Records retrieved by
AWS Lambda
Your code runs once
per [batch of] records
Amazon S3
Amazon
DynamoDB
Smart
Devices
Click
Stream
Log
Data
Amazon
Redshift
49. 간단한 웹 기반 툴: Serverless Pastebin (gist)
SPPutPaste
웹 브라우저
Amazon S3
동적 콘텐츠
정적 콘텐츠
Amazon
DynamoDBAmazon API
Gateway
ServerlessPastebin
- pid
- content
- created_at
SPGetPaste
SPUpdatePaste
SPDeletePaste
모바일
/paste
POST
OPTIONS
/{id}
POST
GET
PUT
DELETE
OPTIONS
Amazon
Route 53
s3://serverless.piljoong.com
51. 서버리스 맵/리듀스 벤치마크
데이터셋: Amplab 벤치마크의 일부분
쿼리:
- Scan 쿼리 (9천만건, 6.36GB)
- SELLECT pageURL, pageRank FROM rankings WHERE pageRank > X
(x = {1000, 100, 10})
- 1a) SELECT pageURL, pageRank FROM rankings WHERE pageRank >
1000
- 1b) SELECT pageURL, pageRank FROM rankings WHERE pageRank >
100
- UserVisits 에 Aggregation 쿼리 (7.75억건, ~127GB)
- 2a) SELECT SUBSTR(sourceIP, 1, 8), SUM(adRevenue) FROM uservisits
GROUP BY SUBSTR(sourceIP, 1, 8)
52. 서버리스 맵/리듀스 벤치마크 결과
Serverless 맵리듀스 비용
각 솔루션 별 쿼리 실행 시간 (초 단위)
53. PyWren: 대규모 데이터 프레임 워크
• 람다를 사용하는 오픈 소스
맵리듀스 프레임워크
• 25 TFLOPS 성능 (피크 40)
• 60GB/초 읽기와
• 50GB/초 쓰기 (S3)
https://github.com/pywren/pywren
http://pywren.io/
55. PlayOn!
Sports
랩톱
인코더
HLS
S3 재생
VOD 스트림
모바일
클라이언트
CloudFront
스트리밍
라이브 스트림
모바일
클라이언트
CloudFront S3 수집
480p
트랜스코드
HQ 사본
360p
트랜스코드
오디오
전용
트랜스코드
썸네일
QOS 분석
Lambda 함수 종속 연결
http://www.slideshare.net/AmazonWebServices/arc308-the-serverless-company-using-aws-lambda
Peak 시:
300 라이브 인바운드와
2만여명의 뷰어
56. SQUARE ENIX
결과:
- 몇 시간 걸리던 작업이 10여초만에!
- 동일한 작업의 1/20 수준의 비용
어떤 작업:
- 게임 내 사진의 추가 작업: 썸네일,
워터마크 추가 등
기존 상황:
- 보통 1분에 2~300 장 정도 처리
- 이벤트 시 분당 6000개 까지 늘어남
- 이벤트 시 사용자의 사진 확인까지
긴 경우 3~4시간 소요
고려한 점들:
- 64코어 서버 추가 및 처리 쓰레드
확장 (처리 속도보단 병렬 처리를)
- 몇 번 없는 스파이크를 위해
고비용의 장비 구매는 비효율적
- AWS 도입? Lambda 도입?
57. VidRoll 아키텍처
- 개발자들의 인프라에 대한
이해와 걱정을 없앰
- 8~10 명의 엔지니어가 주로
하던일을 2~3 명의 엔지니어가
할 수 있게 됨
- 기술인력 추가 없이 10배 이상
수익이 증가함
AWS
Lambda
Amazon API
Gateway
Amazon
DynamoDB
Amazon
Redshift
Amazon
Kinesis
61. 사용자 인증 및 제어
비지니스 로직 수행
사용자 행동 분석
데이터 동기화
콘텐츠 저장, 공유, 전송
푸시 알림 전송
실 시간 데이터 스트림
공유 데이터 저장
대화형 입력 처리리텐션 추적
모바일 게임
AWS Mobile SDK
사용자와 인증 제공
관리
서버 없이 상태 없는
커스텀 코드 실행
디바이스 간의
사용자 설정 동기화
활성 유저,
인게이지먼트 추적
사용자 제작 사진과 미디어
저장, 공유 및 글로벌로 빠르게 전송
메시지를 전송하여
사용자 인게이지먼트 레벨 향상
사용자와 디바이스 간
데이터를 저장 및 쿼리
실 시간 클릭스트림 로그 수집 및
빠르게 동작 수행
실 시간 클릭스트림 로그 수집 및
빠르게 동작 수행
서버 없이 상태 없는
커스텀 코드 실행
62. 사용자 인증 및 제어
비지니스 로직 수행
사용자 행동 분석
데이터 동기화
Amazon Mobile
Analytics
Amazon Cognito
(Sync)
Amazon Lambda
Amazon Cognito
(Identity)
IAM
콘텐츠 저장, 공유, 전송
푸시 알림 전송
Amazon CloudFront
Amazon S3
Amazon SNS Mobile Push
Amazon Pinpoint
실 시간 데이터 스트림
Amazon Kinesis
Amazon Pinpoint
공유 데이터 저장
Amazon DynamoDB
Amazon RDS
대화형 입력 처리리텐션 추적
Amazon Lex
모바일 게임
AWS Mobile SDK