IBM Cloud の Cloud Foundry apps を Auto-Scaling させる


#参考記事
- [How to scale my microservice with Cloud Foundry, Containers and OpenWhisk? - IBM Cloud Blog](https://www.ibm.com/blogs/bluemix/2017/05/scale-microservice-cloud-foundry-containers-openwhisk/)

# Cloud Foundry apps をつくる
カタログからPHPを作成します。
![Kobito.Y1Dbgb.png](https://qiita-image-store.s3.amazonaws.com/0/101361/d933a7ef-c6e0-4032-287f-f85096a55703.png "Kobito.Y1Dbgb.png")

基本的にはライトな使い方であれば、30日無料なので、請求は問題ないでしょう。
![Kobito.LM5qxM.png](https://qiita-image-store.s3.amazonaws.com/0/101361/bff5aeb5-7517-08f5-5153-96f60fba177f.png "Kobito.LM5qxM.png")

「Running」となっていることを確認します。
![Kobito.9Mhl9J.png](https://qiita-image-store.s3.amazonaws.com/0/101361/9668c97f-6395-77ff-f5e3-e28f5165fea5.png "Kobito.9Mhl9J.png")

# Auto-Scaling をつくる
カタログから Auto-Scaling を作成します。
![Kobito.eKl2qn.png](https://qiita-image-store.s3.amazonaws.com/0/101361/4ae11768-8b84-1f91-10f7-76e90dff809a.png "Kobito.eKl2qn.png")

こちらも基本的には無料のサービスです。
![Kobito.9kKGYk.png](https://qiita-image-store.s3.amazonaws.com/0/101361/dfe3de00-9d4d-0038-3437-b815335ff52f.png "Kobito.9kKGYk.png")

「Create connection」から先ほど作成した Cloud Foundry apps を追加して、Restage をかけます。
![Kobito.NVcZuL.png](https://qiita-image-store.s3.amazonaws.com/0/101361/2757ceb5-780b-2d1d-1946-994b081e4f5f.png "Kobito.NVcZuL.png")

しばらくすると、「Manage」の画面に正しく表示されます。
![Kobito.0m6aKb.png](https://qiita-image-store.s3.amazonaws.com/0/101361/1a0b2aa1-9930-a5dc-d676-c63255a6c4e9.png "Kobito.0m6aKb.png")

# Auto-Scaling させてみる

## Policy の設定
たとえば、このような設定を入れてみました。
この設定で負荷をかけてテストしてみます。
![Screen Shot 2018-09-20 at 20.25.57.png](https://qiita-image-store.s3.amazonaws.com/0/101361/fd3a5d07-dfee-3cf5-3f2e-5fbbc7b85f81.png "Screen Shot 2018-09-20 at 20.25.57.png")

- Statistic Window
	- average を計算する対象となる間隔
- Breach Duration 
	- 設定された時間の間、閾値を超えるとトリガが発動
- Cooldown period for scaling out
	- インスタンス追加後、全インスタンスを含めて処理を計測するまでの待ち時間
- Cooldown period for scaling in
	- インスタンス削除後、全インスタンスを含めて処理を計測するまでの待ち時間

![Kobito.awW9Ur.png](https://qiita-image-store.s3.amazonaws.com/0/101361/f1fe8144-5bfd-bd46-6207-34b61a9ac90d.png "Kobito.awW9Ur.png")


## 負荷テストツール
今回はこちらを使用してみました。

- [curlで同じURLをループして叩くshellスクリプト - Qiita](https://qiita.com/nanananamememe/items/ad94d0ecb1b1e277f2fe)

他にも以下のツールが有名です。

- [Jmeter のインストールから負荷テストまで - Qiita](https://qiita.com/shotets/items/d553d7be0d407a9a9a53)

## メトリクスの統計、スケーリング履歴
テストした結果、メモリ使用量に関する負荷がみてとれます。

![Screen Shot 2018-09-20 at 20.37.13.png](https://qiita-image-store.s3.amazonaws.com/0/101361/b8b354ed-d3dd-4f65-a8a9-4fe8c36b3713.png "Screen Shot 2018-09-20 at 20.37.13.png")

インスタンスの追加処理自体は、数秒の範囲で終わっています。

![Screen Shot 2018-09-20 at 20.28.55.png](https://qiita-image-store.s3.amazonaws.com/0/101361/e7abf6e2-a9c6-d909-da00-b6cd986209d6.png "Screen Shot 2018-09-20 at 20.28.55.png")

インスタンスの追加・削除時の最短のインターバルは、
「Cooldown period for scaling out(in)」+「Breach Duration 」の240秒(4分)程度になっているので、意図した通りに動いていることが確認できます。
メモリの平均使用率を120秒ごとに出して、トリガが動くようになっているので、4分より間隔が長い場合でも、2分刻みでトリガの判断がおこなわれていることがわかります。

![Screen Shot 2018-09-20 at 20.37.06.png](https://qiita-image-store.s3.amazonaws.com/0/101361/a1f24a16-1d3d-73c6-3ec4-1156524d647a.png "Screen Shot 2018-09-20 at 20.37.06.png")


## インスタンスごとのメトリクスの統計
若干、タイムスケールが異なる部分がありますが、少し負荷が偏ってしまう部分があります。

<img src="https://qiita-image-store.s3.amazonaws.com/0/101361/3bca3074-c06a-2a74-4b2c-51df8aa5c992.png" width=50%><img src="https://qiita-image-store.s3.amazonaws.com/0/101361/b8f84afd-0fe0-b563-6185-3f13df3d4fd1.png" width=50%>
<img src="https://qiita-image-store.s3.amazonaws.com/0/101361/be2cb391-2178-4972-6de4-3280531769b4.png" width=50%><img src="https://qiita-image-store.s3.amazonaws.com/0/101361/bbc789f1-4a7c-dfc7-0804-1b420e164db4.png" width=50%>
<img src="https://qiita-image-store.s3.amazonaws.com/0/101361/02d4d7c3-1fac-b73b-ba9e-bdc6ca582ae0.png" width=50%>

これは、1つの Cloud Foundry apps に対する複数インスタンスへのロードバランシングは、ラウンドロビン方式になっているためです。

- [ibm cloud - Bluemix Load Balancer Algorithm - Stack Overflow](https://stackoverflow.com/questions/30651427/bluemix-load-balancer-algorithm)

Auto-Scaling したとはいえ、このラウンドロビン方式はユーザー側で変更できないとのことなので、この状況を変えたい場合、複数のアプリをうまく活用する必要がありそうです。

- [cloudfoundry - Cloud Foundry / Bluemix load balancing - Stack Overflow](https://stackoverflow.com/questions/32810816/cloud-foundry-bluemix-load-balancing)