SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Herokuでスタート! はじめてのPaaSアプリケーション開発

構築・運用の必須知識! Herokuアプリケーションの実行プラットフォーム「Dyno」を徹底的に理解する

Herokuでスタート! はじめてのPaaSアプリケーション開発 第4回


  • X ポスト
  • このエントリーをはてなブックマークに追加

Dynoの呼称

 Dynoはその役割によって修飾された呼び方をされることがあります。大きくは以下の3つの呼称があります。

  • Web Dyno
  • Worker Dyno
  • One off Dyno

 以下にそれぞれの役割を説明します。

Web Dyno

 Web Dynoとは、ブラウザからのHTTPリクエストをさばくDynoのことです。Herokuで作られるアプリケーションのほとんどはWebアプリケーションであることから、Web DynoのないHerokuアプリケーションはほとんどありませんし、実際に稼働しているDynoのほとんどもWeb Dynoです。

 これまでの連載でgit pushしたコードがそのまま動作することを見てきましたが、それらはすべてWeb Dynoとして動作していました。

Worker Dyno

 Worker DynoはHttpリクエストを受け付けないバックエンドの処理を行うDynoです。例えば、次のような処理をバックエンドで行います。

  • キューを監視して、投入されたリクエストを処理する
  • メールボックスを監視して、自動応答を行う

 Worker Dynoはその処理内容ごとに複数定義できますが、そのコードベースはすべてWeb Dynoと同じものであることに注意してください。

 通常は起動時のオプションによって処理を切り替えます。

One off Dyno

 One off Dynoとは必要なときに起動して、処理が終わったらすぐに終了するDynoのことです。One off Dynoが実行されるケースには次の2つがあります。

  • スケジューラによるタスクの実行
  • heroku runコマンドによるタスクの実行

 One off Dynoもコードベースは同じです。Rubyであれば、Rakeでタスクを作成することが多いようです。Javaの場合は、単純なコマンドラインアプリケーションを、通常通りのmainを持つクラスとして作成することが多いです。

 一時的に起動するOne off Dynoに対して、常時起動しているWeb DynoとWorker DynoをまとめてRegular Dynoと呼ぶこともあります。

Procfile

 Procfileは、アプリケーションのルートディレクトリに置くWeb DynoとWorker Dynoの起動コマンドを記述したファイルです。書式は次のとおりです。

<プロセス名>: 起動コマンド

 改行区切りで複数定義することができ、それぞれの定義をプロセスと呼びます。

 プロセス名に「web」を指定した場合、Web Dynoとなり、それ以外の名前を指定した場合はWorker Dynoとなります。

 この連載で作成しているサンプルアプリケーションのProcfileでは、次の1行が定義されています。

web: java $JAVA_OPTS -jar target/dependency/webapp-runner-7.0.40.0.jar --port $PORT target/heroku-sample

 見てのとおり、javaコマンドでJavaアプリケーション(Webサーバ)を起動しているだけです。$XXXXは環境変数(heroku configコマンドで設定可能)によって置換されます。WebDynoがHttpリクエストを受け取るポートは、$PORTという環境変数で定義されています。

Dynoの起動数

 Procfileで定義した各プロセスには、個別にDyno Size(1X、2X、PX)と起動数を設定することができます。

 設定はWebコンソールまたはコマンドから実行できます。

Dynoの設定
Dynoの設定

 

 Dyno数は0から100まで設定できます。Web Dynoを0にした場合はアプリケーションのURLにアクセスしても、アプリケーションが起動していない、というHerokuのエラーメッセージが表示されるだけになります。

 Dyno数はアプリケーションの負荷(アクセス数、メモリ使用量など)によって調整しますが、テスト環境や今回のサンプルアプリケーションのようにアクセスが多くないものの場合は1Dynoでも十分です(ただし、1Dynoでの運用には後述の制限事項があります)。

 また、Add-onを利用することによってアクセス数によってオートスケールさせたり、アクセスの少ない夜間はDyno数を減らす、といった制御も可能です。

1Dynoの制限

 アプリケーションをWeb Dyno1台のみで運用する場合、次の制限があります。

  • Web Dynoに1時間以上アクセスがないとシャットダウンする(次にリクエストが来た時にDyno起動からスタートするので初回リクエストのレスポンスが極端に遅くなる)
  • WebコンソールのMetrics機能が使えない
  • preboot(後述)が使えない

 Herokuに限った話ではありませんが、プロダクションとして運用するサービスの場合はWebサーバを2台以上の冗長構成とすることが推奨されます。

 Herokuの場合、DynoManagerが常にDynoの状況を監視しており、異常が発生していると思われるDyno(レスポンスが極端に遅くなっている、メモリ使用量が超過しているなど)を即座に再起動するので、冗長構成での運用が一般のIaaSやオンプレミスに比べてはるかに楽です。これもHerokuを利用するメリットの1つといえるでしょう。

次のページ
Dynoと再起動

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Herokuでスタート! はじめてのPaaSアプリケーション開発連載記事一覧

もっと読む

この記事の著者

小西 俊司(コニシ シュンジ)

株式会社Giveryに所属するエンジニア。CODEプロジェクトというエンジニアの成長を促進するプラットフォーム開発のテックリード。Herokuも使った新しいプロダクトを今秋リリース予定。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8344 2015/06/15 17:54

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング