ブログBlog

    • Heroku Private Spaces の Dyno 再起動の振る舞いの違い

    • 2021年3月3日
    • Heroku
    • Private Space

Heroku Private Spaces で dyno を運用するための tips です。

dyno 操作用の Heroku-CLI コマンド

こちら のドキュメントにあるように、dyno 操作には以下のようなコマンドがあります。

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:restartps: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 or ps: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:killps: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 を扱う上でのちょっとしたつまづきポイントでした。覚えておくと、役立つときが来るかもしれません。


1. リクエストの待ち受けを担当する nginx サーバなど

この記事を書いた人 : 上田直諒

一覧へ戻る

開発についてのお問い合わせはこちら

お問い合わせ

JOIN OUR TEAM

積極採用しています。私たちと一緒に働きませんか?