Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Min Sung Kim, Solutions Architect
September 21
A...
Agenda
• 실시간 서버리스 데이터 처리란?
• 서버리스 기반의 실시간 스트리밍 데이터 처리
• 분산 컴퓨터 환경을 바탕으로한 서버리스 데이터 처리
실시간 서버리스 데이터 처리란?
실시간 데이터 처리란?
유입/
수집
시각화/
공유
저장
처리/
분석
Data
1 4
0 9
5
Answers &
Insights
배치형 처리
(retrospective)
실시간 처리
(real-time)
분석/예측
(M...
AWS Lambda
최선의 관리 효율성: 손쉬운 플리케이션의 작성, 배포, 유지 보수,
보안 & 관리
Bring Your Own Code: Node.js, Java, Python, C# 기반의
Stateless, eve...
Lambda 이벤트 소스
Amazon
S3
Amazon
DynamoDB
Amazon
Kinesis
Amazon
Cognito
Amazon
SNS
Amazon
SES
Cron
events
데이터 저장소 ENDPOINTS
...
서버리스 실시간 데이터 처리란…
데이터 흐름(스트림)
을 받아서
IoT Data
금융
로그
설치하거나
관리할
서버 없이
이벤트 원천
Node.js
Python
Java
C#
데이터 흐름
처리
함수/메소드
클릭스트림
결과...
Lambda 실시간 이벤트 소스
Amazon
DynamoDB
Amazon
Kinesis
Amazon
S3
Amazon
SNS
비동기 푸쉬 모델
흐름(스트림) 풀링 모델
Amazon
Alexa
AWS
IoT
동기 푸쉬 모...
서버리스 기반의 실시간 데이터 처리
Amazon Kinesis
Amazon Kinesis Offering: 스트림 데이터의 Ingestion 및
처리를 위한 관리형 서비스.
• Amazon Kinesis Streams: 스트림 데이터 처리 및
분석
• A...
Amazon Kinesis로 스트림 데이터 발송 (수신
데이터는 Shard에 저장 됨)
Amazon Kinesis 스트림 처리에 대해 복수의
Lambda 함수 호출 가능
(Fan out)
Lambda 를 활용하여 데이처...
스트림 처리: Amazon Kinesis Stream Set Up
스트림
샤드로 구성
샤드 당 최대 1MB/초, 최대1,000 TPS 데이터 레코드 입력 가능
샤드 당 최대 2 MB/초, 최대 5 TPS 데이터 레코드 ...
스트림 처리: Amazon Kinesis Stream Set Up
데이터
저장된 데이터는 24시간 (기본값)내 Replay 가능
파티션키의 선택
Managed Buffer: 복수의 샤드의 고른 활용을 위하여 고르게 분배...
스트림 처리: Lambda 함수 생성
메모리
메모리 사이즈에 따라 CPU 파워가 할당됨
높은 CPU 파워 또는 많은 량의 레코드를 처리해야 하는 경우 메모리 증가가 필요
Timeout
최대 5분까지 설정 가능
Permi...
스트림 처리: Lambda 함수 생성
Best Practice
Lambda 함수는 Stateless (함수내에는 Stateful 데이터 저장 금지)
커넥션 재사용을 위해 외부 인터페이스 (예: DB, AWS)는 Hand...
스트림 처리: 이벤트 소스 설정
Amazon Kinesis는 Lambda의 이벤트 소스로 지정됨
Batch size
Lambda 함수 한번 호출로 처리할 레코드의 수량
Batch size는 레코드의 크기 및 요구되는 L...
스트림 처리: Under the hood
• 각 샤드별로 진행, 샤드에 데이터가 없는 경우 250ms 후 Polling
• GetRecords call을 호출하여 최대 데이터 (최대 10K, 10MB)를
읽어옴
Poll...
스트림 처리: 처리량 튜닝
… …
Source
Amazon Kinesis
Destination 1
Lambda
Destination 2
FunctionsShards
샤드 수량에 맞춰 Lambda 스케일 자동 조정샤드에 ...
스트림 처리: Retry 및 예외 처리
… …
Source
Amazon Kinesis
Destination 1
Lambda
Destination 2
FunctionsShards
샤드 수량에 맞춰 Lambda 스케일 자동...
데모: 실시간 트윗 크롤링
“Devday”를 넣어서 트윗을 날려주세요.
데모 아키텍처
Applications
Kinesis Stream
S3
• Data Staging
• Data Archiving
• Data Backup
• Ad-hoc Analysis
“S3로 데이터 적제”
실시간 데이...
스트림 처리: 경험 몇 가지…
실제 처리되는 배치의 크기는 부하가 낮을때는 설정 보다 낮아졌습니다.
실제 처리되는 배치의 크기는 부하가 높을때는 설정 보다 높아졌습니다.
너무 많은 Consumer는 단일 샤드의 Read...
데모 아키텍처
Applications
Kinesis Stream
S3
• Data Staging
• Data Archiving
• Data Backup
• Ad-hoc Analysis
“S3로 데이터 적제”
실시간 데이...
스트림 처리: 경험 몇 가지…
• GetRecords: 실제 처리량
• PutRecord : bytes, latency, records 등
• GetRecords.IteratorAgeMilliseconds: 현재 시간과...
서버리스 분산 컴퓨팅
10101101
11001010
서버리스 분산 컴퓨팅: 맵 리듀스 Model
왜? 서버리스 기반의 분산 컴퓨팅인가?
인프라 관리의 어려움에서 해방
- 클러스터 관리, 복잡한 구성 도구 불필요
심플하고 유연하며 사용자 친화적인 데이터 프로세싱
환경 제공...
서버리스 분산 컴퓨팅: 맵 리듀스 Model
https://github.com/awslabs/lambda-refarch-mapreduce
서버리스 분산 컴퓨팅: 맵 리듀스 Model
성능 측정 (Amplab benchmark)
벤치마크 데이터
벤치마크 쿼리
- Scan query : Rankings 테이블
- Select query : Rankings 테...
성능 측정
벤치마크 결과 (seconds)
TECHNOLOGY SCAN 1A SCAN 1B AGGREGATE 2A
Amazon Redshift (HDD) 2.49 2.61 25.46
Serverless MapReduce...
서버리스 분산 컴퓨팅: Fannie Mae 사례
목적
노후화 (7년) 된 HPC Grid의 성능 개선을 목적으로 고려
경과
2016년 Lambda를 활용한 첫 HPC 컴퓨티 플랫폼 작성
금융 모델링 어플리케이션 개발의 ...
서버리스 분산 컴퓨팅: Fannie Mae 사례
Lambda 구성
2,000 concurren로 시작하여 1분 단위로 100개씩 추가 호출
부하에 따라 2,000dptj 15,000까지 자동 증가
어플리케이션 결과
20...
서버리스 분산 컴퓨팅: PyWren
UC, Berkeley에서 첫 프로토타입 개발
http://pywren.io/
파이션 및 Stateless Lambda 함수를 기반으로 대량 데이터에 대한 분석에 활용
S3 저장소에 ...
요약
• 실시간 서버리스 데이터 처리를 위한 Lambda와
Kinesis에 대한 이해 및 Internal 동작 원리
• 서버 리스 분산 컴퓨팅 및 고객 사례
Resources
AWS Serverless https://aws.amazon.com/serverless
AWS Lambda 참조 아키텍처
- Real-Time Streaming: https://github.com/aw...
Upcoming SlideShare
Loading in …5
×

AWS Lambda를 기반으로한 실시간 빅테이터 처리하기

2,328 views

Published on

김민성 AWS 솔루션즈 아키텍트

Published in: Technology
  • Be the first to comment

AWS Lambda를 기반으로한 실시간 빅테이터 처리하기

  1. 1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Min Sung Kim, Solutions Architect September 21 AWS Lambda를 통한 실시간 빅데이터 처리하기
  2. 2. Agenda • 실시간 서버리스 데이터 처리란? • 서버리스 기반의 실시간 스트리밍 데이터 처리 • 분산 컴퓨터 환경을 바탕으로한 서버리스 데이터 처리
  3. 3. 실시간 서버리스 데이터 처리란?
  4. 4. 실시간 데이터 처리란? 유입/ 수집 시각화/ 공유 저장 처리/ 분석 Data 1 4 0 9 5 Answers & Insights 배치형 처리 (retrospective) 실시간 처리 (real-time) 분석/예측 (ML/DL/AI)
  5. 5. AWS Lambda 최선의 관리 효율성: 손쉬운 플리케이션의 작성, 배포, 유지 보수, 보안 & 관리 Bring Your Own Code: Node.js, Java, Python, C# 기반의 Stateless, event-driven 어플리케이션 작성, Bring Your Own Library 지원 인프라 관리에서 해방: Amazon EC2 및 Auto Scaling과 같은 인프라 관리 요소 없음 비용 효율성: 요청 빈도에 따른 자동화된 용량 조정, 실행 시간 (100ms) 단위의 과금 이벤트 기반의 호출: 동기 및 비동기 API Call, AWS 서비스와의 Integration, 3rd 파티 Trigger 지원
  6. 6. Lambda 이벤트 소스 Amazon S3 Amazon DynamoDB Amazon Kinesis Amazon Cognito Amazon SNS Amazon SES Cron events 데이터 저장소 ENDPOINTS 구성 리포지토리 이벤트 및 메세징 서비스 AWS CloudFormation AWS CloudTrail Amazon CloudWatch AWS CodeCommit Amazon API Gateway Amazon Alexa AWS IoT AWS Step Functions
  7. 7. 서버리스 실시간 데이터 처리란… 데이터 흐름(스트림) 을 받아서 IoT Data 금융 로그 설치하거나 관리할 서버 없이 이벤트 원천 Node.js Python Java C# 데이터 흐름 처리 함수/메소드 클릭스트림 결과 데이터베이스 클라우드 서비스
  8. 8. Lambda 실시간 이벤트 소스 Amazon DynamoDB Amazon Kinesis Amazon S3 Amazon SNS 비동기 푸쉬 모델 흐름(스트림) 풀링 모델 Amazon Alexa AWS IoT 동기 푸쉬 모델 이벤트 소스를 바탕으로 Mapping Lambda를 기반으로 Mapping 이벤트 소스 API를 통해 Lambda 함수 호출 스트림내에 새로운 레코드들이 적제되면 Lambda 함수가 호출 리소스 기반 정책 할당 Lambda 실행 역할 정책 Concurrent Executions 동기 invocation 비동기 Invocation 동기 invocation Lambda에서 이벤트 스트림을 풀링 동작 방식
  9. 9. 서버리스 기반의 실시간 데이터 처리
  10. 10. Amazon Kinesis Amazon Kinesis Offering: 스트림 데이터의 Ingestion 및 처리를 위한 관리형 서비스. • Amazon Kinesis Streams: 스트림 데이터 처리 및 분석 • Amazon Kinesis Firehose: 스트림 데이터를 Amazon S3 및 Amazon Redshift로 저장 • Amazon Kinesis Analytics: 스트림 데이터에 대한 SQL 쿼리 기반의 분석 실시간: 실시간 데이터 스트림 수집 및 이에 대한 즉각적인 분석 쉬운 관리: 인프라 관리 없이 데이터 스트리밍 어플리케이션 자체에 집중
  11. 11. Amazon Kinesis로 스트림 데이터 발송 (수신 데이터는 Shard에 저장 됨) Amazon Kinesis 스트림 처리에 대해 복수의 Lambda 함수 호출 가능 (Fan out) Lambda 를 활용하여 데이처 처리 및 결과 저장 (DynamoDB, S3) Lambda 를 활용 스트림 데이터 Aggregation 한 후 Amazon Elasticsearch Service등을 통해 분석 모니터링을 위하여 Amazon CloudWatch로 함수 정보 및 이벤트 데이터 전송 Amazon Kinesis AWS Lambda Amazon CloudWatch Amazn DynamoDB Amazon Elasticsearch Service Amazon S3 AWS Lambda 실시간 스트림 처리: Lambda + Amazon Kinesis
  12. 12. 스트림 처리: Amazon Kinesis Stream Set Up 스트림 샤드로 구성 샤드 당 최대 1MB/초, 최대1,000 TPS 데이터 레코드 입력 가능 샤드 당 최대 2 MB/초, 최대 5 TPS 데이터 레코드 출력 가능 샤드 2 샤드 1 샤드 2 샤드 1 샤드 3 샤드 2 샤드 1 샤드 2 샤드 1 샤드 3 샤드 2 샤드 1 지금 1:00-7:00 7:00-13:00 13:00-19:00 19:00-1:00 분할 (split) 분할 (split) 병합 (merge)
  13. 13. 스트림 처리: Amazon Kinesis Stream Set Up 데이터 저장된 데이터는 24시간 (기본값)내 Replay 가능 파티션키의 선택 Managed Buffer: 복수의 샤드의 고른 활용을 위하여 고르게 분배 되는 (랜덤 키 등) 파티 션 키 지정 Streaming MapReduce: 특정 컬럼 (디바이스 ID, 고객 ID 등)을 파티션 키로하여 특정 샤드로 적제 되도록 구성 Best Practice 병렬 처리 성능 향상을 위한 Partition Key의 고려 필요 예상되는 최대 워크로드 기준의 위한 초기 사이즈/샤드 디자인 콘솔에서 제공되는 “Help me decide how many shards I need” 옵션 활용 샤드 수량 판별: max(incoming_write_bandwidth_in_KB/1000, outgoing_read_bandwidth_in_KB / 2000)
  14. 14. 스트림 처리: Lambda 함수 생성 메모리 메모리 사이즈에 따라 CPU 파워가 할당됨 높은 CPU 파워 또는 많은 량의 레코드를 처리해야 하는 경우 메모리 증가가 필요 Timeout 최대 5분까지 설정 가능 Permission model Kinesis Stream에 대한 권한 필요 Retries Amazon Kinesis의 기본 데이터 저장 기간이 24시간까지 지속적으로 Retry
  15. 15. 스트림 처리: Lambda 함수 생성 Best Practice Lambda 함수는 Stateless (함수내에는 Stateful 데이터 저장 금지) 커넥션 재사용을 위해 외부 인터페이스 (예: DB, AWS)는 Handler Faction 외부에 선언 var AWS = require('aws-sdk'); var doc = new AWS.DynamoDB.DocumentClient(); exports.handler = function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); ... ... }
  16. 16. 스트림 처리: 이벤트 소스 설정 Amazon Kinesis는 Lambda의 이벤트 소스로 지정됨 Batch size Lambda 함수 한번 호출로 처리할 레코드의 수량 Batch size는 레코드의 크기 및 요구되는 Latency에 따라 다를 수 있음 실제 배치 사이즈 – Calculated as: MIN(records available, batch size, 6MB) Starting position “Trim Horizon” 과거 데이터부터 현재까지의 순서로 샤드를 읽어 들일 경우 “Lastest” 최신 데이터부터 과거의 순서로 샤드를 읽어 들일 경우 “At timestemp” 특정 시점를 기준으로 이후의 데이터를 읽어 들일 경우
  17. 17. 스트림 처리: Under the hood • 각 샤드별로 진행, 샤드에 데이터가 없는 경우 250ms 후 Polling • GetRecords call을 호출하여 최대 데이터 (최대 10K, 10MB)를 읽어옴 Polling • Lambda 함수 호출을 위한 Function Parameter 준비 • Polling 단계에서 호출된 데이터를 호출될 Lambda의 Payload로 Batch의 수량 만큼 분할하여 로딩 Batching Lambda Invocation • RequestResponse 타입으로 동기적으로 호출됨 • Lambda는 Kinesis에 대하여 at least semantics 기반으로 동작 • 각 샤드의 데이터는 샤드별로 우선 순위가 보장됨 Synchronous
  18. 18. 스트림 처리: 처리량 튜닝 … … Source Amazon Kinesis Destination 1 Lambda Destination 2 FunctionsShards 샤드 수량에 맞춰 Lambda 스케일 자동 조정샤드에 대한 split/merge를 기반으로 스케일 조정 Waits for responsePolls a batch 최대 이론상 처리량 # shards * 2MB / Lambda function duration (s) 실제 이론상 처리량 # shards * batch size (MB) / Lambda function duration (s) 실제 Put/Ingestion 되는 데이터량이 이론적인 처리량보다 높은 경우 데이터 유실 발생 가능
  19. 19. 스트림 처리: Retry 및 예외 처리 … … Source Amazon Kinesis Destination 1 Lambda Destination 2 FunctionsShards 샤드 수량에 맞춰 Lambda 스케일 자동 조정샤드에 대한 split/merge를 기반으로 스케일 조정 Waits for responsePolls a batch Best Practice try { //데이터 처리 } catch (ex) { //예외 조치 및 //필요 시 Retry 로직 수행 (exponential backoff 등) } finally { //추후 디버깅을 위한 정보 저장 (offline processing 등) } 데이터 처리의 중요성과 어플리케이션의 성능사이에서의 선택
  20. 20. 데모: 실시간 트윗 크롤링
  21. 21. “Devday”를 넣어서 트윗을 날려주세요.
  22. 22. 데모 아키텍처 Applications Kinesis Stream S3 • Data Staging • Data Archiving • Data Backup • Ad-hoc Analysis “S3로 데이터 적제” 실시간 데이터 처리 : Lambda DynamoDB
  23. 23. 스트림 처리: 경험 몇 가지… 실제 처리되는 배치의 크기는 부하가 낮을때는 설정 보다 낮아졌습니다. 실제 처리되는 배치의 크기는 부하가 높을때는 설정 보다 높아졌습니다. 너무 많은 Consumer는 단일 샤드의 Read limit에 도달할 가능성이 높아지기 때문에, ReadProvisionedThroughputExceeded 에러 및 메트릭에 대한 모니터링이 필요합니다. “모든 어플리케이션이 Kinesis Stream 수준의 스트림 처리 및 분석 요구사항을 갖고 있을까요?”
  24. 24. 데모 아키텍처 Applications Kinesis Stream S3 • Data Staging • Data Archiving • Data Backup • Ad-hoc Analysis “S3로 데이터 적제” 실시간 데이터 처리 : Lambda DynamoDB
  25. 25. 스트림 처리: 경험 몇 가지… • GetRecords: 실제 처리량 • PutRecord : bytes, latency, records 등 • GetRecords.IteratorAgeMilliseconds: 현재 시간과 마지막 GetRecords와의 시간 차이 Amazon Kinesis Streams 모니터링 Lambda 함수 모니터링 • Invocations: 함수 호출 횟수 • Duration: 실행 및 처리 시간 • Error count: 에러 수량 • Throttle: Throttle이 발생한 수량 (Lambda concurrent execution limit) • Iterator Age: 처리된 배치의 마지막 레코드 (스트림에 저장된 시간 기준)
  26. 26. 서버리스 분산 컴퓨팅 10101101 11001010
  27. 27. 서버리스 분산 컴퓨팅: 맵 리듀스 Model 왜? 서버리스 기반의 분산 컴퓨팅인가? 인프라 관리의 어려움에서 해방 - 클러스터 관리, 복잡한 구성 도구 불필요 심플하고 유연하며 사용자 친화적인 데이터 프로세싱 환경 제공 - State 관리 복잡성 완화 - 서버의 Utilization 및 Multi-Threading으로 인한 프로 그램 복잡성으로 부터 해방 - Ad-hoc 형태의 맵리듀스 작업에 대한 비용 절감
  28. 28. 서버리스 분산 컴퓨팅: 맵 리듀스 Model https://github.com/awslabs/lambda-refarch-mapreduce
  29. 29. 서버리스 분산 컴퓨팅: 맵 리듀스 Model 성능 측정 (Amplab benchmark) 벤치마크 데이터 벤치마크 쿼리 - Scan query : Rankings 테이블 - Select query : Rankings 테이블 - Aggregation query : UserVisits 테이블 Rankings (rows) Rankings (bytes) UserVisits (rows) UserVisits (bytes) Documents (bytes) 90 Million 6.38 GB 775 Million 126.8 GB 136.9 GB
  30. 30. 성능 측정 벤치마크 결과 (seconds) TECHNOLOGY SCAN 1A SCAN 1B AGGREGATE 2A Amazon Redshift (HDD) 2.49 2.61 25.46 Serverless MapReduce 39 47 200 Impala - Disk - 1.2.3 12.015 12.015 113.72 Impala - Mem - 1.2.3 2.17 3.01 84.35 Shark - Disk - 0.8.1 6.6 7 151.4 Shark - Mem - 0.8.1 1.7 1.8 83.7 Hive - 0.12 YARN 50.49 59.93 730.62 Tez - 0.2.0 28.22 36.35 377.48 서버리스 분산 컴퓨팅: 맵 리듀스 Model 비용 11 센트
  31. 31. 서버리스 분산 컴퓨팅: Fannie Mae 사례 목적 노후화 (7년) 된 HPC Grid의 성능 개선을 목적으로 고려 경과 2016년 Lambda를 활용한 첫 HPC 컴퓨티 플랫폼 작성 금융 모델링 어플리케이션 개발의 경우 한달이내 이를 위한 컴퓨팅 리소스를 수 분내에 프로비저닝 2017년 15,000 병렬 수행이 가능한 최초의 금융 모델링 어플리케이션 배포
  32. 32. 서버리스 분산 컴퓨팅: Fannie Mae 사례 Lambda 구성 2,000 concurren로 시작하여 1분 단위로 100개씩 추가 호출 부하에 따라 2,000dptj 15,000까지 자동 증가 어플리케이션 결과 20M (2천만) 모기지에 대한 시뮬레이션에 약 2시간 소요 (기존 대비 3배 향상)
  33. 33. 서버리스 분산 컴퓨팅: PyWren UC, Berkeley에서 첫 프로토타입 개발 http://pywren.io/ 파이션 및 Stateless Lambda 함수를 기반으로 대량 데이터에 대한 분석에 활용 S3 저장소에 대하여 코어당 30~40MB/s 수준의 읽기 및 쓰기 성능 달성 2800개의 동시 실행을 통해 60~80GB/s 수준의 성능 확장 가능
  34. 34. 요약 • 실시간 서버리스 데이터 처리를 위한 Lambda와 Kinesis에 대한 이해 및 Internal 동작 원리 • 서버 리스 분산 컴퓨팅 및 고객 사례
  35. 35. Resources AWS Serverless https://aws.amazon.com/serverless AWS Lambda 참조 아키텍처 - Real-Time Streaming: https://github.com/awslabs/lambda-refarc h-streamprocessing - Distributed Computing Reference Architecture (serverless MapReduce) https://github.com/awslabs/lambda-refarch-mapre duce Lambda, Kinesis 개발자 가이드 http://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html AWS Lambda 포럼 https://forums.aws.amazon.com/forum.jspa?forumID=186

×