aws innovate: best practices for migrating to amazon dynamodb - sangpil kim
TRANSCRIPT
Amazon DynamoDB로의이전을위한모범사례소개
김상필, 솔루션즈아키텍트, 한국아마존웹서비스
Amazon DynamoDB 개요
• NoSQL 데이터베이스
• 완전관리형서비스
• 대용량, 뛰어난확장성
• 10ms 미만의빠르고일관된성능
• 유연한데이터모델 - 문서및키-값스토어
• 세분화된접근제어
Amazon
DynamoDB
목차
• AWS 관리형데이터베이스서비스
• 데이터저장소선택시고려사항
• 1단계 : 검토
• 2단계 : 테이블설계
• 3단계 : 데이터마이그레이션
• 4단계 : 마이그레이션이후
• 주요고려사항
AWS 관리형 데이터베이스 서비스
Amazon DynamoDB
• NoSQL
데이터베이스
• 완전관리형
• 10ms 미만응답속도
• 대용량, 뛰어난확장성
• 낮은비용
Amazon RDS
• 관계형데이터베이스
• 완전관리형
• 예측가능한성능
• 빠르고손쉬운확장
• 낮은비용, 사용량에따른과금
Amazon Elasticache
• 인-메모리키-값저장소
• 고성능
• Memcached 및 Redis
• 완전관리형
Amazon Redshift
• 관계형데이터웨어하우스
• 대용량병렬처리
• 페타-바이트단위
• 완전관리형
• HDD 및 SSD 플랫폼
Database + Search Tier
안티 패턴 – 하나의 도구를 모든 작업에사용
Data TierSearch
Amazon
Elasticsearch
Service
Amazon
CloudSearch
Cache
Redis
Memcached
SQL
Amazon Aurora
MySQL
MariaDB
PostgreSQL
Oracle
SQL Server
NoSQL
Cassandra
Amazon DynamoDB
HBase
MongoDB
모범 사례 – 작업 성격에 맞는 적합한도구 사용
Database + Search Tier
데이터저장소선택시고려사항
• 데이터구조 : 고정된스키마 / JSON / 키-값
• 억세스방식 : 데이터를억세스하고자하는방식으로저장
• 데이터억세스특징 : Hot / Warm / Cold
• 비용: 적합한비용
데이터구조및억세스방식
억세스방식 저장소
Put/Get (키, 값) 캐시, NoSQL
단순한관계 → 1:N, M:N NoSQL
테이블조인, 트랜잭션, SQL SQL
Faceting, 검색 검색
데이터구조 저장소
고정된스키마 SQL, NoSQL
스키마없음(JSON) NoSQL, 검색
키-값저장소 캐시, NoSQL
Hot Warm Cold
규모 MB–GB GB–TB PB
아이템크기 B–KB KB–MB KB–TB
응답속도 ms ms, sec min, hrs
내구성 Low–High High Very High
요청비율 Very High High Low
비용/GB $$-$ $-¢¢ ¢
Hot Data Warm Data Cold Data
데이터억세스특성 : Hot / Warm / Cold
CacheSQL
요청비율높음 낮음
비용/GB높음 낮음
응답속도낮음 높음
데이터규모낮음 높음
Glacier
구조화 NoSQL
Hot Data Warm Data Cold Data
낮음
높음
Search
적합한데이터저장소선택
AmazonElastiCache
AmazonDynamoDB
AmazonAurora
AmazonElasticsearch
Amazon EMR (HDFS)
Amazon S3
AmazonGlacier
평균응답속도 ms ms ms, sec ms,sec sec,min,hrs ms,sec,min(~ size)
hrs
데이터규모 GB GB–TBs(no limit)
GB–TB(64 TB Max)
GB–TB GB–PB(~nodes)
MB–PB(no limit)
GB–PB(no limit)
아이템크기 B-KB KB(400 KB max)
KB(64 KB)
KB(1 MB max)
MB-GB KB-GB(5 TB max)
GB(40 TB max)
요청비율 높음 -매우높음
매우높음(no limit)
높음 높음 낮음– 매우높음 낮음 –매우높음(no limit)
매우낮음
스토리지비용GB/월
$$ ¢¢ ¢¢ ¢¢ ¢ ¢ ¢/10
내구성 낮음 - 보통 매우높음 매우높음 높음 높음 매우높음 매우높음
Hot Data Warm Data Cold Data
적합한데이터저장소선택
DynamoDB - 테이블, 항목, 속성
테이블(Table)
항목(Item)
속성 (Attribute, 이름/값쌍또는 JSON 문서)
DynamoDB - 기본키 (파티션키)
파티션키 (Partition Key)데이터의분산 / 데이터모델단순 /
비정렬 / 동일값조회
기본키 (파티션키및정렬키)
파티션키
정렬키 (Sort Key)데이터모델복합/정렬 / 범위값조회
1단계: 검토 –성능 / 확장성 / 가용성 / 보안
• 모든규모에서낮은응답속도(Single digit milli-second) 제공
• 데이터규모및요청수에따른성능영향없음
쓰기디스크영구저장 (커스텀 SSD)
읽기강한또는최종일관성응답속도저하없음
1단계: 검토 –성능 / 확장성 / 가용성 / 보안
• 각테이블의읽기쓰기대역폭용량을지정
- RCU (Read Capacity Units) : 4 KB per second
- WCU (Write Capacity Units) : 1 KB per second
• 필요에따라대역폭용량을제한없이확장및축소
• 스토리지용량제한없이데이터저장에따라확장
• DynamoDB가모든내부작업을관리
1단계: 검토 – DynamoDB 파티션
00 55 A954 AA FF00 FF
Id = 1Name = Jim
Hash (1) = 7B
Id = 2Name = AndyDept = Engg
Hash (2) = 48
Id = 3Name = KimDept = Ops
Hash (3) = CD
Key Space
• DynamoDB 테이블은확장성을위하여내부적으로다수의파티션관리
• 스토리지용량및쓰루풋증가에따라파티션증가
• 파티션키는해시값에따라파티션간아이템분산에사용
1단계: 검토 – DynamoDB 파티션계산
• 초기파티션수계산공식 :
• 예 : 10,000 읽기용량단위와 5,000 쓰기용량단위
• 이후, 스토리지용량및쓰루풋증가에따라파티션자동증가
( readCapacityUnits / 3,000 ) + ( writeCapacityUnits / 1,000 ) = initialPartitions (rounded up)
( 10,000 / 3,000 ) + ( 5,000 / 1,000 ) = 9 (8.33.. rounded up)
1단계: 검토 –성능 / 확장성 / 가용성 / 보안
• 높은가용성과안정성을실현하기위해 Amazon DynamoDB는 AWS
리전의세개시설에걸쳐데이터를동기적으로복제
1단계: 검토 –성능 / 확장성 / 가용성 / 보안
• DynamoDB 자원에대한개별사용자접근제어
• 항목및속성수준까지
• AWS IAM(Identity and Access Management)과통합
• 중앙화된관리
• 3rd 파티인증과통합을위한 Web Identity Federation
1단계: 검토 –비용 (고객사례)
기존 – Apache Cassandra
• 스토리지• Total = Used 23 TB / Physical 51.2TB
(800GB * 8 instance store volumes * 8 i2.8xl instances)
• I/O• 4,350 reads/second (<1KB item size)• 1,440 writes/second (<1KB item size)
• 비용• 인스턴스 $44K/월 (/wo RI)
향후 – Amazon DynamoDB
• 스토리지• Indexed data storage capacity =
8TB ( = 23TB / 3 replication factor)
• I/O• 4.3K RCU, 1.4K WCU
(Item size < 1KB, strong consistency)
• 비용• DynamoDB $3.8K/월 (/wo RC)
1단계: 검토 –비용 (Lessons Learned)
• 인스턴스기반의 NoSQL• 3 복제및운영(Compaction, Backup, Temp 등)에따른스토리지용량소요
• 데이터증가에따라인스턴스추가
• 인스턴스최적화여지
• DynamoDB• Provisioned Throughput의 %사용률고려 (100% 사용율어려움)
• Item 크기에따른 WCU / RCU 소모고려
• Eventual Consistency Read 시 Throughput 50% 소모
• Reserved Capacity 통한비용절감고려
2단계: 테이블설계
• 모범사례 :
http://docs.aws.amazon.com/amazondynamodb/latest/developergui
de/GuidelinesForTables.html
• 테이블의프로비저닝된처리량을최적으로사용하려면다음
요소가중요 :
• 기본키선택
• 개별아이템의워크로드패턴
• 테이블에대해프로비저닝한전체요청처리량을달성하려면
워크로드가파티션키값에고르게분산되도록유지
2단계: 테이블설계 –기본키선택
• 파티션키의고유한값의갯수가많은속성을파티션키로선택• 좋은예 : 사용자 ID, 애플리케이션의사용자가많은경우
• 나쁜예 : 상태코드, 가능한상태코드가몇개없는경우
00:0 FF:∞
Hash (2) = 48
ID = 2Order# = 10Item = Pen
ID = 2Order# = 11Item = Shoes
ID = 1Order# = 10Item = Toy
ID = 1Order# = 11Item = Boots
Hash (1) = 7B
ID = 3Order# = 10Item = Book
ID = 3Order# = 11Item = Paper
Hash (3) = CD
55 A9:∞54:∞ AA
Partition 1 Partition 2 Partition 3
Id = 1Order# = 10Item = Toy
Hash (1) = 7B
Id = 2Order# = 10Item = Pen
Hash (2) = 48
Id = 3Order# = 10Item = Book
Hash (3) = CD
Key Space
2단계: 테이블설계 –기본키선택
• 파티션키의고유한값의갯수가많지않은경우
• 팁1 : 복합키(Composite Key) 만들기
Composite key : 사용자아이디 + 어플리케이션아이디 + 레코드아이디
Partition key Sort key Attributes…
…
…
…
Num (user accounts) = ~20MRandom number guid /w 10 digits
Email / contacts / messageUnique values per service
Unique values/w >10 digits
2단계: 테이블설계 –기본키선택
• 팁2 : 임의(Random) 또는계산된값(Calculated Value) 더하여쓰기분산
• Write Sharding 또는 Scatter & Gather 아키텍처
Partition key : 2014-07-09.N(여기서 N은 1 -200)
Partition key Sort key Attributes…
…
…
…
날짜는값의갯수는많으나
특정파티션에워크로드집중
임의또는계산된값을추가복수파티션에워크로드분산
3단계: 데이터마이그레이션
• DynamoDB 내보내기(Export) 및가져오기(Import) 기능활용
• 가져오기성능향상 : EMR 클러스터인스턴스타입및크기,DynamoDB Provisioned WCU 및 write throughput ratio
DynamoDB
TableAmazon S3
bucket
Amazon EMR
Cluster
AWS Data
Pipeline
RDS
instance
Generic
Database
NoSQL
Database
JSON
3. Load Files 4. Write Items
2. Launch Cluster
1. Export to JSON
DynamoDB 가져오기(Import)
3단계: 데이터마이그레이션
• 온라인마이그레이션을위한아키텍처예:
user storage path
User A <path_to_cassandra>
User B <path_to_dynamodb>
Cassandra
Cluster DynamoDB
App servers
Mobile
ClientsStorage
path db
User
AUser
B
Normal data flow
for migrated
users
Normal data flow
for not migrated
users
Migration servers
Migration data
flow
3단계: 데이터마이그레이션
• 파티션키의설계또는파티션간쓰기부하분산이잘못된경우
• Provisioned Throuput 대비 Consumed Throughput이낮으며,Throttling이발생
Provisioned Write Capacity
Average Consumed Write Capacity
Throttled Write Requests
3단계: 데이터마이그레이션
UerID MessageID
U1 1
U1 2
U1 …
U1 … 최대 100
U2 1
U2 2
U2 …
U2 … 최대 100
• 데이터업로드중파티션간쓰기부하분산
파티션키 정렬키쓰기시퀀스
- 워크로드가분산되지않은시퀀스 -
UerID MessageID
U1 1
U2 1
U3 1
… …
U1 2
U2 2
U3 2
… …
파티션키 정렬키
쓰기
시퀀스
- 워크로드가분산된시퀀스 -
4단계: 마이그레이션이후
Partition #1
Partition #2
Partition #3
…
Partition #1,000
Partition #1
Partition #2
Partition #3
…
Partition #1,000
Partition #1
Create table
Migration After
Increase WCUto 1,000K
Decrease WCUto 100K
1,000 WCUper partition
X1,000 partitions
100 WCUper partition
X1,000 partitions
1/10 per partitionWCU
• 대용량쓰루풋 Provisioned 후, 마이그레이션이후 Normal 쓰루풋감소
• 파티션은증가하나감소하지않음에따라파티션당쓰루풋감소- Diluted Partition 피할것
주요고려사항
데이터저장소선택시고려사항1. 데이터구조, 억세스방식, 데이터억세스특징을고려하여 DynamoDB가
적합한데이터저장소인지검토
1단계 : 검토1. 성능 : DynamoDB는모든규모에서한자리수 ms의성능제공
2. 확장성 : 파티션확장을통하여무제한의스토리지공간및대역폭성능제공
3. 가용성 : 리전내 3개설비에데이터동기화저장
4. 보안 : Fine Grained Access Control
주요고려사항
1단계 : 검토 (계속)5. 비용
• 기존 NoSQL은복제및인스턴스운영, 데이터증가에따라인스턴스최적화여지있음
• Provisioned Throughput의%사용률고려
• Item 크기에따른 WCU / RCU 소모고려
• Eventual Consistency Read 시 Throughput 50% 소모
• Reserved Capacity 통한비용절감고려 - 1년계약의경우최대 53%, 3년계약의경우최대 76%까지절감
6. 벤치마크• 벤치마크툴이부하를잘분산하여요청하는지확인필요
(예: YCSB의 request distribution을 zipfian -> uniform)
주요고려사항
2단계 : 테이블설계1. 파티션키의고유한값의갯수가많은속성을파티션키로선택
2. 복합키(Composite Key) 만들기
3. 임의(Random) 또는계산된값(Calculated Value) 더하여쓰기분산하는 Write Sharding 또는 Scatter & Gather 아키텍처고려
4. 테이블에대해프로비저닝한전체요청처리량을달성하려면워크로드가파티션키값에고르게분산되도록유지
3단계 : 데이터마이그레이션1. DynamoDB 가져오기(Import) 기능활용
주요고려사항
3단계 : 데이터마이그레이션 (계속)2. 가져오기성능향상을위하여 EMR 클러스터인스턴스타입및크기,
DynamoDB write throughput ratio 및 Provisioned WCU 조정
3. 온라인마이그레이션을위하여는 Storage path DB를관리하는전체어플리케이션아키텍처고려
4. 데이터업로드중파티션간쓰기부하분산하는쓰기시퀀스고려
4단계 : 마이그레이션이후1. Diluted Partition 피할것
Online Labs & Training
Gain confidence and hands-on experience with AWS.
Watch free Instructional Videos and explore Self-Paced Labs
Instructor Led Classes
Learn how to design, deploy and operate highly available, cost-
effective and secure applications on AWS in courses led by qualified
AWS instructors
Validate your technical expertise with AWS and use practice exams to help you
prepare for AWS Certification
AWS Certification
More info at http://aws.amazon.com/training
Thank You for Attending AWS Innovate
We hope you found it interesting! Do provide us with your feedback for the session and complete the feedback form.
Let us know your thoughts of today’s event and how we can improve the event experience for you in the future.