Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

おいしいherokuの使い方

10,087 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. ご清聴ありがとうございました。 終わり

×