Herokuについて調べたことのまとめ
遅くなりましたが、あけましておめでとうございます。
フレクトの大橋です。
フレクトはセールスフォースを使ったシステムインテグレーション事業が
中心事業の1つだったりします。なので、年末年始はセールスフォースが買収した
Heroku(ヘロク)やRubyについて急に勉強を始めました。
忘れないように、年末に年始に勉強したことを備忘録的にまとめておきます。
<1. どんなものか>
乱暴な言い方をすれば、Google App EngineのRuby版です。(乱暴すぎる?)
もっとも違うのは、Ruby, Rails, PostgreSQL、memcachedなどオープンな技術の上に作られており、自分たちのLinuxサーバで動かしたアプリケーションをそのまま動かしやすい環境であることです。
Dynoと呼ばれるWebサーバプロセス数や、データベースの使用する容量などにより課金され、無料の範囲もありますが、Goolge App Engineよりは無料範囲が小さいと思っておいてよいと思います。
<2. Hello, World的なものを動かすには>
とりあえず、Hello, World的なものを動かしたくなります。動かすだけならば以下のすばらしい記事を見ればOKでした。
http://kuranuki.sonicgarden.jp/2009/05/rubypaasherokurails.html
デプロイなどはgitに連動していて、コマンドラインから簡単にできることが体感できると思います。
<3. 構成コンポーネントとリクエストの流れ>
以下の図にあるようなコンポーネントが基本コンポーネントで、
リクエストを順次処理していきます。
(※ http://heroku.com/how/architecture から図は引用しています)
まず、リクエストはnginxでできているリバースプロキシ(HTTP Reverse Proxy)に到達します。そこから、varnishでできているHTTP Cache層に来ます。
HTTP Cache層ではCache-Controlヘッダなどの内容によりコンテンツキャッシュを
返す機能があり、キャッシュヒットするコンテンツはここでレスポンスとしてユーザに戻します。
HTTP Cache層の次は、Routing Meshです。ここでリクエストを各Dynoにバランシングします。ここはHerokuがErlangで独自実装したミドルウェアのようです。
次にDyno Grid上での各Dynoで動くアプリケーションにリクエストが来ます。マルチテナントなので、Dyno Grid上にはいろいろな人、組織のアプリケーションが動いていますが、適切なDynoにリクエストが送られるよう、Routing Meshでルーティングされています。
なお、Dynoはアプリケーションサーバの1プロセスで、アプリケーションサーバThin(http://code.macournoyer.com/thin/)をベースにしているもののようです。Dynoは追加購入すれば、ユーザは柔軟に増やすことができ、2秒で起動するとのことです。
Dyno上のアプリケーションがリクエストを処理し、必要に応じてDatabaseやMemory Cacheにアクセスします。
Databaseは標準はPostgreSQLで、Memory Cacheはmemcachedが動いています。それぞれ、Dyno上で動くアプリケーションからアクセスできます。
<4. 動かせるアプリケーション>
Rackに対応したアプリケーションであれば動かせます。
RackというのはRubyにおけるWebサーバとフレームワーク(RailsやSinatraなど)との
インタフェースの役割を果たすライブラリです。詳しくは以下で。
http://gihyo.jp/dev/serial/01/ruby/0023
Rackに対応したフレームワークであれば、Heroku上で動くことになります。なので、Railsだけでなく、Sinatraなど他のフレームワークでも動くそうです。
<5. 無料で使える範囲>
1つのアプリケーション、1つのDyno、5MBのデータベース領域であれば無料で使うことができます。個人で勉強する分には十分かと思いますので、いろいろ試してみたいところです。
<6. 魅力的なアドオンがたくさん>
標準では、Dyno(アプリケーションサーバ)、Databaes(PostgreSQL)、Memory Cache(memcached)を使うくらいかもしれませんが、よく見てみるアドオンがたくさんあり、使いたくなるものもいろいろありました。個人的に使いたいと思ったものをいくつか列挙しておきます。
◆ Amazon RDS連携
EC2上で動いているので当たり前っぽいサービスですが、これは必要ですね。
http://addons.heroku.com/amazon_rds
◆ Exceptionトラッキング(通知)
エラー発生時にメールやTwitterで通知してくれるサービス。運用上こういう
仕組みを作るのは以外と面倒なので助かります。
http://addons.heroku.com/exceptional
◆ Solr
フレクトでは全文検索などやるときSolrを使っていたりするので、これは
魅力的です。外部のSolrサービスをWeb経由で提供している会社に
つながるみたいですが。
日本語辞書で形態素解析できるのか、など追加の調査は必要ですね。
http://addons.heroku.com/websolr
<まとめと今後>
Rails(Rack)アプリのためのPaaS、"Heroku"について勉強したことを備忘録的にメモにしました。
US-EAST以外にいつ展開されるのか、といったことや、セールスフォースが買収したことにより、どんなサービスが追加されるのか、など今後の動きが気になります。
一部、実験的にnode.jsに対応など始まっており、多言語展開するのかも気になるところです。
実戦投入まではもう少し勉強、検証が必要ですが、海外を中心に実戦投入された事例も多いので、フレクトでも経験積んで実戦で活かす機会が作っていきたいと思います。
しばらく研究してみて、今後、Herokuの記事もたくさん書けるようにしていきたいです。
では、本年もよろしくお願いします。
コメント