Heroku なら、アプリを実行している dyno(コンテナ)の動作を気にする必要がありません。dyno はプラットフォームによって自動的に管理されているからです。各 dyno は他の dyno から隔離された仮想ランタイム環境とファイルシステムから構成されています。dyno は永続的なものではなく、アプリとシステム全体の健全性を維持するため 1 日に 1 回以上再起動されます(再起動の時点で残っているリクエストは、問題なく処理されます)。複数の dyno を実行するアプリの場合、各 dyno は異なる間隔で再起動されます。
Dyno の再起動は Dyno Manager によって自動的かつ透過的に行われ、ログに記録されます。スケジュールにもとづく再起動だけでなく、新しいコードがリリースされたり、アドオンが変更されたり、設定変数が変更されたりした場合も dyno は自動的に再起動されます。また、手動で dyno を再起動することもできます。
Dyno ランタイム
Heroku には各 dyno のプロビジョニング、実行、モニタリング、ライフサイクル管理を担う 2 つの dyno ランタイムがあります。dyno がクラッシュした場合、これらのランタイムでは復旧処理も行われます。これら 2 つのランタイムの主な違いはネットワークトポロジと他のテナントからの隔離レベルです。
- Common Runtime :デフォルトのランタイムです。リージョンごとに 1 つのマルチテナントネットワークを使用して dyno を管理します。各 dyno は強力なファイアウォールルールで保護され、相互に隔離されています。現在、このランタイムを利用できるリージョンは EU と US の 2 箇所です。
- Private Spaces ランタイム :Heroku Private Spaces で dyno を管理するように設計されたランタイムです。Private Spaces ランタイムでは、お客様のテナントごとに 1 つまたは複数の「Private Space」が割り当てられます。それぞれの Private Space には、他の Space のアプリとは別のネットワーク、ルーティング層、コントロールプレーンが用意されます。このタイプのランタイムを使用できるリージョンは現在、ダブリン、フランクフルト、ロンドン、モントリオール、ムンバイ、オレゴン、シンガポール、シドニー、東京、バージニアの 10 箇所です。
Dyno Manager
Dyno Manager は Heroku で稼働するあらゆるアプリの dyno を管理します。Dyno Manager は dyno の稼働を維持し、自動的に dyno を再起動するだけでなく、実行中のアプリで問題(メモリ不足による例外など)が検出されると、それに反応して dyno を再起動します。このため、開発者は、アプリの運用やメンテナンスに関わる多くの作業から解放されます。リージョンごとに 1 つずつ存在し、Private Spaces には専用のものが 1 つずつ割り当てられるという点は、Dyno ランタイムと同じです。