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.

S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집

328 views

Published on

AWS Community Day 2018 re:Invent 특집

김명보 - 샌드버드

Published in: Software
  • Be the first to comment

S3 Select를 통한 빠른 데이터 분석하기 - 트랙2, Community Day 2018 re:Invent 특집

  1. 1. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 김명보, SendBird S3 Select를 이용한 데이터 분석
  2. 2. Speaker • 김명보 • SendBird Infrastructure Engineer • 서버팀에서 잡다한 것들을 개발하는 중 • 회사에서 AWS에 돈을 쓰는 것을 담당
  3. 3. SendBird • 모바일 앱과 웹사이트를 위한 메세징 SDK / Chat API • 소규모 그룹 채팅, 대규모 동시 접속 채팅 제공
  4. 4. 발표 순서 • S3/Glacier Select 소개 • SendBird에서는 어떻게 데이터 분석을 하고 있나
  5. 5. S3/Glacier Select
  6. 6. S3 Select • S3에 저장된 파일 전체가 아니라 필요한 일부 데이터만 읽어오는 기능 • SQL-like 문법 • 데이터 분석 용도로 유용함 • S3 를 마치 간단한 Database처럼 사용할 수 있음
  7. 7. S3 Select
  8. 8. S3 Select • JSON/CSV 포맷만 지원함 • 압축되지 않은 파일과 GZIP 압축 지원 • 비용은 Scan 비용 + Data retrieval 비용 • Scan하다가 원하는 데이터들을 다 찾으면 바로 중단함으로써 Scan 비용을 절약할 수 있음
  9. 9. S3 Select – SQL • Select s._1 from S3Object as s • Select s.Id, s.FirstName, s.SSN from S3Object • Select count(*) from S3Object where s._1 < 1 • Group by, order by 는 지원하지 않음
  10. 10. S3 Select • Preview stage • 앞으로 Athena, Redshift Spectrum, EMR 등에 적용될 예정임 • Boto3/Presto-cli 등에 아직 반영되지 않음
  11. 11. Athena Amazon AthenaAmazon S3 • 빠른 데이터 전송, 더 적은 Athena Query 비용 소모 등이 기대됨
  12. 12. Glacier Select • S3 Select와 유사하게 Glacier에 csv로 저장된 데이터를 선택적으로 불러옴 • 요청한 데이터가 지정된 S3 location 에 몇 분 ~ 몇 시간 후에 적재됨 • Expedited, Standard, Bulk 모두 가능하고, 파일 전체를 restore 하는 것보다 요금이 더 저렴함
  13. 13. Glacier Select • 현재 Glacier 가 있는 모든 Region 에서 GA • Glacier에 있는 데이터중에 일부만 필요할 경우 유용
  14. 14. Demo…. • S3 Select + Athena로 복잡한 Query의 시간을 비교하는 Demo를 보여드리고 싶었으나…. • Athena에서 아직 지원하지 않습니다 ㅠ • 그 외에 가능한 Demo는 간단한 Select vs 과거 방식 시간 비교 정도
  15. 15. Data Analysis in SendBird
  16. 16. Data Analysis - Load Test • SendBird SDK를 쓰고자 하는 고객사 중 한 곳이 대용량 트래픽 환경 하에서의 Load test를 요구함 • 대량의 동시 접속자가 여러 개의 채널에 접속해 있는 상태에서 1000+ msg write / sec 를 달성해야 함 • 메세지 전송의 Mean, Avg, 95%, 99% Latency 를 측정해야 함 – 모든 딜레이를 수집해야 측정 가능
  17. 17. Data Analysis - Load Test • 개발 시간이 촉박한 상태 • 단일 노드로 데이터를 수집하거나 각 노드에서 미리 Summarize 할 수가 없음 (99% Delay 측정을 위해서 때문에) • 이미 사용할 수 있는 node.js Load-tester는 있었음
  18. 18. Data Analysis - Load Test Amazon RDS API Server TCP Server Load Generator Load Generator Load Generator Load Generator Load Generator Load Generator …
  19. 19. Data Analysis - Load Test • Load Generator 에서 Kinesis Agent로 log를 모아서 S3에 쌓고, 바로 Athena로 분석하는 시스템을 구성하기로 함 • 로그를 모으는 기능, 적재하는 기능, Query 하는 기능이 모두 ready-to-use 상태임
  20. 20. Data Analysis - Load Test • AWS-labs의 AWS-Kinesis-Agent를 사용해서 로그를 수집하여 Kinesis-Firehose로 전송 • 설치/설정이 쉬움
  21. 21. Data Analysis - Load Test Amazon RDS API Server TCP Server Load Generator Load Generator Load Generator … Amazon Kinesis Firehose Load Generator Load Generator Load Generator Amazon S3 Amazon Athena
  22. 22. Data Analysis - Load Test • 기존 Load test application 을 거의 고치지 않고 하루 안에 Log 분석 시스템 구축 성공 • 메세지 전송 Delay, 성공률, 95%, 99% Delay 등을 빠르게 측정할 수 있었음
  23. 23. Data Analysis – DDos 공격 방어 • 다양한 산업 분야 고객사들의 트래픽을 처리하기 때문에 여러 가지 종류의 Abusing/해킹 시도가 있을 수 있음 • 특정 유저/IP에서 대량의 요청이 들어올 경우 임시로 해당 유저/IP 를 block 할 필요가 생김 • WAF + ALB + Athena를 통해서 DDoS 공격을 방어하는 시스템을 구성하기로 결정
  24. 24. WAF – Web Application Firewall • IP / String match / Region Match / Size Constraint / SQL injection 을 기반으로 요청을 Throttling / 제한 할 수 있음 • ALB/CloudFront에 연동해서 사용할 수 있음 AWS WAF
  25. 25. Data Analysis – DDos 공격 방어 • 기존의 Redis를 이용한 Rate Limit 시스템이 존재함 • 하지만 내부 시스템이 DDoS 트래픽에 영향을 받는 구조 • Load Balancer에서 대응 가능한 시스템으로 변경이 필요 • 로그를 수집하여 주기적으로 Athena Query를 통해서 의심스러운 IP/유저를 Detect 후 WAF rule에 등록
  26. 26. Data Analysis – DDoS 공격 방어 Amazon RDS API Server TCP Server Application Load Balancer Amazon Route 53 users Hacker Amazon ElastiCache
  27. 27. Data Analysis – DDoS 공격 방어 API Server TCP Server Application Load Balancer Amazon Route 53 users Hacker AWS WAF Amazon Athena Amazon S3 Amazon Kinesis
  28. 28. Data Analysis – Date Partitioning • Kinesis Firehose를 통해서 모은 데이터는 S3의 정해진 경로 밑에 /2018/01/20/16/{file_name}.gz 의 형태로 수집됨 • 하지만 Athena에서 year, month, day 로 일부 데이터만 Query 하지 못하고 전체 파일을 검색하게 되서 비효율적임
  29. 29. Data Analysis – Date Partitioning • Athena로 로그 파일을 분석을 위해서 사용할 때 대부분 지난 24시간, 지난 30일과 같이 제한된 시간에 대해서만 분석을 하게 됨 • Daily Data Partitioning이 필요함 • 이를 위해서는 file의 경로가 ‘/year=2018/month=01/day=20’ 의 형태가 되어야 함
  30. 30. Data Analysis – Date Partitioning Amazon Athena Amazon S3 Amazon Kinesis • 또한 Kinesis로 업로드 되는 로그 중에 JSON 형태를 완성시키지 못하고 깨지는 로그가 존재 • JSON verification과 daily partitioning 하는 Lambda function을 Kinesis / S3 event에 추가함 AWS Lambda (JSON Verification) AWS Lambda (Daily Partition) Amazon S3
  31. 31. We’re hiring • 채팅에 관심 있으신 분 • AWS에 관심 있으신 분 • python/Django/gevent 에 관심 있으신 분 • 투자 받은 170억을 어디에 탕진할지 궁금하신 분 • talent@sendbird.com
  32. 32. #AWSCommunityDay Q&A

×