Dynoとは
Dynoとは、Herokuアプリケーションが実際に実行されるプラットフォームのことです。その実体は、Amazon EC2の巨大インスタンス上で動作する軽量Linuxコンテナです。
ベースとなるOSはUbuntuであり、ユーザーの作成したアプリケーションはすべてDyno上で実行されます。
大きな特徴として、Dynoのファイルシステムは揮発性であることが挙げられます。例えば、ブラウザからアップロードしたファイルをDynoのディスク上に保存しても、そのファイルはDynoがシャットダウンした際に失われます。
Dynoは常にHerokuのDynoManagerによって監視されており、毎日1度は再起動されます。データを保存する際には必ずHeroku Postgresなどの外部ストレージを利用します。
また、DynoはHerokuの課金のための単位でもあり、DynoのサイジングをどのようにするかはHerokuを運用する上で大きなポイントになります。
Dynoの種類と料金
Herokuから、2015年6月より料金体系が変更されると発表がありました。以下の説明は、本稿執筆時点での情報に基づいてに書かれています。最新の料金はこちらでご確認ください。
現在Dynoには1X、2X、PXという3種類のサイズがあります。
名称 | メモリ | CPUシェア | マルチテナント | 処理能力 | 価格/時間 |
---|---|---|---|---|---|
1X | 512MB | 1x | yes | 1x-4x | 0.05米ドル |
2X | 1,024MB | 2x | yes | 4x-8x | 0.10米ドル |
PX | 6GB | 100% | no | 40x | 0.80米ドル |
Dynoサイズによって、メモリ容量とCPUの処理能力が異なります。1X、2Xはマルチテナント、つまり1台のEC2上で複数のコンテナが共存するモデルです。一方PXは、ホストを1つのコンテナで占有するモデルとなっています。
Dynoの価格はDyno Hourという概念に基づいて設定されています。1X Dynoが1時間起動している状態を「1Dyno Hourを消費する」といい、1Dyno Hourの料金は0.05米ドルです。
2X Dyno、PX Dynoの価格はそれぞれ1時間あたり0.1米ドルと0.8米ドルですが、Dyno Hourの考え方では以下のように説明されます[1]。
- 2X Dynoを1時間起動していると2Dyno Hourを消費する
- PX Dynoを1時間起動していると16Dyno Hourを消費する
[1] ちなみに、1時間以下の使用時間も割合をかけて算出されます。
なぜ、こういう考え方をするかというと、Herokuでは1つのアプリケーションにつき750Dyno Hourの無料枠があるからです。
例えば、2X Dyno 2台を1か月間動かしたとします。1か月は24時間 × 31日で744時間です。2X Dynoは1時間につき2Dyno Hourを消費するので、1台あたり1488Dyno Hourの消費、それが2台で合計2976Dyno Hourの消費です。
24 × 31 × 2 × 2 = 2976 Dyno Hour
ただし、750Dyno Hourの無料枠があるので、2976から750を引いた111.3米ドルがこの場合の料金です。
(2976 - 750) × $0.05 = $111.3
無料枠はアプリケーションごとに提供されるので、1X Dyno 1台で運用しているアプリケーションの場合は1か月あたりのDyno Hourの消費が最大で744Dyno Hourとなり、無料枠の中で収まって料金が発生しません。
1X Dyno1台のみの運用にはいろいろと制限事項があるので、本番運用ではお勧めできませんが、開発環境やテスト環境をAdd-Onまで含めて無料枠内で構築することは実際に可能です。
750時間の無料枠はどのような組み合わせで使用しても構いません。例えば、PX Dyno10台を4時間だけ起動していた場合、
16 × 10 × 4 = 640 Dyno Hour
の消費となりますが、それ以外の時間の起動台数を0としておけば無料枠内で収まります。
筆者は負荷テストなどで100Dynoを同時起動してテストを行うことがたまにありますが、短時間の利用なのでほとんど料金は発生していません。