-
Notifications
You must be signed in to change notification settings - Fork 9
Bounscale
BounscaleはRailsアプリケーションを自動的にスケールしてくれるアプリケーションです。自動的なスケーリングは、アプリケーションのレスポンスタイムの一貫性の維持や、Dynoのコストの削減などを含んだ様々な利益をもたらします。
Bounscale はbounscale
というRackのミドルウェア(Gemとしてパックされています)を使って自動的なスケーリングを実装し、Rails 2.3, 3.0, 3.2 と Ruby 1.9.2, 1.9.3 のCedarスタックをサポートしています。
[実験的サポート] node.js v0.10.15 / Express 3.3.5, Play Framework 2.1.3 / Scala 2.10
以下を、あなたのプロジェクトのGemfileに追加してください :
gem 'bounscale'
(Rails3ではなく) Rails2では、以下をconfig/environment.rb
に追加してください :
config.after_initialize do
require 'bounscale'
end
以下をプロジェクトのpackage.jsonに追加してください。
{
...
"dependencies": {
...
"bounscale": "*"
},
...
}
そして、以下をapp.jsに追加してください。 "app.use"という段落の一番上に行を挿入する必要があります。
...
app.set(.....);
app.set(.....);
app.use(require('bounscale')); // <-- insert here
app.use(.....);
app.use(.....);
...
以下をあなたのプロジェクトのproject/Build.scalaに追加してください。
...
object ApplicationBuild extends Build {
...
val appDependencies = Seq(
"bounscale" % "bounscale_2.10" % "0.0.1" // <--here
)
val main = play.Project(appName, appVersion, appDependencies).settings(
resolvers += "Bounscale Maven Repository on Github" at "http://bounscale.github.io/maven/" // <--here
)
}
そして以下のように、あなたのアプリケーションディレクトリの中に、"Global.scala"というファイルを作成してください。
import play.api.GlobalSettings
import play.api.mvc.WithFilters
import com.bounscale.BounscaleFilter
object Global extends WithFilters(
new BounscaleFilter) with GlobalSettings
アドオンを追加するために、以下のコマンドを入力してください :
$ heroku addons:add bounscale
Herokuのアプリケーションの画面へ移動し、BounscaleがAddonsに追加されているかを確認してください。
AddonsにBounscaleが追加されているのを確認した後に、Bounscaleアドオンをクリックしてください。
Bounscaleボタンをクリックしたあとに、以下の画面が現れます。そうしたら、以下の3項目を入力してください :
- APIキー
HerokuアカウントのAPIキーを入力してください。
Heroku’s Dashboard > Account > API Key
と下り、
"Show API Key" ボタンをクリックすることで、
APIキーを手に入れる事が出来ます。
- Web URL
モニタリングしたいWebアプリケーションのURLを入力してください。
- タイムゾーン
あなたがいる場所のタイムゾーンを選択してください。
タイムゾーンを選択したら、Saveボタンをクリックしてください。
もしBounscaleのホームページが表示されたら、設定は完了です。
デフォルトではデータが存在しないため、設定が完了した後、すぐには図は表示されません。Bounscaleは約5分から10分でアプリケーションのデータを手に入れ、図の表示を始めます。
Auto Scale Setting 画面は、自動スケーリングがあなたが設定したスケーリングに関する項目にそって適切に動くように、操作する画面です。
Auto Scaleで自動スケーリングのON/OFFを切り替えることができます。 有効になっている時は、図のデータを取得し、ロードが重い状況になったら自動スケーリングを行います。無効になっているときは、図のデータを取得しますが、自動スケーリングは一切行いません。
始めに使い始める時は、Auto Scaleを一度無効に設定し、集まった図のデータを元にした適切な閾値を設定した後に有効化する事をオススメします。
Dyno Limitでは、自動スケーリングによって変更されるDynoの数の幅を設定することができます。どんなにロードが小さくでも、Dynoの最小の数は、指定された値を下回ることはありません。どんなにロードが小さくでも、Dynoの最大の数は、指定された値を上回ることはありません。
Dynoの最小値は最低限のパフォーマンスを保証する数字に設定してください。また、Dynoの最大数はコストに見合うような値に設定しましょう。「Current Dyno :」は現在のDynoの数を表示します。
Bounscaleは、2つの指標が両方とも "high load" となった時にスケールアウトを実行します。
"Response Time" という指標は、BounscaleからアプリケーションURLへ実際に発行されたHTTPリクエストのレスポンスタイムになります。
この指標は、アプリケーション上の負荷を測る一番重要な項目であり、いつも使う物になるでしょう。"Response Time"をクリックすることで、レスポンスタイムを確認するURLを設定することができます。
平均的なアプリケーションのレスポンスタイムを返すURLを設定する事をオススメします。
二つ目のオプションの指標を、ドロップダウンボックスから選択してください。オプションの指標は以下のようなものがあります :
- Busyness [%]
Busyness [%] はDynoが、ある量の時間やウェイトタイムの中で、リクエストを処理している間の持続時間を計測し、その割合を0%から100%の中で表示します。
例えば、10秒間の間でリクエストが処理されるのに6秒かかり、リクエストのためにDynoが4秒待っていたとするならば、結果は60%になります。
- CPU[ms]
CPU [ms] は CPUの使用時間を示す指標です。
- Memory [MB]
Memory [MB] はメモリの使用量を示す指標です。
- Throughput [response/min]
Throughput [response/min] は1分間あたりで返されるレスポンスの数を示す指標です。
Chartsでは、スケールアウトする閾値を選ぶ事が出来ます。左側のノブで、固定の指標であるレスポンスタイムの閾値を設定できます。また、オプションの指標であるCPUの閾値を右側のノブで設定することができます。もし、2つの指標の両方の閾値が超えた場合、アプリケーションの負荷を減らすためにBounscaleはスケールアウトを行います。
Intervalで、データを集めるインターバルを設定する事が出来ます。インターバルが少なくなればなるほど、Dynoの数が急に増えたり減ったりします。
Bounscaleのスケールインは、レスポンスタイムだけがある基準値を下回った時に起こります。_ScaleIn_を使ってスケールインするレスポンスタイムを設定する事が出来ます。可能な限り低い値が設定される事が推奨されます。これは、Bounscaleが、アプリケーションの負荷が完全に落ち着いていないときにスケールインすることを防ぐ意味があります。
設定が完了したら、Save ボタンをクリックしてください。
一度Bounscaleが実際の運用に入ったら、以下のガイドラインを参考に日頃から自動スケーリングの設定を最大限活用できるよう、Dyno History画面を確認してください。
- 十分なレスポンスタイムが維持できているかどうか
- もしレスポンスタイムが十分でなければ、不十分なレスポンスによる混雑によってDynoの数が増えているかどうかを確認してください。
- もしDynoの数が増えていなければ、閾値やオプションの指標を適切に調整してください。
- もしレスポンスタイムがDynoの数を増やしても改善しない場合、Bounscaleで取り扱う事はできません。
- ボトルネックになるような、DBサーバなどのアプリケーション以外の何かの可能性を調査してください。
- もし自動スケーリングが負荷がそんなに高くない場所で行われた場合、同様に閾値やオプションの指標を適切に調整してください。
全てのBounscaleのサポートと実行時の問題は、Heroku Support channels経由で送信するようにしてください。もし何か不確かなことがあったり、故障や機能不全を発見したりした場合は、私たちのGitHubのプロジェクトページでイシューを上げてください。