性能を拡張するHerokuの操作-Dynoのスケーリング
Herokuでは、処理をこなす単位(アプリケーションを動かす単位)をDynoと呼びます。このDynoをスケールアップ/スケールアウトさせる具体的な操作方法を、実行例とともに説明していきます。まず、次のコマンドで現在の状態を確認します。
$ heroku ps === web (Standard-1X): npm start (1) web.1: up 2017/07/02 20:22:45 +0900 (~ 31s ago)
現在はStandard-1xタイプのDynoが一つだけ稼働している状態です。
Dyno は3種類(Web/Worker/One-off)ありますが、ここでは基本的にWeb Dynoについて説明していきます。Worker Dynoも原則同じですが、詳しくは「Dyno and Dyno Manager」をご覧ください。
Dynoのスケールアップ
Dynoには割り当てられる性能に応じていくつかのタイプが用意されています(表1)。このDynoのタイプを、より高性能なものに変更することによってスケールアップを実現します。
| Dyno Type | Sleeps | Professional Features | Memory (RAM) | CPU Share | Dedicated | Compute | |
|---|---|---|---|---|---|---|---|
| 1 | free | yes | no | 512MB | 1x | no | 1x-4x |
| 2 | hobby | no | no | 512MB | 1x | no | 1x-4x |
| 3 | standard-1x | no | yes | 512MB | 1x | no | 1x-4x |
| 4 | standard-2x | no | yes | 1024MB | 2x | no | 4x-8x |
| 5 | performance-m | no | yes | 2.5GB | 100% | yes | 11x |
| 6 | performance-l | no | yes | 14GB | 100% | yes | 46x |
例えば、Web Dynoのタイプをstandard-2xに変更するには、次のコマンドを実行します。
$ heroku dyno:type web=standard-2x Scaling dynos on ⬢ glacial-badlands-10890... done type size qty cost/mo ──── ─────────── ─── ─────── web Standard-2X 1 50
注意
Dynoのタイプが変更された場合、Dynoは再起動されます。
Dynoのスケールアウト
Dynoの種類のうち、standard-1x以上のもの(表1のProfessional Featuresがyesのもの)がスケールアウトに対応しています。例えば、Web Dynoの稼働数を4にするには、次のコマンドを実行します。
$ heroku ps:scale web=4 Scaling dynos... done, now running web at 4:Standard-2X
$ heroku ps === web (Standard-2X): npm start (4) web.1: up 2017/07/02 20:24:39 +0900 (~ 3m ago) web.2: up 2017/07/02 20:27:31 +0900 (~ 29s ago) web.3: up 2017/07/02 20:27:05 +0900 (~ 55s ago) web.4: up 2017/07/02 20:27:06 +0900 (~ 54s ago)
スケールアップとスケールアウトを一度に行うこともできます。例えばWeb DynoのタイプをPerformance-Mに変更し、かつ稼働数を6にするには、次のコマンドを実行します。
$ heroku ps:scale web=6:performance-m Scaling dynos... done, now running web at 6:Performance-M
$ heroku ps === web (Performance-M): npm start (6) web.1: up 2017/07/02 20:31:18 +0900 (~ 12s ago) web.2: up 2017/07/02 20:31:18 +0900 (~ 12s ago) web.3: up 2017/07/02 20:31:18 +0900 (~ 12s ago) web.4: up 2017/07/02 20:31:18 +0900 (~ 12s ago) web.5: up 2017/07/02 20:31:18 +0900 (~ 12s ago) web.6: up 2017/07/02 20:31:22 +0900 (~ 8s ago)
また、これら一連の操作は、Heroku DashboardでWebブラウザから行うこともできます。
ここがポイント
ところで、利用者からの要求を新しく起動したDynoへ振り分けるための設定はどうすればいいのでしょうか? 心配はいりません。それは自動で行われます。運用担当者がロードバランサーなどの設定変更を行う必要は無く、運用負荷を低減することができます。また、今までは性能向上に関しての説明をしてきましたが、Herokuでは同様の操作で縮退を行うことも可能です。

ここがポイント