dynamodb-autoscaling 검증

10597 단어 DynamoDBAWS

개요



요 전날 업데이트에서 dynamodb에서 autoscaling 기능이 구현되었습니다.
htps : // 아 ws. 아마존. 이 m / jp / b ぉ gs / 네 ws /

NoSQL 데이터베이스의 벤치마킹 도구인 ycsb를 사용하여 dynamodb-autoscaling의 동작을 확인할 수 있습니다.
이번에는 새로 추가된 항목 '타겟 사용률'이 어떤 영향을 미치는지 확인합니다.

환경 준비



환경 준비에 따라 아래를 참고로했습니다.

h tp : // 쿠이타. 코 m / 노라 훗 / ms / 35 아 956f682b1 아카 475f6
htp : //에서 v.ぁsss d. jp / c / d / a ws / ck_와 _dy도 db_ 우신 g_ycsb /
ht tp // 마이이후 c와 ry. 하테나 bぉg. 코m/엔트리/2013/04/05/010858

아마존 리눅스 버전
[ec2-user@dynamo-ec2 ycsb-0.12.0]$ cat /etc/system-release
Amazon Linux AMI release 2017.03

openjdk-devel 설치
$ sudo yum -y install java-1.7.0-openjdk-devel

ycsb 도입
・ダウンロード
$ wget https://github.com/brianfrankcooper/YCSB/releases/download/0.12.0/ycsb-0.12.0.tar.gz

・展開、移動
$ tar xfz ycsb-0.12.0.tar.gz
$ cd ycsb-0.12.0/

・ファイル用のディレクトリ準備
$ mkdir -p dynamodb/conf/

・ベンチマーク対象テーブル(testtable)のプライマリキーを確認しておく
$ aws dynamodb describe-table --table-name testtable | jq -r '.Table.AttributeDefinitions[].AttributeName'
name

YCSB 개요



테스트 데이터를 dynamodb에 로드합니다.
./bin/ycsb.sh load dynamodb -P workloads/dyamodb -P dynamodb/conf/dynamodb.properties

테스트 데이터를 사용하여 부하를 가한다.
./bin/ycsb.sh run dynamodb -P workloads/dyamodb -P dynamodb/conf/dynamodb.properties

설정 파일은 아래 3가지

■dynamodb/conf/dynamodb.properties
대상 DynamoDB 정보를 설정합니다. 변경하는 부분은 기본 키 정도인가.
자격 증명 정보가 포함 된 파일도 여기에 지정됩니다.
$ cat dynamodb/conf/dynamodb.properties
dynamodb.awsCredentialsFile = dynamodb/conf/AWSCredentials.properties
dynamodb.primaryKey = name
dynamodb.endpoint = http://dynamodb.ap-northeast-1.amazonaws.com

■dynamodb/conf/AWSCredentials.properties
자격 증명 정보를 기재.
$ cat dynamodb/conf/AWSCredentials.properties
accessKey = XXXXXXXXXXXXXXXXXXXX
secretKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

■workloads/(임의의 파일명)
투입하는 데이터, 실시하는 벤치마크의 스테이터스를 설정.
값은 템플릿 workloads/workload_template 를 참고.
※operationcount는 1,000,000 이상이 좋을까. 10,000으로 실행하면 스케일링하기 전에 끝났습니다…
$ cat workloads/dyamodb
workload=com.yahoo.ycsb.workloads.CoreWorkload #デフォルト

recordcount=1000 #テーブルにセットするレコード数
operationcount=2000000 #load時のオペレーション数

insertstart=0 #デフォルト
fieldcount=10 #フィールド数、デフォルト
fieldlength=100 #レコードの長さ、デフォルト

readallfields=true #デフォルト
writeallfields=false #デフォルト

table=testtable #テーブル名

fieldlengthdistribution=constant #デフォルト

#load時のオペレーション比率(read80%, update15%, insert5%)
readproportion=0.8
updateproportion=0.15
insertproportion=0.05

#以下テンプレートの値のまま設定
readmodifywriteproportion=0
scanproportion=0
maxscanlength=1000
scanlengthdistribution=uniform
insertorder=hashed
requestdistribution=zipfian
hotspotdatafraction=0.2
hotspotopnfraction=0.8

measurementtype=histogram
histogram.buckets=1000
timeseries.granularity=1000

검증 시작



초기 dynamodb 용량 설정



1000 레코드 쓰기 때문에 쓰기 용량 유닛(이하 WCU)을 10 확보.
WCU1이라면 스로틀이 발생해 시간이 걸립니다…



테이블에 테스트 데이터를 로드합니다.



한 번만. 10분 정도 걸립니다.
$ ./bin/ycsb.sh load dynamodb -P workloads/dyamodb -P dynamodb/conf/dynamodb.properties

auto-scaling 설정



드디어 auto-scaling 설정입니다.
RCU/WCU를 낮추는 오퍼레이션은 최대 9회/일이 되고 있습니다만 조건이 있습니다.
↓의 기사를 참고로 했습니다.
h tp : // 쿠이타. 이 m/도 k 같다/있어 ms/6864b8 아 723 아 2728565fc
검증할 때는 낭비하지 않도록 초기값을 고려합시다.



· 타겟 사용률
스케일링의 기준이 되는 값입니다. 이후에 확인합니다.

· IAM 롤
새 역할을 선택하면 괜찮습니다.
다음 관리 정책이 부여된 역할이 생성됩니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:UpdateTable",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:SetAlarmState",
                "cloudwatch:DeleteAlarms"
            ],
            "Resource": "*"
        }
    ]
}

역할에서 알 수 있듯이 auto-scaling은 cloudwatch의 값을 평가 기준으로 사용합니다.
auto-scaling 구성 중에는 동적 cloudwatch 메트릭이 만들어지고 auto-scaling 구성 해제 후 삭제됩니다.

타겟 사용률 70%인 경우



아래 설정에서 cloudwatch의 변화를 확인하세요.


auto-scaling 설정
RCU
WCU


타겟 사용률(%)
70
70

min(유닛)
10
10

max(유닛)
10000
10000


용량의 변화



추이는 아래와 같이

RCU


WCU


타겟 사용률 20%인 경우



아래 설정에서 cloudwatch의 변화를 확인하세요.


auto-scaling 설정
RCU
WCU


타겟 사용률(%)
20
20

min(유닛)
10
10

max(유닛)
10000
10000






끝에



부하가 걸리는 방법이 일정한 경우는 용량의 증감이 안정되면 변화하지 않으므로,
그 근처의 조정이 필요하다고 느꼈습니다.
cloudwatch 메트릭은 동적 값으로 만들어지고 기준이 되어 스케일링됩니다.
서포트에 확인한 바, 역치를 넘어의 캐패시티 설정도 할 수 있다고 합니다만, 그 경우는 다음의 타이밍으로 스케일 되어 버린다고 하는 것입니다(미 검증).

좋은 웹페이지 즐겨찾기