Successfully reported this slideshow.

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

23

Share

1 of 35
1 of 35

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

23

Share

Download to read offline

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

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

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

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

×