(응용) AWS - Advanced DynamoDB
AWS에 대해 알아봅니다.
1. Provisioned Throughput
-
Capacity Unit 단위로 계산
-
쓰기 (Write Capacity Unit) = WCU
-
1 Write Capacity Unit = 1초에 1KB 데이터 쓰기
-
-
읽기 (Read Capacity Unit) = RCU
-
1 Read Capacity Unit = 1초에 4 KB SC(Strongly Consistent) 데이터 읽기
-
1 Read Capacity Unit = 1초에 2 * 4 KB EC(Eventually Consistent) 데이터 읽기 (디폴트)
-
-
SC(Strongly Consistent)
-
가장 최신의 데이터를 불러올 수 있으나 EC에 비해 지연 발생
-
-
EC(Eventually Consistent)
-
가장 최신의 데이터를 반환하지 않을 수 있음. 즉 실시간으로 업데이트되지 않음
-
하지만 계속 요청을 보내다보면 최신의 데이터를 받아 볼 수 있음
-
고객아이디 | 주문번호 | 주문날짜 |
---|---|---|
29358235 |
20003 |
3/24/2021 |
73649172 |
20009 |
3/29/2021 |
57497462 |
20001 |
3/18/2021 |
12093221 |
20006 |
3/27/2021 |
-
5 WCU, 5 RCU
-
5 * (2 * 4 KB EC 데이터) → 초당 40 KB 데이터 읽음
-
5 * (4 KB SC 데이터) → 초당 20 KB 데이터 읽음
-
5 * (1 KB 데이터) → 초당 5 KB 데이터 씀
-
-
데이터 크기 > Capacity Unit
-
추가 비용에 대응하기위해 APP에 따라 RCU / WCU 설정
-
1.1. RCU 샘플 문제1
-
RCU의 크기는 얼마로 잡아야 할까요?
-
초당 80개의 데이터를 읽어와야함
-
Strongly Consistent 데이터
-
1개의 데이터 크기 = 3 KB
-
1.1.1. RCU 샘플 문제1 해결방안
-
얼마나 많은 4 KB RCU가 필요한지 구함
-
3 KB / 4 KB = 0.75
-
-
정수로 떨어지지 않으면 반올림
-
0.75 → 1
-
-
초당 얼마나 많은 데이터를 읽어오는지 계산
-
1 * 80 = 80 RCU
-
1.2. RCU 샘플 문제2
-
RCU의 크기는 얼마로 잡아야 할까요?
-
초당 80개의 데이터를 읽어와야함
-
Eventually Consistent 데이터
-
1개의 데이터 크기 = 3 KB
-
1.2.1. RCU 샘플 문제2 해결방안
-
얼마나 많은 4 KB RCU가 필요한지 구함
-
3 KB / 4 KB = 0.75
-
-
정수로 떨어지지 않으면 반올림
-
0.75 → 1
-
-
초당 얼마나 많은 데이터를 읽어오는지 계산
-
1 * 80 = 80 RCU
-
-
위에서 구한 RCU를 2로 나눠줌
-
80 RCU / 2 = 40 RCU
-
1.3. WCU 샘플 문제
-
WCU의 크기는 얼마로 잡아야 할까요?
-
초당 100개의 데이터를 써야함
-
1개의 데이터 크기 = 512 BYTES
-
1.3.1. WCU 샘플 문제 해결방안
-
얼마나 많은 1 KB WCU가 필요한지 구함
-
512 BYTES / 1KB (1024 BYTES) = 0.5
-
-
정수로 떨어지지 않으면 반올림
-
0.5 → 1
-
-
초당 얼마나 많은 데이터를 읽어오는지 계산
-
1 * 100 = 80 WCU
-
2. Access Control
-
AWS IAM
-
Users
-
IAM 역할
-
Groups
-
역할과 그룹에 따라 유저들은 전혀 다른 권한을 가질 수 있음
-
테이블 생성, 데이터 삽입 & 수정 & 삭제 등
-
-
-
테이블 별로 유저 권한 필터링 → IAM Conditions
-
IAM Conditions : 파티션키 == 유저 아이디 일때만 데이터 읽기 권한 부여
-
-
“Sid” : “AllowAccessToOnlyItemsMatchingUserID”, “Effect” : “Allow”, “Action” : [ “dynamodb:GetItem”, “dynamodb:PutItem”, “dynamodb:UpdateItem” ], “Resource” : [ “arn:aws:dynamodb:ap-northeast-2:123456789012:table/HighScores” ], “Condition” : { “ForAllValues:StringEquals” : { “dynamodb:LeadingKeys” : [ “${www.minho.com:user_id}” ], .... ...
3. TTL(Time To Live)
-
데이터 유효기간을 설정하는것
-
불필요하거나 일시적인 데이터(Session, Event Log) 삭제
-
테이블 청소로 인하여 데이터 유지 비용 절감
-
유저아이디 | 세션아이디 | 세션생성시간 | TTL | 세션데이터 |
---|---|---|---|---|
84724 |
657381 |
1544031271 |
1544038471 |
… |
26495 |
758293 |
1544013196 |
1544020396 |
… |
92742 |
782938 |
1544008931 |
1544018723 |
… |
-
세션생성시간/TTL → Epoch Time / Unix Time
-
1970년 1월 1일 오전 12시 기준, 얼마나 많은 초(seconds)가 지났는지 알려줌
-
(TTL - 세션생성시간) 이 0보다 작을 시 삭제 또는 필터
-
4. Provisioned Throughput Exceeded & Exponential Backoff
4.1. Provisioned Throughput Exceeded
예외 Exception의 한 종류
-
PTE Exception
-
너무 많은 읽기/쓰기 요청 발생시 일어남
-
수용할 수 있는 최대치를 넘겼을 때
-
-
AWS SDK
-
요청을 성공적으로 처리할 때까지 계속 전송
-
그렇지 않다면 DynamoDB 설정에 들어가서 요청 프리퀀시를 조정
-
동시에 들어오는 요청의 갯수를 줄여 DynamoDB에 요청을 보내는데 있어 부하를 줄이는 방법도 있음
-
-
-
No AWS SDK
-
Exponential Backoff
-
-
많은 네트워크 요청이 발생함에 따라 서버에 지연이 발생할 수 있고 나아가 요청이 실패할 수 있음
-
예) 수강신청 등
-
Swich, DNS, ELB 고통받음..
-
-
4.2. Exponential Backoff
요청이 실패할 때마다 기다리는 시간을 늘려주는 것
-
요청 → 요청실패 → 50ms → 요청 재시도 → 요청실패 → 100ms → 요청 재시도 → 성공
-
요청이 실패할 수록 대기시간을 늘려줌으로써 서버부하 및 병목현상을 줄여줌
-
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Email