Oracle CloudでKUSANAGIを使う

この記事は[Oracle Cloud Advent Calendar 2018](https://adventar.org/calendars/3077) 12/13日の記事です。

@tajima_taso です。
[プライム・ストラテジー株式会社](https://www.prime-strategy.co.jp/)で、[超高速WordPress仮想マシン「KUSANAGI」](https://kusanagi.tokyo/)を開発しています。 

## KUSANAGIとは?

KUSANAGIはWordPressをはじめPHPとMySQLをミドルウェアとして利用するアプリケーションを高速かつセキュアに動作させることができる仮想マシンおよびそのイメージです。近年ではRubyやPostgreSQLにも対応しています。

2018年12月13日現在、国内外の主要クラウドプラットフォームをはじめ[27のプラットフォーム](https://kusanagi.tokyo/cloud/)上で無料で利用することができます。

今回はそんなKUSANAGIを、[Oracle Cloud](https://www.oracle.com/jp/cloud/)上で動作させて、パフォーマンスをApache Benchにより計測してみました。

## 検証について

KUSANAGI単体を計測しただけでは、その数値がどうなのか?という判断が不明瞭かと思いますので、非KUSANAGI環境のサーバと比較して検証してみます。

非KUSANAGI環境は一般的なLAMP環境を想定していますので、ミドルウェアは必要に応じてパッケージ管理システムで導入してます。

なお、下記に記載した環境からわかるように、どちらのサーバもハードウェア的なスペックは同一です。何故ならKUSANAGIはソフトウェア的なチューニングを施して高速化を実現している仮想マシンだからです。

しかしながら__キャッシュは非使用です__。厳密に言うとソフトウェアの内部で各レイヤーの要所要所でキャッシュ機構は使われているのですが、ECサイトやマイページのある会員サイトなどで利用しても全く問題が発生しない状態という意味でHTTPレスポンスのキャッシュが非使用ということです。

### Apache Benchのコマンド

それぞれのサーバに対して下記コマンドを実行し、Failed requestsが0であることを前提にし、Requests per secondをパフォーマンスの指標となる数値として定義します。この数値が高いほど性能が高いということになります。

```
ab -n 1000 -c 100 http://${URL}/
```
- http://${URL}/は[WordPress5.0](https://ja.wordpress.org/download/releases/)をダウンロードしてインストールした直後のトップページ
- ネットワーク的な影響を受けないようにローカルホストから実行 ※Apache Bench自体にもサーバリソースが消費されることに留意する。

### 環境

|  Shape  |  OS  | WEBServer/PHP |
| ---- | ---- | ---- |
|  VM.Standard2.1 (OCPU1 Mem15GB) |  CentOS7  | Apache httpd 2.4.6/PHP7.2.12 |
|  VM.Standard2.1 (OCPU1 Mem15GB) |  CentOS7(KUSANAGI)  | nginx 1.15.7 /PHP 7.3.0 |

※OCPUは1つにつき2vCPUに相当します。

> OCPUは、ハイパー・スレッディングが有効なIntel Xeonプロセッサの1物理コア、またはOracle SPARCプロセッサの1物理コアに相当するCPU性能として定義されます。Intel Xeonプロセッサの場合、各OCPUが2つのハードウェア実行スレッド(vCPU)に対応しています。Oracle SPARCプロセッサの場合、1 OCPUが8つのハードウェア実行スレッド(vCPU)に対応しています。

[https://cloud.oracle.com/ja_JP/compute-classic/faq](https://cloud.oracle.com/ja_JP/compute-classic/faq)より引用

## Oracle Cloud Infrastructureでの仮想マシンの立て方

結果を表示する前に、Oracle Cloudで仮想マシンを立ち上げるまでのフローを簡単にご紹介します。
※画面は2018年12月12日時点のものですので、変更される可能性があることをご了承下さい。

前提としてOracle Cloud Infrastructureへの管理コンソールへログインできる状態とします。

### インスタンスを作る

Create Instanceボタンをクリックします。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/90032/3f6e1269-1814-ab56-93af-881147fc9378.png)

### OSを選択する

Change image Sourceを選んでOSを選択します。
※ちなみにAD1から3のdomainはAWSでいうAZのようなものです。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/90032/e6c2ad7c-a6ef-206d-6a38-c1a9d0853c90.png)

今回はCentOS7を選択します。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/90032/aaeeaad5-2179-87c4-e890-07a2eca38da7.png)

### Shapeを選択する。

Change Shapeを選択してShapeを選択します。AWSでいうインスタンスタイプのようなものです。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/90032/26b703fa-01df-9a41-60ce-1912614f59ae.png)
ちなみにOracle CloudではどのShapeも豊富にメモリを搭載しておりますので、__KUSANAGIのアーキテクチャ上とても相性の良い環境となっております！__
特にデータベースの容量が大きい大規模サイト向けに適していると言えるでしょう。

### SSH Keyをアップロードする

SSHの公開鍵をアップロードします。立ち上げたサーバにSSHでログインする時に必要です。対になる秘密鍵はログインマシン上に保持しておきましょう。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/90032/72971cbe-3f36-484a-4eea-4229c2d57755.png)

### 立ち上げる

その他必要に応じて項目を入力して、Createボタンを押すとサーバのセットアップが始まります。開始直後は左上の画像がオレンジ色のイメージになっています。

![06.png](https://qiita-image-store.s3.amazonaws.com/0/90032/a53aa669-16fa-b7bf-716b-9cc2dc8ac44b.png)

オレンジ色から緑色になると、サーバが立ち上がった状態です。
Public IP Addressを確認します。

![07.png](https://qiita-image-store.s3.amazonaws.com/0/90032/85189338-5d75-e6e9-10fd-e36709704a17.png)

### SSHでログインする

先程アップロードした公開鍵と対になる秘密鍵を用いて、Public IP Addressに対してSSHログインするとサーバが操作できるようになります。
また、ログイン後はsudo su - でroot昇格可能です。

```
$ ssh -i oracle.pem opc@132.145.149.xxx
```

### Security Listの設定

ちなみに、Oracle Cloudにも他のクラウドベンダーと同様にサーバのイン・アウトのトラフィックを制御するSecurity Listというファイアウォール機能が備わっています。
デフォルトだと80番や443番ポートは許可されていませんので、公開WEB用途に利用する場合は必要に応じて設定します。

![10.png](https://qiita-image-store.s3.amazonaws.com/0/90032/88e888a9-98d2-d9db-0fff-2fe1293b9ad8.png)


## 検証結果

結論は下記の通りでした。KUSANAGIの方が12.7倍ほどパフォーマンスが向上しています。

|  環境  | Requests per second |
| ---- | ---- |
| KUSANAGI |  97.35 [#/sec] |
| 非KUSANAGI | 7.68 [#/sec]  |

## まとめ

国内外の主要クラウドプラットフォームで利用可能なKUSANAGIですが、Oracle Cloud上においてもその性能を確認することができました。

2018年12月13日現在、まだOracle Cloudの[Marketplace](https://cloudmarketplace.oracle.com/marketplace/)上にその姿を確認することはできませんが、__その時は近いのかもしれません__:innocent: