-
Heroku Private Spaces の Dyno 再起動の振る舞いの違い
- 2021年3月3日
- Heroku
- Private Space
Heroku Private Spaces で dyno を運用するための tips です。
dyno 操作用の Heroku-CLI コマンド
こちら のドキュメントにあるように、dyno 操作には以下のようなコマンドがあります。
heroku ps:restart
|
すべての dyno を再起動する |
heroku ps:restart web
|
dyno タイプ web の dyno をすべて再起動する |
heroku ps:restart web.1
|
dyno web.1 をすべて再起動する |
heroku ps:stop web
|
dyno タイプ web の dyno をすべて停止する |
heroku ps:stop web.1
|
dyno web.1 を停止する |
ps:restart
と ps:stop
の違い
ドキュメントをよく見ると、次の様な興味深い記述があります。
拡張されたプロセスの一部である dyno で
ps:stop
を実行すると、dyno が自動的に再起動されます。Private Space では、dyno を実行している専用インスタンスがps:stop
によって終了し、置き換えられます。dyno を永続的に停止するには、プロセスをスケールダウンします。
まとめると、次のような挙動だということになります。
-
heroku ps:stop
で停止した dyno は、自動的に再起動される -
Heroku Private Spaces においては、
heroku ps:stop
で再起動した dyno は 専用インスタンスが置き換えられる
Heroku は AWS 上で機能している [hs] ことを考えると、専用インスタンス とは EC2 インスタンス のことだと思われます。
専用インスタンスが置き換えられる ということについては、次のヘルプページでも説明がありました。
このヘルプページでは、Common Runtime と Private Spaces とでアプリの dyno ホストを切り替える方法 について説明されています。
キモとなる一節を抜粋します。
However, this command replaces dyno hosts only for apps in Common Runtime. For Private Space apps, we should use
ps:kill
orps:stop
:
heroku ps:restart web.1
: Restarts web.1 onto the same runtime instance.
heroku ps:stop web.1
: Stops the dyno and the runtime instance, provisions a new host and starts the dyno on this new host. This command not just stops but also starts the dyno.
ここで this command とは heroku ps:restart
コマンドを指しています。
こちらを含めて意訳すると、次のようになります。
しかしながら、このコマンド(
heroku restart
) は Common Runtime アプリの dyno ホストしか置き換えません。Private Spaces では、ps:kill
かps:stop
を使う必要があります:
heroku ps:restart web.1
: 同一のランタイムインスタンス上で web.1 が再起動します。
heroku ps:stop web.1
: dyno とランタイムインスタンスを停止し、新たなホストをプロビジョニングした上で dyno を新たなホスト上で起動します。このコマンドは dyno を停止するだけでなく、起動も行います。
ps:stop
コマンドは dyno の起動も行っているということにも多少驚きましたが、Private Spaces 上ではただ再起動(ps:restart
)するだけでは、インスタンスが置き換わらないということがわかります。
Private Spaces を再起動する際の注意点
上記を踏まえると、Private Spaces を利用する際、以下のような インスタンス由来の不具合 が発生している場合は 単なる dyno 再起動では解消しない ことがわかります。
-
インスタンス由来のパフォーマンス劣化
-
インスタンスとプロキシ[1]間におけるネットワーク不調
こういったケースが疑われる場合は heroku ps:stop
を一度試してみましょう。
Private Spaces を扱う上でのちょっとしたつまづきポイントでした。覚えておくと、役立つときが来るかもしれません。
この記事を書いた人 : 上田直諒
AWS bluebird css CSV docker docker compose electron ES6 es2015 Git Heroku ITコンサルティング JavaScript justinmind less mongoDB Node.js php PostgreSQL Private Space Promise React react-router reactjs Salesforce scss Selenium Builder selenium IDE Selenium WebDriver stylus TypeScript VirtualBox VisualStudioCode vue vuejs webpack システム開発プロジェクト セキュリティ ワイヤーフレーム 上流工程 卒FIT 帳票 要件定義 設計 電力小売業界