Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Heroku Real World

wtnabe
August 29, 2015

Heroku Real World

Kanazawa.rb meetup #36 で喋った、リアルに Heroku を使ってあれこれ助かったけど工夫もそれなりに必要でした、なお話

wtnabe

August 29, 2015
Tweet

More Decks by wtnabe

Other Decks in Programming

Transcript

  1. Heroku Real World
    @wtnabe
    Kanazawa.rb meetup #36
    2015-08-29 ( Sat ) at IT Plaza MUSASHI

    View full-size slide

  2. お品書き
    Herokuで⼿に⼊る環境
    Herokuならではの課題
    ぶっちゃけおいくら
    まとめ

    View full-size slide

  3. Herokuで⼿に⼊る環境

    View full-size slide

  4. 基本的なサーバ
    Web & App サーバ
    ポチッだけで簡単パワーアップ
    MONEY で解決
    Office Hour くらいなら無料枠で ok
    つまり staging は無料で⽤意できる
    Deploy の Rollback 対応

    View full-size slide

  5. データベース、SMTPほか
    DBMS ( PostgreSQL / MySQL / MongoDB )
    KVS ( Memcache / Redis )
    SMTP / Inbound Mail サーバ
    Log サーバ
    パフォーマンス監視

    View full-size slide

  6. もちろんバックアップも
    DBMS⾃動バックアップ
    Log⾃動アーカイブ&バックアップ
    パフォーマンス監視(New Relic)は残念な
    がら無料だと7days retention

    View full-size slide

  7. Herokuの魅⼒は
    とにかく豊富な
    連携サービス

    View full-size slide

  8. CIでも特別扱い
    CircleCIやCodeshipなど簡単に⾃動deploy
    できるように配慮してくれてる

    View full-size slide

  9. Build Pipeline
    stagingでdeploy、検証したものをそのまま
    productionへ反映可能(1s deploy)

    View full-size slide

  10. Herokuならではの課題

    View full-size slide

  11. Herokuならではの課題
    固定IPアドレスがない
    サーバが遠い ( US or Euro Region )
    なんだかんだでインフラの知識要ります

    View full-size slide

  12. 固定IPアドレスがない

    View full-size slide

  13. 何が困るのか?

    View full-size slide

  14. Naked Domain + SSLで困る

    View full-size slide

  15. Naked Domainとは
    example.com みたいなやつ
    ホスト部分がない
    www.example.com なら www がホスト
    Apex Domain とも呼ぶ

    View full-size slide

  16. SSLとは
    Secure Socket Layer
    通信経路の保証と暗号化を⾏う

    View full-size slide

  17. SSLとDNSと固定IP
    SSL証明書は基本的にホスト名込み
    逆引きを要求されることが多い
    固定IPがなくてもCNAME使えればOK
    ワイルドカード、IPアドレス証明書、などなど説明のあやしい部分
    が分かる⼈は無視してね

    View full-size slide

  18. Naked Domainと
    CNAME, ANAME
    CNAMEにはホスト名が必要
    Naked Domain で CNAME はマズい
    不可能じゃないけど不具合に繋がる
    親切なサービスは設定不可にしてる
    Route53拡張のANAME (ALIAS)ならOK

    View full-size slide

  19. ⾃前BINDじゃ対応できない

    View full-size slide

  20. ANAME対応DNSサービス
    AWS Route53
    ただしAWSサービス向けのみ
    DNSimple / DNSMadeEasy
    Gehirn DNS / Dozens

    View full-size slide

  21. オススメ
    サービスが少なくて円建て決済
    Gehirn DNS (1ゾーン2円/⽇)
    サービスが多くてまるっと安く
    DNSMadeEasy (10ゾーンまで$29.95/y)

    View full-size slide

  22. ちなみに
    EngineYardはAWSの固定IPサービス使える
    固定IP費⽤はざっくり450円/⽉くらい
    ドメインが1つならDNSのサービス契
    約するより固定IPの⽅が安い
    120円/$ で計算

    View full-size slide

  23. 続きまして

    View full-size slide

  24. サーバが遠い
    2015-08時点で
    Tokyo Regionがないので通信が重い
    ユーザーへのレスポンスもあるけどプログラムがこの通信を加味
    していないと途端にパフォーマンス低下
    ⾔うなれば 通信の N + 1 問題

    View full-size slide

  25. 例えばサムネイル⽣成

    View full-size slide

  26. PaaSのストレージ
    repos 以外は揮発する
    画像などは外部のオブジェクトストレー
    ジ(ex, AWS S3)への保存が基本

    View full-size slide

  27. そして
    S3などはTokyo Region
    AppサーバはUS Region
    判断のしどころ
    S3をUSにおいてCloudFrontでTokyoに持ってくる⽅法も

    View full-size slide

  28. 以下に全部時間が掛かる
    1. 元画像の保存
    2. 元画像の取得
    3. サムネイル画像の保存

    View full-size slide

  29. Dynoのパワー(≒マニー)
    だけでは解決できない!!

    View full-size slide

  30. どうする!?

    View full-size slide

  31. Workerを追加して
    ⾮同期で処理する

    View full-size slide

  32. えっ?結局お⾦?

    View full-size slide

  33. だけじゃない!

    View full-size slide

  34. ⾦と腕の両⽅要る

    View full-size slide

  35. Railsで⾮同期処理
    1. Queueを積むストレージを⽤意
    2. Queueを処理するサーバを⽤意
    3. 同期的処理の記述からQueueを処理する
    Workerにジョブを投げる記述に変更

    View full-size slide

  36. 詳しくは別枠で

    View full-size slide

  37. 再びマニーの話

    View full-size slide

  38. Workerは節約できる
    Heroku の Dyno は使っただけ課⾦
    Worker Dyno は 24/7 では必要ない
    Queue として使う Redis などは無料枠で
    も⼗分

    View full-size slide

  39. Process Scheduler
    Process Scheduler | Heroku Dev Center
    必要な時だけ Dyno を起こすことのでき
    る add-on
    これ⾃⾝はコントロールする Dyno が複
    数になったら有料

    View full-size slide

  40. ぶっちゃけおいくら

    View full-size slide


  41. Item Price ( USD / mon )
    Web Dyno 7 - 25
    DBMS 9
    Worker Dyno 3.5 - 12.5
    SSL 20
    Sum 7 - 66.5
    DB も SSL も不要なら $7
    DB と Worker アリで $19.5+
    SSL がちょっと⾼い

    View full-size slide

  42. Sum 7 - 66.5 USD/mon
    フルマネージドサーバ
    deployの⾃動化もrollbackも対応
    セキュリティとか考えなくていい
    DBMS、ログのバックアップも⾃動
    パフォーマンス監視付き

    View full-size slide

  43. 安い
    stagingは限りなく安くできるし
    個⼈の感想です

    View full-size slide

  44. Herokuで解決できるもの
    CPUとメモリ
    アプリケーション環境のセットアップ
    アプリケーションの監視体制
    Buildpack, Bundler ( gem ), 様々な連携サービスなどで解決

    View full-size slide

  45. 近い環境も簡単に作れる
    BundlerやComposerで必要なものは⼊る
    ForemanでWorker DynoもRedisサーバも
    Buildpackの深淵に触れなければ楽勝
    少なくとも⾃前サーバ + Vagrantよりは
    ただしWindowsを除く

    View full-size slide

  46. Herokuで解決できないもの
    ストレージ
    通信コスト
    ⾮同期に回していいがにするスキル
    かゆいところの⽣々しい設定

    View full-size slide

  47. これまでの⼈へ

    View full-size slide

  48. アプリとインフラ
    Herokuならではの課題はある
    あまり表に出てこないけど、重要
    インフラ分かる⼈のニーズは消えない
    が、作業単価ベースではきつくなる
    アプリもインフラもイマドキのツールも
    分かる場合は捗り具合ハンパなし

    View full-size slide

  49. これからの⼈へ

    View full-size slide

  50. スピードと成⻑を求める
    典型的なWeb系の
    スタートアップに向いてる

    View full-size slide

  51. 君たち向けのサービス

    View full-size slide

  52. 来れ若⼈!!
    まずは Kanazawa.rb の meetup へ!!!

    View full-size slide