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.

20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기

1,871 views

Published on

20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기

Published in: Software

20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기

  1. 1. RDS Aurora에 40억건 데이터 입력하기 26. Jul. 2018 hello@hbsmith.io (AWS KRUG - architecture 소모임) S3, EMR, Aurora 그리고 자동화 1
  2. 2. 발표자 소개 • 한종원 • Python과 Cloud Infra, Lean/Agile 방법론 그리고 애플의 제품을 사랑. • 2012년 석사 학위를 마치고, startup을 시작 (이때부터 AWS를 production level에서 사용) • '의미가 있는 일을, 올바르게 하고 싶다.' • 경력 • (현) DevOps 전문 스타트업 ‘HB Smith’ 대표 • 택시 O2O 서비스 스타트업 ‘Kanizsa Lab’의 backend server / infra devops 담당 • Cloud computing 전문 스타트업 'A2 company' co-founder (‘KINX’에 인수합병) • NEXON 'MapleStory 국내 Live Team'에서 DBA, SA로 근무 (산업 기능 요원) 2 https://www.linkedin.com/in/addnull/ https://hbsmith.io “Startup 경력 = AWS 사용 기간”
  3. 3. Contents • 요구사항 정리 • Version 0: S3 -> Aurora (bulk insert) • Version 1: S3 -> Aurora (scale down and HA) • Version 2: S3 -> EMR -> S3 -> Aurora • Wrap Up 3
  4. 4. 요구사항 정리 4
  5. 5. 요구사항 정리 • “40억건 data를 DB에 넣어주세요.” • “단, 일주일마다 한 번씩 최대한 빨리 넣어주세요.” • “원본 data는 S3에 있습니다.” 5
  6. 6. 요구사항 정리 • data 1건의 구성 • 원본 6개 field • 마지막 2개의 field 를 조합해서 새로운 값을 계산해서 넣어야함 6 018c32d8 0.000457 0.000178 3 3.3529 1.0002 018c32d8 0.000457 0.000178 3 3.3529 1.0002 A3WFA
  7. 7. Version 0: S3 -> Aurora (bulk insert) 7
  8. 8. Version 0: S3 -> Aurora (bulk insert) • 구글링, 구글링! • 1.1M writes/sec over 3B Items with 50 nodes (n1-standard-16)
 1M writes/sec over 100 million Items with 40 nodes (n1-standard-8) • 1시간 안에 완료 가능?!?! 8 https://blog.couchbase.com/couchbase-server-hits-1m- writes-with-3b-items-with-50-nodes-on-google-cloud/
  9. 9. Version 0: S3 -> Aurora (bulk insert) • 문제점 • AWS 에서는 Couchbase를 직접 구성해야함. • Couchbase 잘모름. 9
  10. 10. Version 0: S3 -> Aurora (bulk insert) • Couchbase 를 선택하면,
 지속적으로 유지보수 이슈가
 생길 것 같은 슬픈 예감.. 10
  11. 11. Version 0: S3 -> Aurora (bulk insert) • Ground rule • 내가 잘 알고 있고, 잘 아는 사람이 많은 기술을 선택
 -> 즉, MySQL 같은 것들. • AWS에서 기본으로 지원해주는 full-managed service
 -> 그래서 결론은 RDS Aurora 11
  12. 12. Version 0: S3 -> Aurora (bulk insert) • RDS Aurora는 S3로부터 bulk insert를 지원 • 즉, S3에 있는 delimiter separated text file을 (예: csv file)
 RDB table로 바로 입력 가능함 12 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/ AuroraMySQL.Integrating.LoadFromS3.html
  13. 13. Version 0: S3 -> Aurora (bulk insert) • [TIP] bulk insert의 속도를 빠르게 하기 위해서 index는 나중에 생성 13
  14. 14. Version 0: S3 -> Aurora (bulk insert) 14 Aurora 최고 사양 ‘db.r4.16xlarge’으로 실행
  15. 15. Version 0: S3 -> Aurora (bulk insert) • 실행 결과.. • bulk insert에는 8시간
 create index는 20시간 정도 걸림 (음?!?!) 15
  16. 16. Version 0: S3 -> Aurora (bulk insert) • bulk insert와 create index를 10개로 나눠서 동시 실행
 (EC2 하나에서 multi process 로 실행해도 무방) 16 …
  17. 17. Version 0: S3 -> Aurora (bulk insert) • 실행 결과 • bulk insert: 3시간
 create index: 5시간 17 bulk insert가 최대 초당 4M
  18. 18. Version 1: S3 -> Aurora (scale down and HA) 18
  19. 19. Version 1: S3 -> Aurora (scale down and HA) • “HA(이중화) 해야할 것 같아요.” • “그리고 db.r4.16xlarge 너무 비싸요.” 19
  20. 20. Version 1: S3 -> Aurora (scale down and HA) • bulk insert 가 완료되면 ‘db.r4.xlarge’로 scale down 하기로 함 • 앞서 과정에서 동시에 실행되는 10개의 bulk insert 가 모두 끝날 때까지 polling 20
  21. 21. Version 1: S3 -> Aurora (scale down and HA) • 동시에 실행되는 10개의 bulk insert 가 모두 끝나면
 scale down 하고 완료되면 HA • [TIP] Aurora는 기존의 RDS 와 달리
 ‘create_db_instance_read_replica’가 아니라
 ‘create_db_instance’를 써야함. 21
  22. 22. Version 2: S3 -> EMR -> S3 -> Aurora 22
  23. 23. Version 2: S3 -> EMR -> S3 -> Aurora • “마지막 2개의 field 를 조합해서
 새로운 값을 계산해서 넣어주세요” 23 018c32d8 0.000457 0.000178 3 3.3529 1.0002 A3WFA 018c32d8 0.000457 0.000178 3 3.3529 1.0002
  24. 24. Version 2: S3 -> EMR -> S3 -> Aurora • 복잡한 산술 연산을 RDB 에서 하는 건 부적절 • ‘음... S3 에 있는 원본 data를 bulk insert 하기 전에 전처리가 가능할까?’ 24
  25. 25. Version 2: S3 -> EMR -> S3 -> Aurora • EMR steps는 S3에 있는 text file 대상으로 map reduce가 가능
 (결과는 다시 S3에 text file로 저장) 25 https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html
  26. 26. Version 2: S3 -> EMR -> S3 -> Aurora • mapper : 딱히 할 일이 없음 26
  27. 27. Version 2: S3 -> EMR -> S3 -> Aurora • reducer: 실제 연산 수행
 
 -> 여기서 앞서 말한 10개 bulk insert를
 위해서 결과를 10개의 text file로
 나눠서 저장 27
  28. 28. Version 2: S3 -> EMR -> S3 -> Aurora • 전체 architecture 요약 28
  29. 29. Wrap Up 29
  30. 30. Wrap Up • 요구사항 • “40억건 data를 DB에 넣어주세요.” • “단, 일주일마다 한 번씩 최대한 빨리 넣어주세요.” • “원본 data는 S3에 있습니다.” • “HA(이중화) 해야할 것 같아요.” • “그리고 db.r4.16xlarge 너무 비싸요.” • “마지막 2개의 field 를 조합해서 새로운 값을 계산해서 넣어주세요” 30
  31. 31. Wrap Up • Ground rule • 내가 잘 알고 있고, 잘 아는 사람이 많은 기술을 선택 • AWS에서 기본으로 지원해주는 full-managed service 31 그래서 S3, EMR, Aurora
  32. 32. Wrap Up 32 LEGO 블럭처럼 여러 개의 AWS service들을 조합해서 나만의 Infra 구축
  33. 33. Wrap Up 33 전 과정을 code로 표현 가능. 즉 cron job 형태 자동화에 용이
  34. 34. Wrap Up • 결론: “AWS는 사랑입니다.” 34
  35. 35. 감사합니다 jongwon.han@hbsmith.io 010-9166-6855 35

×