概要
昨日、Azure Blob Storage の HTBB (High-Throughput Block Blob) が何も考えずに使っても結構速い件。 という記事を書きましたが、その後ちょっと条件を変えたらもっと速くなるのでは…?と実験してみたら案の定さらに 4 倍以上のスループットが出ました!というまとめ。
背景
昨日の実験では、とりあえず RAM Disk を確保しても十分位のメモリ…ってことで、Standard D4s v3 (4 vcpu 数、16 GB メモリ) を選んでいました。
でもそれだと、VM がホストされているサーバーのネットワークインターフェイスを他の VM とシェアする形になっているはずなので、その部分がボトルネックになってるのでは…と思った次第。
実験条件
今回は、DSv3 シリーズで一番いいのを頼む、ってことで、Standard D64s v3 (64 vcpu 数、256 GB メモリ) にしてみました。あとの実験条件は一緒なので割愛。
そして結果!
tokawa@<VMNAME>:~/azcopy_linux_amd64_10.1.1$ ./azcopy cp "/mnt/ramdisk/" "https://<STORAGEACCOUNT>.blob.core.windows.net/<CONTAINER>?<SAS>" --recursive=true
INFO: Scanning...
Job b7fdd9b2-5b05-1f4d-59a0-82b693eea438 has started
Log file is located at: /home/tokawa/.azcopy/b7fdd9b2-5b05-1f4d-59a0-82b693eea438.log
0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total, 2-sec Throughput (Mb/s): 18643.0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total, 2-sec Throughput (Mb/s): 1832.1718
Job b7fdd9b2-5b05-1f4d-59a0-82b693eea438 summary
Elapsed Time (Minutes): 0.1003
Total Number Of Transfers: 1
Number of Transfers Completed: 1
Number of Transfers Failed: 0
Number of Transfers Skipped: 0
TotalBytesTransferred: 5368709120
Final Job Status: Completed
コマンド打ってから完了するまで、目に見えてわかるくらいだいぶ速くなった!!!
とりあえず計算。
5368709120 [Bytes] / 0.1003 [Minutes] = 53,526,511,665 [Bytes/Min]
一分間に 53 GB くらい送れそうな感じですね。
53,526,511,665 [Bytes/Min] / 60 = 892,108,527.75 [Bytes/Sec]
なんと秒間 900 MBytes くらい!bit per second になおすと、7200 Mbps ってとこ。
8K ビデオでもビットレートは 200 - 300 MBit/Sec くらいが標準だと思うので、全然余裕ですね!
もはや大容量データを扱う案件も、VM - Storage 間でガンガンデータやり取りする感じの実装でいいのでは…と思ったりします。
まとめ
Azure Blob Storage のスループットは、もはや書き込み元のスループットやネットワークの帯域幅が大きなキャップになってくるポイントだなぁ、と昨日からの 2 つの実験で感じました。
何も考えず、適当に使ってもそこそこ速いですが、書き込み元側で詰まってる状況であれば、単一の Blob に複数 VM から分割して書き込むとか、アプリのアーキテクチャを考えれば、もっともっと超速書き込みが実現できるのではないでしょうか!?
それではまた!