Cookpad Tech Kitchen #1でWebアプリ+AWSのスケーリングについて学んできた

Posted by rhoboro on 2016-08-25

先日申し込んでいたCookpad Tech Kitchen #1に40/121人の確率で当たったので参加してきました。
結論から言うと、とてもとてもよかったです。
ハンズオン形式でしたが、スケーリングという個人の趣味レベルでは実践する機会の少ない内容に触れることができ、いろいろとモチベーション上がりました。

スケーラブルなWebインフラ構築

これが今回のテーマでした。
普段の業務がスマホアプリ開発なため、インフラは個人的には触れる機会が少ない分野です。 ただ、アプリケーション開発者として避けて通れないご時世ですし、興味もかなりあるので個人的には嬉しいテーマでした。
ちなみにCoocpad Tech Kitchenは今回が初開催で、今後はインフラに限らずいろんなテーマを扱っていきたいとのことです。
楽しみですね。(すでに#2が予定されています。次回はiOSに関するもののよう。)

やったこと

@ryot_a_raiさんが行うAWS上でのWEBアプリ実行環境構築、スケーリング作業を
@kani_bさんの解説を聞きながら、みんなで真似するハンズオン形式でした。
具体的には、下記のような内容です。

  1. AWSであらかじめ用意されたRailsアプリを動かす環境作り
    (VPC, EC2, セキュリティグループ...)
  2. Railsアプリを動かして、ベンチマークとる
  3. SQLのチューニングをいくつか
    • slow queryログの設定をしてslow queryを見つける
    • インデックスをはる
    • N+1問題
  4. ベンチマークとる&グラフで可視化
  5. Railsアプリのプロセス、スレッド数の調整
  6. ベンチマークとる&グラフで可視化
  7. DBをRDSに移行させて、WebサーバーをNginxに変更
  8. ALBの設定して、オートスケーリングの設定
  9. ベンチマークとる&グラフで可視化

途中で時間がなくなり、この日のハンズオンはここまででした。
この後の内容としては、Read-write splittingなどの準備もされてたようです。

ちなみにこのハンズオンのために、AWSからクーポン$50分をいただきました。
おかげで使ったことないc3.xlargeのEC2インスタンスをボコボコたてまくりました。 Amazon Web Serviceさん太っ腹過ぎ(笑)

勉強になった点

スケーリングの部分に関して、勉強になったなぁと思ったことを書き出してみました。

  1. CPUの性能引き出すならプロセスやスレッド数の調整が必要
    • CPUを食う処理をしてたらスレッド増やし過ぎるとブロックしてしまうこともある
    • DBサーバーに投げるだけの軽い処理ならスレッド数少しくらい多めでもいける
  2. ソート済み状態でDB保存しておくことで、走査をしないで済ませる
  3. SQLによる問い合わせ数はできる限り減らす
    • N+1問題を避ける
    • DBとアプリ間の通信にも時間がかかる
    • 2回の問い合わせよりも、1回の問い合わせで欲しい情報を得るSQLを組み立てる
  4. 同じマシン内のリバースプロキシはUnixドメインソケットで
    • TCPの3Way-handshakingとか無駄
  5. Application Load Balancer
    • AWSで出たばかりのサービス
    • ELBの後継
    • LAN内でも使える
  6. 参加者の情報をリアルタイムで集めるのにGoogleフォーム便利
    • ベンチマーク用に参加者それぞれのEC2インスタンスのIPが必要だった
    • 自動でスプレッドシートにIPが記載されていく
    • 大勢で使っても手動マージの必要がない
  7. htop使いやすい
    • topの改良版みたいなやつ
    • CPUやメモリの使用率をこんな感じで視覚化して表示してくれる

htop

一部スケーリング関係ないものも混ざっていますが、だいたいこんな感じでした。
ココに書いてない部分もこまめに詳細な解説をいれてくれていたので助かりました。

懇親会

ハンズオンのあとに懇親会がありました。
しかもその懇親会、なんと鎌倉からプロの料理人をお招きしており、とても豪華で美味しい料理が並んでいました。
下の写真はご本人によるメニュー紹介のシーン。
加藤ポークの低温ローストはじっくりと3時間かけて焼き上げてくれたそうです。

tech-kitchen-party-menu

こちらはメインのAWSをイメージして作ったというAWSライスサラダ。
桃やマンゴー、サーモン、トマトなど、AWSをイメージさせるオレンジ色の食材をふんだんに使ったちらし寿司(のようなもの)でした。 こちらの飾りはCookpadの社員さんが作ったようです(笑)

tecn-kitchen-party-aws-gohan

どの料理もめちゃくちゃ美味しかったです!
にこだわっているCookpadさんならではの懇親会でした。

まとめ

とても実践的な内容で、解説も詳しく、さらには懇親会の料理も美味しいという大満足の勉強会でした。
実際のサービスでチューニングする場合は、今回の項目ひとつひとつがもっと奥が深いものになると思いますが、 「基本的なスケーリング、チューニングの全体的な流れを知れた」という点ですごくためになりました。 参加者には資料も配布していただけるようなので、配布されたらもう一度自分で試し、身につけた技術は社内や他の勉強会などで共有できたらなと思います。
Coocpadさん、AWSさん、料理を作ってくれたシェフの方、ありがとうございました。