60000TPSを叩き出すAerospikeクラスタを15分で作成してベンチマークまで行う。(GCP)

## 動機

GCPはAWSよりパフォーマンスがいいという噂を聞くけどどれほどのものか試してみようかと。
であれば、クラスタ構成でガシガシ動いている感が見れるものということでAerospikeをチョイス！

## 構成

Aerospike x 6台 (1CPU,MEM:3.75GB,HDD:SSD 40GB 標準マシン）
Benchmarkサーバ x 1台 (2CPU,MEM:7.5GB,HDD:標準 標準マシン）

## Aerospikeクラスタの構築

### Cloud Launcherを選択
<img width="1689" alt="cloudlauncher.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/a4f4b8c8-f159-032c-47e7-d1d59d7fb861.png">

### Aerospikeを選択します。
<img width="1663" alt="aerospike_choice.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/bc8bc76f-7fa9-c766-a0a5-30fd650cbec4.png">

### こちらもそのままボタンをポチっと。
<img width="1666" alt="aerospike_deploy.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/50df7b3b-4fd8-c555-b042-9e972e9f899a.png">

### パラメータは以下のように入力
制限のアンロックをしていないい場合、同一zoneで8cpuまでとディスクのトータルが1024GBという制限があるので、注意してパラメータを設定する。
負荷をかけるサーバに2コアを割り当てたいので6台のクラスタで1cpuのものを以下では利用する。

入力が完了したら「デプロイ」ボタンを押下する。
<img width="1667" alt="parameter.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/db72e44a-bdf3-7b79-1daf-032c7cba6815.png">

### デプロイが完了したら
画面下部に表示されるSSHトンネル設定をターミナルから実行し、
ブラウザで`http://localhost:8081`を実行する。
<img width="1668" alt="tunnel.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/f5ae242d-828a-bc2c-a229-df1432a47b6d.png">

### ブラウザでAerospikeの管理画面（AMC）が表示できた状態
接続の際にNodeのIPを求められるが`localhost`を入力すればOK。
<img width="1478" alt="スクリーンショット 2015-10-27 13.12.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/b3da0459-1e56-52ca-ead9-b2f674d65c60.png">

ここまででAerospikeの準備は完了。

Aerospikeのクラスタを作るだけであればここまでの手順です。カンタンですね！


## ベンチマークサーバの構築

### Aerospikeの時と同様にメニューの`Cloud Launcher`を選択

### CentOS7を選択
<img width="1660" alt="centos7_choice.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/7623be3c-fe20-d2d4-e572-c580042c4564.png">

### 次の画面はAerospikeと同様にポチポチ進んで

### CentOS側のパラメータを入力します。
注意点はAerospikeと同一のZoneを利用することと、マシンタイプのcpuを増やすこと。
ベンチマークはマルチスレッドで実行するためコア数はなるべく多いほうが高い負荷を安定してかけることができます。
<img width="1671" alt=" coreos_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/798860cd-afb9-58a8-72cc-96d626945a03.png">


### インスタンスの起動が完了したら`SSH`と書いてあるボタンを押下し、SSHログインします。
（ブラウザでターミナルが開きます。）
<img width="1669" alt="centos_ssh.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/40861414-3d8e-ecdf-57f8-418f6fb0042d.png">


### 構築コマンドの実行
以下を貼り付け、環境を構築します。
内容としては、JDK,Mavenをインストールし、AerospikeClientのBenchmarkバイナリを生成します。

```
sudo su -
yum -y update
yum -y install wget maven
wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
rpm -ihv jdk-8u45-linux-x64.rpm
wget http://www.aerospike.com/download/client/java/3.1.6/artifact/tgz
tar zxvf tgz
cd aerospike-client-java-3.1.6/benchmarks/
mvn package
```

### ベンチマークの実施

`{TARGET_AEROSPIKE}`の部分をAerospikeのいずれかのインスタンスの`ローカルIP`に置き換えて実行します。

```
./run_benchmarks -h {TARGET_AEROSPKE} -p 3000 -n test -k 10000000 -S 1 -o S:50 -w RU,50 -z 1 -async -asyncMaxCommands 300 -asyncSelectorThreads 8
```

### AMC（Webブラウザ）側に大量のアクセスが来たことが確認できます。
<img width="1669" alt="amc.png" src="https://qiita-image-store.s3.amazonaws.com/0/28681/da341462-85bf-7384-b4b8-c58d2f011b05.png">

ベンチマーク側のログでもreadが25000前後、writeが38000前後、合計で64000前後のTPSが出てますね。

```
2015-10-27 03:35:37.889 write(tps=38640 timeouts=0 errors=0) read(tps=25784 timeouts=0 errors=0) total(tps=64424 timeouts=0 errors=0)
2015-10-27 03:35:38.890 write(tps=38006 timeouts=0 errors=0) read(tps=24973 timeouts=0 errors=0) total(tps=62979 timeouts=0 errors=0)
2015-10-27 03:35:39.890 write(tps=38383 timeouts=0 errors=0) read(tps=25696 timeouts=0 errors=0) total(tps=64079 timeouts=0 errors=0)
2015-10-27 03:35:40.892 write(tps=38517 timeouts=0 errors=0) read(tps=25477 timeouts=0 errors=0) total(tps=63994 timeouts=0 errors=0)
2015-10-27 03:35:41.892 write(tps=38866 timeouts=0 errors=0) read(tps=25595 timeouts=0 errors=0) total(tps=64461 timeouts=0 errors=0)
2015-10-27 03:35:42.893 write(tps=38648 timeouts=0 errors=0) read(tps=25722 timeouts=0 errors=0) total(tps=64370 timeouts=0 errors=0)
```

ここまででさくさく作業をすすめて約15分。

cpuやらの制限があるのでBenchmarkサーバが2コア1台でしたが、こちらのサーバをもう少し強力にすることでAerospike側ではもう少しパフォーマンスが出るのではないかと。
つまり負荷をかけきれていない気もします。

今回はどれだけお手軽に構築が出来るかという確認だったので、時間があるときにパフォーマンスに関してはもう少し突っ込んだ調査を行ってみようかと。

以上です。