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.

Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summit Seoul 2016

8,682 views

Published on

5월 17일 서울COEX에서 열린 AWS Summit Seoul 2016에서 박철수 솔루션즈 아키텍트님이 발표하신 "Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼" 발표자료입니다.

Published in: Technology
  • Login to see the comments

Amazon kinesis와 elasticsearch service로 만드는 실시간 데이터 분석 플랫폼 :: 박철수 :: AWS Summit Seoul 2016

  1. 1. ©  2016,  Amazon  Web  Services,  Inc.  or  its  Affiliates.  All  rights  reserved. 2016년 5월 17일 실시간 데이터 분석 플랫폼을 위한 Amazon Kinesis와 Elasticsearch Service 박철수 | 솔루션즈 아키텍트
  2. 2. 목차 • 실시간 데이터 분석 개요 • Amazon  Kinesis  Streams • Amazon  Elasticsearch Service
  3. 3. 데이터 분석 적용 분야 • 모바일 사용자 및 웹 클릭 스트림 분석 • 소셜 미디어 분석 • 사물 인터넷(IoT) • 시스템 및 보안 로그 분석 • 애플리케이션 로그 및 웹 로그 분석 • 일반적인 웹 사이트 검색 • 지식 관리 시스템의 전체-텍스트 검색
  4. 4. 스트림 처리 (실시간) • 데이터 스트림에 있는 이벤트에 실시간 응답 마이크로-배치(준 실시간) • 데이터 스트림에 있는 이벤트의 작은 배치에 대해 거의 실시간 운영 실시간 분석의 두 가지 주요 처리 패턴 • 예: • 디바이스 로그에 있는 하드웨어 에러를 사전에 감지 • 재고가 임계값 아래로 떨어질 때 알림 • 예: • 활동 로그에서 부정행위 식별 • 성능에 대한 SLA 모니터링
  5. 5. 다양한 분석 도구
  6. 6. “Elasticsearch API에 직접 접속하는 것만으로 유연하고 빠르게 서비스를 만들 수 있는 Amazon   Elasticsearch Services를 선택했습니다.” Sean  Curtis,   MLBAM  엔지니어링 부사장 “우리는 쉽고 빠르게 Kinesis를 시작하고 확장할 수 있었습니다.  AWS는 Snowplow를 호스팅할 수 있는 좋은 플랫폼입니다.” Alexander  Dean, Snowplow  창업자 고객의 소리
  7. 7. Amazon   Glacier S3 DynamoDB   RDS EMR Amazon   Redshift Data  Pipeline Amazon   Kinesis   CloudSearch Kinesis-­enabled   app Lambda ML SQS ElastiCache DynamoDB Streams   Amazon Elasticsearch Service 다양한 분석 도구
  8. 8. Amazon  Kinesis   Streams
  9. 9. Amazon Kinesis Streams 스트리밍 데이터 처리 애플리케이션 구축 쉬운 관리: 새로운 스트림을 생성하고, 데이터 처리 속도와 볼륨에 맞는 용량과 파티션 구성 실시간 애플리케이션 구축: Kinesis  Client  Library,  Apache  Spark/Storm,  AWS   Lambda 등을 사용하여 스트리밍 데이터에서 사용자 정의 레코드 처리를 수행 낮은 비용: 어떤 규모의 워크로드라도 비용 효율적임 클릭 스트림 데이터 전송 클릭 스트림 데이터를 저장 및 노출 KCL 기반 앱으로 실시간 개인화 컨텐츠 생성 개인화된 컨텐츠 제안
  10. 10. 데이터 소스 앱#4 [머신 러닝] AWS엔드포인트 앱#1 [집계 및 중복 제거] 데이터 소스 데이터 소스 데이터 소스 앱#2 [통계 지표 추출] S3 DynamoDB Redshift 앱#3 [슬라이딩 윈도우 분석] 데이터 소스 가용 영영 샤드 1 샤드 2 샤드 N 가영 영역 가용 영역 생산자(Producer) Amazon  Kinesis  Streams 소비자(Consumer) Amazon Kinesis Streams 실시간 처리를 위한 관리형 서비스
  11. 11. 샤드 2 Amazon Kinesis Streams 데이터 보존 및 저장을 위한 관리형 기능 • 스트림은 한개 이상의 샤드로 구성됨 • 각 샤드는 최대 1MB/초, 최대1,000 TPS 데이터 레코드 입력 가능 • 각 샤드는 최대 2 MB/초, 최대 5 TPS 데이터 레코드 배출 가능 • 모든 데이터는 기본으로 24시간동안 저장됨 • 데이터 보존 기간 연장 가능 (최대 7일) • 샤드들을 분할하거나 병합을 통해 확장 • 보존 기간 내에 있는 데이터 다시 재생 가능 샤드 1 샤드 2 샤드 1 샤드 3 샤드 2 샤드 1 샤드 2 샤드 1 샤드 3 샤드 2 샤드 1 지금-24시간 1:00-7:00 7:00-13:00 13:00-19:00 19:00-1:00 분할 (split) 분할 (split) 병합 (merge) Kinesis 스트림
  12. 12. 스트림 데이터 저장
  13. 13. 관리형 버퍼 • 데이터를 안전하고 확장 가능한 방법으로 취합해서 저장할 수 있는 방법 고려 시 선택 • 집계 및 계산은 모두 소비자(Consumer)에게 위임 • 랜덤 파티션 키 생성 및 사용 • 가능한 샤드들에 균일하게 배포하기 위해, 샤드의 파티션 키에 대해 높은 카디넬리티를 보장해야 함 입력 모델 고려 업무에 따라 파티션 키 선택하는 정책 스트리밍 맵-리듀스 • 자연스럽게 데이터를 집계하는 방법으로 파티션 키를 활용 • 확장할 수 있는 파티션 키 설계 • “핫 파티션 키와 샤드”에 주의 • 예: 빌링 고객마다 파티션 키 배정 장치 ID마다 파티션 키 배정 주식 심볼 당 파티션 키 배정
  14. 14. 레코드 순서와 다중 샤드 순서 처리 요건에 따라 파티션 키 선택하는 정책 비순서 처리 • 많은 샤드들에 걸처서 분산하기 위해 랜덤 파티션 키를 사용하고 다중의 작업자(worker)들을 사용 정확한 순서 처리 • 파티션 키를 제어해서 동일한 샤드에 이벤트가 모이고 동일한 작업자가 읽을 수 있게 보장 두 가지 모두 필요? 전역 시퀀스 번호를 적용 전역 시퀀스 번호 얻기 비순서 스트림 캠페인 중심 스트림 부정행위 검사 스트림 이벤트 메타데이터 얻기 Id 이벤트 스트림 – 파티션 키 1 확인 캠페인 중심 스트림 - UUID 2 부정행위 비순서 스트림 부정행위 검사 스트림 – sessionid 생산자
  15. 15. Amazon Kinesis Streams 데이터 넣기 Put 인터페이스로 데이터 넣기 • Kinesis 생산자(Producer)는 PUT 호출을 통해서 데이터를 스트림에 저장. 각 레코드 <= 1 MB • PutRecord {Data,StreamName,PartitionKey} • PutRecords {Records{Data,PartitionKey},   StreamName} • 파티션 키는 생산자(producer)에 의해 제공되고 샤드들에 걸처 PUT 레코드들을 분산되는데 사용됨 • PUT 호출이 성공적으로 이루어지면 고유한 시퀀스 번호를 생산자에게 반환 생산자 생산자 생산자 생산자 생산자 생산자 생산자 생산자 생산자 샤드 1 샤드 2 샤드 3 샤드 4 샤드 n
  16. 16. PutRecords {Records {Data,PartitionKey}, StreamName} • 500 레코드 지원 • 레코드 =<1 MB, 전체 요청에 대해서 최대 5 MB • 다른 파티션 키를 갖는 레코드 포함 가능 • 순서 보장 안 됨 • 성공 응답 – 샤드 ID 및 시퀀스 번호 • 실패 응답 Kinesis PutRecords API Kinesis에 효율적으로 쓰기 위한 높은 처리량을 제공하는 API
  17. 17. • 실패 응답 예 • 재전송하기 위해, PutRecordsResult 오브젝트 조사 • 실패한 레코드를 확인하기 위해, FailedRecordCount 파라미터 검사 • 그리고, ErrorCode != NULL인 각 putRecordsEntry는 후속 요청에 추가 되어야 함 Kinesis PutRecords API (계속) 실패한 레코드 처리
  18. 18. 소비자 애플리케이션과 Stream API 사이의 중개자 역할 • 페이로드 크기를 증가시키고 처리량을 향상시키기 위해 사용자 레코드를 한데 모음 • 레코드들을 수집하고 다중의 레코드를 한 번의 요청으로 여러 샤드들에 쓰기위해 PutRecords 이용 • 자동 및 구성 가능한 재시도 메커니즘을 이용하여 하나 이상의 스트림들에 쓰기 • 배치 처리된 레코드들을 분리하기 위해 Amazon KCL와 완벽하게 통합 • 생산자(producer) 성능에 대한 가시성을 제공하기 위해 투명하게 CloudWatch 메트릭 제출 • 예제 https://github.com/awslabs/amazon-kinesis-producer/tree/master/java Amazon Kinesis Producer Library
  19. 19. Amazon Kinesis 에이전트 • 사전 구축된 독립형 Java 애플리케이션 - http://docs.aws.amazon.com/streams/latest/dev/writing-­with-­agents.html 더 나은 효율성을 위해 넣기 전에 사전 배치 작업 수행: • Flume,FLuntD 에이전트 - https://github.com/awslabs/aws-­fluent-­plugin-­kinesis 기존 로깅 환경 활용하기 • log4j  appender 옵션 -­ https://github.com/awslabs/kinesis-­log4j-­appender Amazon Kinesis에 데이터 넣기
  20. 20. 스트림 데이터 처리
  21. 21. Get 인터페이스로 데이터 읽기 • 샤드 기반으로 스트림으로부터 데이터 읽기 • 스트림에서 데이터를 찾아오는 getRecords 와 getShardIterator API  제공: • getRecords {Limit,  ShardIterator} • getShardIterator {ShardID,  ShardIteratorType,  StartingSequenceNumber,   StreamName} • 샤드 반복자(iterator)는 샤드내에서 조회될 레코드의 위치를 결정: • AT_SEQUENCE_NUMBER  : 명시된 시퀀스 번호부터 읽기 • AFTER_SEQUENCE_NUMBER : 명시된 시퀀스 번호 이후부터 읽기 • TRIM_HORIZON  : 가장 오래된 레코드부터 읽기 • LATEST  : 가장 최근의 레코드부터 읽기 Amazon Kinesis Streams 데이터 읽기 API
  22. 22. Kinesis Client Library를 이용한 데이터 읽기 및 처리 내결함성, 적어도 한 번 보장, 실시간 처리를 위한 클라이언트 라이브러리 Shard 1 Shard 2 Shard 3 Shard n Shard 4 KCL Worker 1 KCL Worker 2 EC2 Instance KCL Worker 3 KCL Worker 4 EC2 Instance KCL Worker n EC2 Instance Kinesis Kinesis  Client  Library  (KCL) • 각 샤드로부터의 코드를 추상화 시킴으로해서 스트림으로부터의 읽기를 간소화시킴 • 각 샤드마다 자동적으로 Kinesis 작업자(worker) 시작 • 샤드의 수가 변경될 때 Kinesis 작업자의 수도 증가 및 감소 • 스트림내의 작업자 위치를 추적하기 위해 체크포인트 사용 • 작업자들이 실패하는 경우 재시작 샤드 1 샤드 2 샤드 3 샤드 4 샤드 n KCL 작업자 1 KCL 작업자 2 KCL 작업자 3 KCL 작업자 4 KCL 작업자 n
  23. 23. Amazon   EMR Amazon   Kinesis   Streams HDFS 텀블링/고정 윈도우 집계 주기적인 출력 Amazon   Redshift EMR에서 COPY 스트리밍 입력 https://github.com/awslabs/kinesis-­storm-­spout Apache Spark 및 Storm 과 통합 패턴 데이터 스트림 Amazon   Kinesis  Streams
  24. 24. AWS  Lambda와 통합 패턴 스트림 Amazon Kinesis Streams 고객 애플리케이션 Console.log(‘Lo ading function’); Exports.handler = function(…) AWS Lambda Lambda 함수 실행 규칙
  25. 25. AWS SDK LOG4J Flume Fluentd Get* APIs Kinesis Client Library + Connector Library Apache Storm Amazon Elastic MapReduce 보내기 소비하기 AWS Mobile SDK Kinesis Producer Library AWS Lambda Apache Spark Amazon  Kinesis  Streams으로 데이터 넣고 사용하기
  26. 26. 4-6 백만 사용자 일일 활동 (DAU) 10억+ 글로벌 설치 (2010년 이후) 47개 샤드 [4] C4.2XL, [2] M3.Large (ZK), [1] M3.Xlarge (Nimbus) 최대 1.2TB/일 Glu의 실시간 데이터 분석 아키텍처 7억~20억 이벤트/일 600B/이벤트 최대 1.2TB/일 Amazon   Redshift Backfill Aggregates Lightweight  Front-­End Real-­time Aggregates Amazon  Kinesis Storm  Spout Amazon  Kinesis Connectors Aggregates
  27. 27. CDN Real-time Bidding Retargeting Platform Reporting Qubole Real Time AppsKCL Apps Archiver Amazon Kinesis Streams Event Replay Amazon S3 3억+ 이벤트 12 TB/ 주 100개 샤드 42KB / 이벤트 DataXu의 실시간 데이터 분석 아키텍처
  28. 28. 수집 저장 처리 소비 10만+ 장치 설치 15억 이벤트 3TB/일 25개 샤드 2KB / 일 [5] C4.2XL KCL Sonos의 실시간 데이터 분석 아키텍처 Amazon S3 Amazon Kinesis Streams Amazon EMR
  29. 29. Amazon  Elasticsearch Service
  30. 30. Elasticsearch 소개 강력한 실시간 분산 기반 검색 및 분석 엔진 • 2010년에 처음 출시되어 인기 오픈 소스 검색 및 분석 엔진으로 성장 • Apache Lucene 기반으로 수백대까지 분산 클러스터를 구성 가능 • 유연한 스키마를 가진 JSON 데이터 스토어 • 개발자 친화적 RESTful API 제공
  31. 31. Elasticsearch 특징 강력한 실시간 분산 기반 검색 및 분석 엔진: • 2010년에 처음 출시되어 인기 오픈 소스 검색 및 분석 엔진으로 성장 • Apache Lucene 기반으로 수백대까지 분산 클러스터를 구성 가능 • 유연한 스키마를 가진 JSON 데이터 스토어 • 개발자 친화적 RESTful API 제공 로그 수집기인 Logstash와 시각화 도구인 Kibana를 연결하여, ELK 스택을 통해 강력한 실시간 데이터 분석이 가능!
  32. 32. Amazon  Elasticsearch Service는 ES 클러스터를 클라우드에 설치, 운영 및 확장을 용이하고 하는 관리형 서비스로 AWS 여러 서비스와 연계하기에 편리합니다! Amazon Elasticsearch Service란?
  33. 33. 손쉽게 클러스터 설정 및 관리 가능 ELK 스택 지원 AWS IAM을 통한 사용자 인증 및 CloudWatch를 통한 모니터링 다른 AWS 자원과 손쉽게 통합 가능 Amazon Elasticsearch Service의 주요 이점
  34. 34. Amazon Elasticsearch 도메인 아키텍처
  35. 35. Amazon Elasticsearch 도메인 아키텍처 개요 Amazon  Route   53 Elastic  Load Balancing IAM CloudWatch Elasticsearch API CloudTrail 노드 관리 – 마스터노드+데이터노드 단일 엔드포인트, REST  API IAM 통합 모니터링 – CloudWatch/CloudTrail
  36. 36. Shard 1 Shard 2 { { Id Id Id . . . 도큐먼트 { 인덱스 • 도큐먼트(document): 검색 단위 문서 • ID: 문서 고유 식별자. 문서당 하나 • 샤드(shard): 인덱스의 한 파트를 갖는 Lucene 인스턴스 • 인덱스(index): 검색 데이터 집합 Amazon Elasticsearch 도메인 내부 용어 샤드 1 샤드 2
  37. 37. • 인덱스 1 • 샤드 1 • 샤드 2 • 샤드 3 • 인덱스 2 • 샤드 1 • 샤드 2 • 샤드 3 Amazon  Elasticsearch 클러스터 1 2 3 1 2 3 1 2 3 1 2 3 주 (primary) 복제 (replica) 1 3 3 1 인스턴스 1 2 1 1 2 인스턴스 2 3 2 2 3 인스턴스 3 Amazon Elasticsearch 도메인 클러스터
  38. 38. Amazon Elasticsearch 도메인 접근 제어 사용자 기반 권한 관리 { "Version":  "2012-­10-­17", "Statement":  [ { "Sid":  "", "Effect":  "Allow", "Principal":  { "AWS":  "arn:aws:iam:123456789012:user/susan" }, "Action":  [  "es:ESHttpGet",  "es:ESHttpPut",  "es:ESHttpPost",   "es:CreateElasticsearchDomain", "es:ListDomainNames"  ], "Resource":   "arn:aws:es:ap-­northeast-­2:###:domain/logs/<index>/*" }  ]  } HTTP 메소드에 따른 허용/거부 및 정책 설정 인덱스에 대한 세부적인 권한 관리
  39. 39. Amazon Elasticsearch 도메인 접근 제어 IP 주소 기반 접근 제어 가능 { "Version":  "2012-­10-­17", "Statement":  [ { "Sid":  "", "Effect":  "Allow", "Principal":  { "AWS":  "*" }, "Action":  [  "es:ESHttpGet",  "es:ESHttpPut",  "es:ESHttpPost", "es:CreateElasticsearchDomain", "es:ListDomainNames"  ], "Resource":   "arn:aws:es:ap-­northeast-­2:###:domain/logs/<index>/*" "Condition": "IpAddress":  { "aws:SourceIp":  [  "xx.xx.xx.xx/yy"  ] }  }  ]  }
  40. 40. 시각화 도구 Kibana 기본 내장 Logstash 인덱서 Amazon Elasticsearch Service 애플리케이션 노드/ Logstash 포워더 API 엔드포인트 Kibana URL • Endpoint  search-­domain-­id.ap-­northeast-­2.es.amazonaws.com • Kibana search-­domain-­id.ap-­northeast-­2.es.mazonaws.com/_plungin/kibana/
  41. 41. Kibana UI
  42. 42. 데이터 로딩
  43. 43. Elasticsearch API로 직접 접근 $  curl  -­XPUT  https://<endpoint>/blog  -­d  '{ "settings"  :  {  "number_of_shards"  :  3,  "number_of_replicas"  :  1  }  }' $  curl  -­XPOST  http://<endpoint>/blog/post/1   -­d  '{ "author":"jon handler", "title":"Amazon ES  Launch"  }' $  curl  -­XPOST  https://<endpoint>/blog/post/_bulk   -­d  ' {  "index"  :  {  "_index"  :  "blog",  "_type"  :  "post",  "_id"  :  "2"}} {"title":"Amazon ES  for  search",  "author":  "pravin pillai"}, {  "index"  :  {  "_index":"blog",  "_type":"post",  "_id":"3"  }  } {  "title":"Analytics too",  "author":  "vivek sriram"}' $  curl  -­XGET  http://<endpoint>/_search?q=ES {"took":16,"timed_out":false,"_shards":{"total":3,"successful":3,"failed":0},"hits":{"total":2,"max_score":0.13424811 ,"hits":[{"_index":"blog","_type":"post","_id":"1","_score":0.13424811,"_source":{"author":"jon handler",  "title":"Amazon ES  Launch"  }},{"_index":"blog","_type":"post","_id":"2","_score":0.11506981,"_source":{"title":"Amazon ES  for  search",   "author":  "pravin pillai"},}]}}
  44. 44. Logstash를 통한 데이터 로딩 애플리케이션 노드/ Logstash 포워더 Logstash 인덱서 Amazon   Elasticsearch   Service https://github.com/awslabs/logstash-­output-­amazon_es • Logstash는 다양한 시스템에서 발생하는 로그나 이벤트를 처리할 수 있도록 해주는 데이터 파이프라인 • Elasticsearch 도메인으로 데이터를 쉽게 보낼 수 있도록 함 • Github에 Amazon Elasticsearch Service를 위한 Logstash 출력 플러그-인 제공
  45. 45. AWS  Lambda를 통한 데이터 전달 Amazon   Lambda Amazon   Elasticsearch   Service Amazon  S3 DynamoDB Amazon   Kinesis   Streams https://github.com/awslabs/amazon-­elasticsearch-­lambda-­samples • AWS Lambda는 이벤트에 응답하여 코드를 실행하고 자동으로 기본 컴퓨팅 리소스를 관리하는 서버 없는 컴퓨팅 서비스 • Lambda를 이용해서 AWS 다양한 서비스로부터 데이터를 Elasticsearch 도메인으로 쉽게 전달 • Java, Node.js, 및 python 언어 지원
  46. 46. CloudWatch Logs를 통한 데이터 스트리밍 CloudWatch Logs Amazon   Elasticsearch   Service • Amazon CloudWatch Logs를 통해 시스템, 애플리케이션 및 커스텀 로그를 통합하고 모니터링 가능 • AWS의 S3, ELB, VPC Flow logs, Config 및 CloudTail 등과 같은 다양한 서비스들도 CloudWatch Logs에 통합됨 • Amzon CloudWatch Logs에 통합된 로그 데이터를 쉽게 ES 도메인으로 스트리밍 할 수 있는 기능 제공
  47. 47. 13시 ~ 18시 Amazon Elasticsearch Service 실시간 분석 Amazon SNS 푸시 메시지 전송 13시/18시 이벤트 개시/종료 -> 푸시 메시지 전송 -> 데이터 수집 -> 처리 -> 실시간 분석 Lambda Scheduling 매일 13시/18시 이벤트 개시/종료 Lambda 데이터 처리 매일 12시 30분 게임 서버 확장 Lambda Scheduling 12시 30분 Kinesis 인게임 이벤트 시스템 아키텍처 데이터 수집
  48. 48. 왜? AWS 분석 서비스 쉬운 관리 탄력성 다양한 AWS 서비스와 통합 낮은 가격
  49. 49. 감사합니다

×