jaws-ug北陸第5回勉強会 クラウド破産しないためのebs入門
DESCRIPTION
2013/04/13 金沢で開催された第5回勉強会のライトニングトーク資料です。 AWS EBSのI/OとIOPSについてベンチマークツールを使っていろいろ計測した結果をまとめました。間違いなどあればご遠慮なくご指摘ください。TRANSCRIPT
JAWSJAWS北陸 第北陸 第55回勉強会回勉強会
クラウド破産しないためのクラウド破産しないためのEBSEBS入門入門
2013年4月13日植木 和樹
EBSについていろいろ調べてみました
いわゆる学習成果発表会です人生初LTです
よろしくお願いします
本日の内容
自己紹介名前:植木和樹年齢:36歳出身:新潟県妙高市(現在は富山県単身赴任中)独立系SIerに勤務製造業情報システムG常駐主にサーバエンジニア資格:ITサービスマネージャ システムアーキテクト
緑色のオニの人@czkuk
AWS歴
約70日
前回(2月2日)第4回JAWS北陸のハンズオンがほぼ初めて
(仕事はクラウドと全く無関係です)
好きなAWSサービス
SQS(Simple Queue Service)
シンプルだけど自在なサービス連携地味で裏方的な感じがイイ
得意な技術
方眼紙エクセル
見積書から手順書まで全部エクセル♡
もう一度 本日の内容
クラウド破産が怖いのでEBSについていろいろ調べてみました
はじまり2月のある日
AWSについて調べものをしていると
「クラウド破産」
という穏やかでない単語に出会う
http://togetter.com/li/21972
5日で25万て・・・
http://togetter.com/li/21972
I/Oの課金?
AWSの主な課金単位
● 時間(EC2、ELB)● 容量(EBS、S3、RDS)● APIリクエスト数(S3、SNS、SQS)● データ転送量(ELB)● I/Oリクエスト数(EBS)● Provisioned IOPS(EBS)
I/Oリクエスト数?IOPS?
見積りたいけど
時間やデータ量、APIリクエスト数は利用頻度の前提があればどうにかなるかも
・・・でもI/Oリクエスト数ってどうやって見積もるの?
見積り方法ついて考える前にまずはIOPSについておさらい
I/O request数とは?IOPSとは?
IOPS【Input/Output Per Second】
ハードディスクなどの記憶装置の性能指標の一つで、ある条件の元で1秒間に読み込み・書き込みできる回数のこと。1回の読み書きにかかる時間の逆数で、ハードディスクの場合はシークタイムと回転待ち時間、データ転送時間の和の逆数となる。実際には、読み込み(リード)か書き込み(ライト)か、シーケンシャルアクセスかランダムアクセスか、転送するデータの量がどれくらいかによって1回の動作に要する時間が異なるため、「4KBランダムライトIOPS」(4KBのデータをランダムに書き込んだ時のIOPS)のように計測条件を明示することが多い。
e-Wordsより http://e-words.jp/w/IOPS.html
EBSのIOPS
「スタンダードボリュームの平均パフォーマンスは約 100 IOPS」
・・・だそうですが計測条件がわからない
http://aws.amazon.com/jp/ebs/
【疑問】
AWSがIOPSを計測する際のデータサイズってどれくらい?4KBのデータ書き込みと1MBのデータ書き込みはどちらも1 I/Oなの?
検証してみた
ブロックサイズを指定できるベンチマークツールを使って60秒間に読み書きしたデータ量・IOPSを計測するその結果とAWSの計測結果を比較するついでにvmstatでも計測してみる
ベンチマークには fio を利用参考にさせてもらったサイト:
Provisioned IOPSの検討 - JPOUG Advent Calendar 2012http://d.hatena.ne.jp/sh2/20121217
比較した内容● ベンチマークツールのIOPS x 60秒ブロックサイズ:
4、8、16、32、64、128、256、512KB、1MBの9種類
読み書き割合:100%読み取り100%書き込みの2種類
多重度:1計測時間:60秒
● CloudWatchのAWS/EBS VolumeReadOps/VolumeWriteOpsの時間合計
● vmstat -dの「成功した読み込み/書き込みの総数」の時間増加量
使用したEC2環境 リージョン:Tokyo インスタンスタイプ:t1.micro OS:Amazon Linux 2013.03 64bit カーネル:2.6.18 EBS:スタンダード 32GB ファイルシステム:ext4
準備● Vagrant 1.1 + AWSプラグインでEC2インスタンス起動
● Berkshelfで必要パッケージ導入● aws-cli でEBS Volume作成し、EC2インスタンスにアサイン
● Volumeをext4でフォーマット● EC2でVolumeマウント● fio-2.0.14 をconfigure; make && make install
● fioベンチ実行 + 裏でvmstat実行● AWS SDK for rubyでCloudWatchから値を取得してCSV出力
● Excelで集計!!
結果ブロックサイズ
Read Writefio vmstat Cloud
Watchfio vmstat Cloud
Watch4KB 101 101 101 273 274 274
8KB 91 92 92 229 230 230
16KB 99 100 100 258 259 259
32KB 89 90 90 242 243 243
64KB 47 96 48 225 452 226
128KB 75 227 152 173 520 347
256KB 71 430 215 86 517 259
512KB 54 658 329 48 587 294
1MB 40 967 564 32 792 462
単位:IOPS
(fioのIOPSを1とした場合)ブロックサイズ
Read Writefio vmstat Cloud
Watchfio vmstat Cloud
Watch4KB 1 1 1 1 1 1
8KB 1 1 1 1 1 1
16KB 1 1 1 1 1 1
32KB 1 1 1 1 1 1
64KB 1 2 1 1 2 1
128KB 1 3 2 1 3 2
256KB 1 6 3 1 6 3
512KB 1 12 6 1 12 6
1MB 1 24 14 1 25 14
結論:アプリのブロックサイズとAWSのデータ転送サイズは異なる
● EBSでは最大64〜85KBを目安に転送ブロックが分割される
● CloudWatchの値はvmstat のread/writeの計測結果とは異なる
● EBSのI/Oリクエスト数はCloudWatchでなければ計測できない(っぽい)
つまり、こういうこと?
アプリケーション
OS
EBSストレージプール
16KBデータブロック
256KB
16KB
積載量 最大85KB
①85KB
②85KB
③85KB CloudWatch
I/Oリクエスト計測
fio
vmstat
EBSの転送速度???
「スタンダードボリュームの平均パフォーマンスは約 100 IOPS」1 I/O = 64KB〜85KBつまり6,400〜8,500KB/secの転送速度がでるということ???
http://aws.amazon.com/jp/ebs/
【次の疑問】
「スタンダードボリュームの平均パフォーマンスは約 100 IOPS」Provisioned IOPSはIOPSで月固定料金
1IOPS = 0.12$ = 約12円(Tokyo)なら100 PIOPSなら月12円で読み書きし放題?
検証してみた
100PIOPSのEBSに対して先ほどと同じ試験を実施する
● ベンチマークツールのIOPS x 60秒ブロックサイズ:
4、8、16、32、64、128、256、512KB、1MBの9種類
読み書き割合:100%読み取り100%書き込みの2種類
多重度:1計測時間:60秒
● CloudWatchのAWS/EBS VolumeReadOps/VolumeWriteOpsの時間合計
● vmstat -dの「成功した読み込み/書き込みの総数」の時間増加量
ついでにこれについても確認してみる
「Provisioned IOPS ボリュームはアプリケーションの読み込み、書き込みを16KBかそれ以下のI/Oブロックサイズで処理します。16KB以上にI/Oサイズを増やすと、同じIOPSの速度を達成するために必要なリソースが線形に増加します。」
⇒ ブロックサイズが16KBより大きくなるとアプリのI/O数と差が出てくるはず
http://aws.typepad.com/aws_japan/2012/11/ebs-volume-status-checks.html
結果ブロックサイ
ズ Read Writefio vmstat Cloud
Watchfio vmstat Cloud
Watch4KB 102 102 102 101 102 102
8KB 102 102 102 101 102 102
16KB 102 102 102 101 102 102
32KB 102 102 102 101 102 102
64KB 101 203 102 101 204 102
128KB 50 152 101 50 153 102
256KB 33 200 100 33 204 102
512KB 16 204 102 16 204 102
1MB 7 176 102 7 175 102
単位:IOPS
なんか予想と違う
ブロックサイズを16KB以上にしてもfioのIOPSとCloudWatchのIOPSに差がでてこない16KB以上にI/Oサイズを増やすと、fioのIOPSが低下していく
⇒ 解釈か検証方法間違ってるのかも・・・
ともあれ結論:Provisioned IOPSの特徴
● Provisioned IOPSボリュームはIOPSが指定値に制限される※スタンダードは数百IOPSまでバースト可能
● PIOPSもスタンダートと同じく64〜85KBくらいで処理しているようにみえる(?)
EBSの(超概算)I/O見積方法
●ブロックサイズが64KBまで⇒ I/Oリクエスト数 = アプリI/O回数
●ブロックサイズが64KB以上⇒ I/Oリクエスト数 = ブロックサイズ/64KB x アプリI/O数
● 100IOPS以下の(バーストしない)I/Oが定常的に発生する場合はProvisioned IOPSを検討する
ところで何調べてたんだっけ?
三度目 本日の内容
クラウド破産が怖いのでEBSについていろいろ調べていました
どれだけ使ったら5日で25万円になるのか?
Amazon Simple Monthly CalculatorAmazon Simple Monthly Calculatorで計算してみた
5日で25万円ってどんだけ?
http://calculator.s3.amazonaws.com/calc5.html?lng=ja_JP
3030日で日で140140万円なので万円なので55日で日で2020万万ちょっとちょっと
2020個!のスタンダードボリュームを個!のスタンダードボリュームをそれぞれそれぞれ2000 IOPS!!2000 IOPS!!でぶんまわすでぶんまわす
クラウド破産が怖いのでEBSについていろいろ調べてみました
本日のまとめ
スタンダードスタンダードEBSEBSはバーストしてもはバーストしても600IOPS600IOPSくらいくらい
数台の数台のEBSEBSを使う程度なら全く問題ないを使う程度なら全く問題ない
負荷テストするなら負荷テストするならProvisioned IOPSProvisioned IOPSにすればにすれば料金が月額固定になって料金が月額固定になって
ちょっと安心ちょっと安心
ご清聴ありがとうございました!