おいしいherokuの使い方

9,554 views

Published on

heroku meetup#10 の導入事例資料です

Published in: Technology

おいしいherokuの使い方

  1. 1. 大久保英樹(Job-Hub) おいしい Herokuの 使い方
  2. 2. 自己紹介 大久保英樹 最終学歴:レインボーモータースクール 昔はガテン系。 建設現場でドリルを華麗に操ってました。 Qiita: Oakbow Twitter:@oakbow7
  3. 3. こういうの。 5kgくらいあるこのドリルと10kgある鋼材や工 具かついで、建設中のマンションの屋上(13 階くらい)まで階段で駆けあがったりしてま した。 自己紹介
  4. 4. 当時の体脂肪率 5~7% ※ イメージ画像です 自己紹介
  5. 5. 現在の体脂肪率 25% ※ イメージ画像…です 自己紹介
  6. 6. そんなプログラマが、heroku 上で Job-Hub と いうクラウドソーシングサービスをつくっていま す。 今日は実際にどんな構成で動いているのか、ご紹 介したいと思います。 自己紹介
  7. 7. まず、Job-Hubを 説明させてくだしあ。 Job-Hubの紹介 http://jobhub.jp
  8. 8. CROWD SOURCING SERVICE Cloud(雲)じゃないよ Crowd(群衆)だよ Job-Hubの紹介
  9. 9. Job-Hubの紹介 以上。 平たく言うと、オンラインお仕事流通サイト。
  10. 10. 実はこんなコンテストを今やってます。 Job-Hubの紹介 http://jobhub.jp/jobs/1653
  11. 11. 仕事で使っているあなたの机、見せてください Job-Hubの紹介 中の人も投稿しているので、見てくださいね
  12. 12. Job-Hubの システム構成
  13. 13. Job-Hubのシステム構成 Ruby/Railsアプリなので、以降はそれ前提の話になります。
  14. 14. Job-Hubのシステム構成 アドオン編
  15. 15. New Relic Job-Hubのシステム構成 •定番のアドオンで、herokuで一番使われている •システム面の目と耳の役目を果たす。 •製品レベルのサービスなら、Professional必須。 •1Dyno hourあたりの課金なので、結構高い (Dynoの総額よりこいつの方が高い) •一応安くする方法あり(後述)
  16. 16. Air Brake Job-Hubのシステム構成 •これまた定番のアドオン。 •例外がスローされるとメール通知してくれる。 •管理画面の操作性が最悪なので、正直乗り換えたい •DNSをGoogle先生あたりにしておかないと、頻繁に「ページが見つかり ません」になる。 •プランはいくつかあるけど、上位プランの意義が分からない…。 使い方分かってないだけかも。分かる方は後でこっそり教えてください…
  17. 17. PaperTrail Job-Hubのシステム構成 •定番のログ取得アドオン(以前はLogglyだった)。 •Web上でログ閲覧できるので使いやすい。フィルタリングもできる。 •Logglyと違って日本語のログもOK! •ログのフィルタリング条件を保存でき、合致するログが吐かれたら通知 する機能もある。⇒ タイムアウト(H12)とかH99などの監視ができる。 Herokuでリクエストタイムアウトを検知する
  18. 18. SSL Endpoint Job-Hubのシステム構成 •独自ドメインでSSLを使う場合に必須のアドオン •appname.herokuapp.comドメインのままなら、そのままSSLが使えるので このアドオンは不要。 •そのままでは https://jobhub.jp のようなルートドメインを利用でき ない。DNSとの連携が必要(後述)。 Herokuでルートドメインを使用する
  19. 19. MemCachier Job-Hubのシステム構成 •herokuでmemcachedを使うためのアドオン •旧版のアドオンと違い、Web上で使用状況の閲覧とキャッシュクリアが できるようになった。 •Job-Hub では、フラグメントキャッシュとアクショ ンキャッシュで使っています。 十分試行したとはいえませんが、オブジェクトレベルのキャッシュ はあまり効果がないか、キャッシュを探すオーバーヘッドの方が大 きい気がしています。使えば速くなるというものでもなく、できる だけ大きな塊になるよう設定しています。
  20. 20. SendGrid Job-Hubのシステム構成 •Herokuでメール送信するためのアドオン •期間に限りがあるけれど、Web上でログを見ることもできます。 •今のところ目立ったトラブルもなく、安定しています。 •Job-Hub では、すべてのメールをdelayed_job経由、非同期処理で送信 しています。 ちなみにherokuでメール送信する場合、delayed_jobなどで非同期実 行するのが正しい作法のようです。同期実行でも送信できますが、 すごく…待たされます(一年以上前の話)。
  21. 21. Heroku Scheduler Job-Hubのシステム構成 •バッチなどを定時実行するためのアドオン。無料。 •Job-Hub では日次・週次・月次処理などで使用。 •1xか2xの指定が可能なので、重いバッチ処理だけを2xDynoなWorkerDyno で動かすとか、メモリ潤沢ウハウハも可能(試してません)? •一時的に止めたい時があるので、停止機能があるといいな…。
  22. 22. 2x Dyno Job-Hubのシステム構成 •通常の2倍の速さ CPUリソースとメモリ容量と価格のDyno •高いので本番でのみ使用。 •「だぶるだいの」と読む(×「つーばいだいの」) •Unicornと組み合わせると非常に効果的 例:1リクエストの処理時間が500msのアプリ thin: 1Dyno1プロセス 20WebDyno で秒間40リクエスト unicorn:1Dyno4~5プロセス 5WebDyno で秒間40~50リクエスト =若干のパフォーマンスアップ+10webDyno分の節約+15WebDyno分の New Relic課金額の節約 この例では$1000くらい安くなります(たぶん…)
  23. 23. 2x Dyno Job-Hubのシステム構成 •1xDynoはメモリ512MB。2xだと1GB。 •メモリ使用量が↑を超えてもいきなり止まったりはせず、エラーコード R14を吐きつつスワップしながら処理は実行される。 •Unicornのプロセス数は、運用しつつR14をPaperTrailで監 視して、おいしい値を手探りする(2xなら4~6かな?)。 •メモリ使用量が3倍を超えるとエラーコードR15を吐いてDyno強制再起 動。やりすぎには注意しましょう。 •unicorn-woker-killerでリサイクルしましょう。 UnicornのWorkerプロセスをリサイクルする
  24. 24. Job-Hubのシステム構成 •稼働するDynoの数を、1週間単位、1時間の粒度でスケジューリングでき るアドオン。 •Job-Hubでは本番は未使用。テスト環境でのみ使用。 •WebDynoの稼働数を土日や深夜に0にすること で、チマチマと賢く節約できる。 •設定の前後で、月額でどのくらい節約できたか表示されるところが Good。 Process Scheduler オートスケールタイプのDyno操作アドオンにも期待中。
  25. 25. Job-Hubのシステム構成 •導入前提で動作確認中… •PaperTrailのログを放り込んで、ログを対象とした集計に利用する予定 Treasure Data Hadoop 検証中のアドオンはまだまだいっぱい。
  26. 26. Job-Hubのシステム構成 サービス編
  27. 27. Job-Hubのシステム構成 •DNSサービス •独自ドメイン+ルートドメインに必要な、ANAMEレコードを提 供している。 http://jobhub.jp https://jobhub.jp •Jpドメインに対応している •最近はDozensという日本のサービスもあるっぽい Herokuでルートドメインを使用する
  28. 28. Job-Hubのシステム構成 •皆さんご存じの堅牢ストレージ •ログ保管庫 •ファイルアップロード先(CarrierWave) •静的ファイル保存先(AssetSync) •Herokuのシステムエラーページ •Herokuのメンテナンスページ AWS S3 HerokuでCarrierWaveを使う場合に注意すること そのうちAssetSyncの記事も書きます(と思いながら幾星霜)…
  29. 29. Job-Hubのシステム構成 •Job-Hub ではMySQLをチョイス •Multi-AZとReadReplicaを使用 •チューニング済みなので、使う人がやるのはプランの変更くらい(中の 人曰く)。 •実際MySQLでこれやっとけ系のパラメータ変更はもうやってあった •でもmax_allowed_packetはデフォルトのままだったので、 変更した方がいいかも。 AWS RDS Railsで<Mysql2::Error: closed MySQL connection> が出た場合に 必ず確認すること
  30. 30. Job-Hubのシステム構成 •CDNサービス •Job-Hub では静的ファイル(JS,CSS,画像)で利用。 •AssetSync経由でS3のBucket(オリジンサーバ)に流すと、 CloudFrontが勝手に世界中のエッジサーバへ運んでくれる。 非常に簡単。 •これを使わずAssetSyncの対象BucketをTokyoリージョンに することで簡易CDNにすることもできる。 •でもかなり安いのでオススメ。 AWS CloudFront
  31. 31. Job-Hubのシステム構成 Gem編
  32. 32. Job-Hubのシステム構成 •unicorn •unicorn-woker-killer •carrierwave •kaminari •devise •aasm •squeel •enum_column3 •asset_sync •ruby-saml Production 代表的なものだけ。もちろんもっといろいろ使ってます。
  33. 33. Job-Hubのシステム構成 •foreman •timecop •rails_footnotes •better_errors •binding_of_caller •letter_opener •mail_view •rails_view_annotator development,test 赤いのは特にオススメ。開発が3倍捗ります。 記事はそのうち書きます…
  34. 34. Job-Hubのシステム構成 ツール編
  35. 35. Job-Hubのシステム構成 …は時間がないので また次の機会に。
  36. 36. Job-Hubのシステム構成 まとめ conclusion
  37. 37. ここにいる皆さんが Job-Hub に 登録する まとめ 皆さん目当てにいっぱいJobが登 録される After all of you register with “Job-Hub”, Many clients will come and bring many jobs. And…
  38. 38. Job-Hub のDyno数が100に 増える (Web*Woker*2x=400Dyno) まとめ 事態を重く見たHerokuがTokyo リージョンを開設する We will increase Dynos up to 100 ( it become 400 dynos), Then heroku will certainly open the Tokyo region !!
  39. 39. 今すぐ Job-Hub に登録 まとめ Heroku Tokyoリージョン開設 三段論法成立 If you register with “Job-Hub” right now, You can see Tokyo region very soon. syllogism
  40. 40. 時間の都合上ご紹介できない情報も多々 ありました。逐次 Job-Hub マガジン で 発表させていただきます。ぜひチェック してくださいね! もし知りたい情報のリクエストがあれば、できるだけお応えしま す。 Qiita: http://qiita.com/Oakbow/ Job-Hubマガジン: http://mag.jobhub.jp/ Twitter:@oakbow7 Mail:oakbow@jobhub.jp
  41. 41. ご清聴ありがとうございました。 終わり

×