ので、そのメモ! @イベント&コミュニティスペース dots. !
概要
ISUCON5 予選 ではサーバとしてGoogle Compute Engineが採用されました。 そこで、ISUCON予選が終わった後に、報告会をします。 ISUCON予選に参加した方も、そうでない方も、お気軽にお越しください。
入り口に貼ってくれてた! #gcpug #eventdots pic.twitter.com/jD14lCtcHU
— 真 (@sinmetal) 2015, 10月 6
ISUCON で惨敗した話 by @rrreeeyyy
- 今日の会場にはどんな人がいるのかな?
- 1 〜 5 全てに出場している人も!
- 本線出場者も一人!
- isucon とは。その紹介
- 登壇者の出場歴
- isucon は 3 から参加を続けている
- 今回の isucon 5
- 事前準備としてなにをやったか
- 登壇者チームの最終スコアは 7,8000 くらいだった
- isucon 4 の予選問題で復習、あとはGCP での手順確認
- 社内 ISUCON の復習
- モニタリングとかサーバ作業に必要なツールを入れるやつを作っておいた
- https://github.com/rrreeeyyy/isucon5-initialize-itamae
- sysctl, limits.conf の適用とかもこの辺でガッと。
- (かぜぶろの術?秘伝のタレの適応。)
- このあたりがネックになることは有り得るので
- nginx をビルドするやつも
- これのおかげで開戦後1,2時間が浮いた
- 方針
- 大きなアプリの改変はしないようにした
- 過去の予選ではやらなくても通過スコアに到達してた
- isucon 4 では実装しきれなかったりとかも
- 最初にサイトの全機能をいじって把握する
- コードの理解に助けになった(きがする)
- 変更したときにデグレったか確認するときにも役立つ
- レギュレーションの得点計算式をしっかり理解する
- POST は点数にならないとかリダイレクトは点数低いとか
- ベンチマークを回して遅いパスだけチューニングするように
- https://github.com/matsuu/kataribe
- 大きなアプリの改変はしないようにした
- 今回のアプリ
- ISUxi
- isucon5-qualify
- 「友達のコメント」の表示が曲者
- 予選
- 所感
- 限られた時間で優先順位を付けて対応できるか、が isucon のキモのひとつ
- いかに当たり前のことが当たり前にできるか。「当たり前」の幅を普段から広げていく必要がある
- 出るだけならタダだし、色々学べてサイコー
- 予習復習も合わせて行うと技術的にも色々学べる!
- (予選に出るだけだとそんなに。。)
- 「来年は勝つぞ!」
- isucon in GCP についての感想
【※補足】
@rrreeeyyy なるほど。http://t.co/960SP9ROwy ここで「去年までの AWS だったときは、これがまた不安定だった」ってあったので、去年とはやり方違うからこれでAWSが不安定っていわれるとかわいそうだなと思ったのでした
— fujiwara (@fujiwara) 2015, 10月 7
ISUCON予選の課題をGoogle Cloud Platformを全て使って頑張ってみた by @sinmetal
↓これがテーマ
ISUCON 予選を AppEngine に乗せるとどうなるの #gcpug #eventdots
— れい (Yoshikawa Ryota) (@rrreeeyyy) 2015, 10月 6
- 今回は isucon に参加しなかったけどおはなしするよ
- TOPGATE から来ますた
- GCP で WebApp を作る、となったときの選択肢
- GAE
- GCE
- GKE(Google Container Engine)
- 今日はこれについては話しません
- isucon 5 は「GCE 上に構築されたアプリケーションのチューニング」だけど...
- 今回は、「このアプリケーションを GCP 全体で本気で殴る場合はどうなるか」のお話をするよ!
- DB の選択
- static contents の配信
- Cloud Storage で配信する
- スケールは勝手にやってくれる
- リクエストが GCE にまでこないので負荷軽減にも役立つ
- Cloud Storage で配信する
- Edge Cache の活用
- Google のデータセンターがない場所にもたってるキャッシュサーバ
- これにのせるのは非常に簡単
- Response Header にセットするだけ!
"Cache-Control", "public, max-age=60"
- age はベストエフォート
- 明示的に delete できない
- 料金は Outgoing だけなのでお得
- Response Header にセットするだけ!
- GAE
- PaaS
- AppServer = コンテナ
- 言語?
- GAE を使う場合の DB の選択
- Cloud SQL
- やっぱり遅い
- App Engine からの接続認証をサポート
- App Engine と同じ Zone で動作する
- Cloud Datastore
- GAE のデフォルトの DB
- 非常に高いスケーラビリティ
- Query は simple なものしか使えない
- 集計関数、JOIN はサポートなし
- Cloud BigTable
- Datastore の低レイヤもこれと同じ
- Datastore と比べると高い、速い
- Query は simple なものしか使えない
- 集計関数、JOIN はサポートなし
- DB in Compute Engine
- Global IP Addr でのアクセスになっちゃう
- Cloud SQL
- Cloud Datastore らしい構成について
- static contents の配信
static_dir
指定で Edge Cache にも自動で載せてくれる
- Memcache
- KVのシンプルな cache
- 無料
- expire のタイミングはベストエフォート
- session 情報の保存とか
- API のレスポンスまるごととか
- Datastore の front として(
goon
)
- 非同期処理
- RPC 呼び出しを複数回行うときはそれを非同期に!
- GAE からは、基本的に全てが RPC(Remote Procedure Call) になる
- Datastore に join はないので、Kind ごとに
- Go だと goroutine が使える!
- RPC 呼び出しを複数回行うときはそれを非同期に!
GCPにおけるCloud Traceを使った正しいパフォーマンスチューニング by @soundTricker31
(Cloud Trace のデモをしながら)
- GAE の RPC をトレースして可視化してくれる、それが Cloud Trace
- appengine 限定。MVMs もいける...?
- 有効化することで遅くなることはない!
- 意外にいろんなものを call していることがわかる
- memcache 見過ぎ問題
- 速いよね、と、気軽に Memcache を使いすぎちゃってる問題。
- memcache も 数msec と、大して早くはない
- あまりにも遅い場合は「分析情報」が出るようになった
- 日次(前日と比較したもの)のレポートも出してくれる!
- デフォルトで log と連携しているのもいい(duration がリンクになってる)
- カスタムレポートを作ることもできる!
(GCP で完全無停止でデプロイをしていることについてのおはなし、のさわり)
- GAE のいいところ、 URL に app のバージョンを指定したらそのバージョンのアプリにアクセスできるところ
- それを GCE と docker を使って実現している
雑魚なのでISUCON失敗した話 by @yodatomato
- 真の惨敗について
- 準備
- isucon 4 の予習
- AWS 遅くて捗らない...GCE だと捗る!
- my.cnf は /etc/my.cnf じゃない
- isucon 4 のベンチは 14000 くらいまで!
- いける!!
- 結果、スコア 2000 ...
- やれたこと
- 調子に乗っちゃった
- やはりここでも my.cnf の罠
- 油断と失敗の原因
- いろんな作業を並行してやったせいで、パフォーマンスの上がり下がりの要因がわかってなかった
- メンバーのドタキャンとか
- Go の実装が使えなかったとか
- 得た知見
- GCE, EC2 よりもシンプルに使える
- 結局自分との戦い
- 雑兵 Meetup というコミュニティを立ち上げました!
- 10/28 に第1回やるよー
isucon 5 予選をどう惨敗したか
先ほどの LT のスライドです https://t.co/qBnTUeXm79 #gcpug #eventdots
— takady (@takady7) 2015, 10月 6
- 前職の同期の方2人とチームを組んででた
- 「Node.js の実装はなくなりました。」
- これが isucon か、と
- 開始が1時間遅れたことで
- 余裕もてた
- 最初の作業誰が何をやるかを確認できた
- やはり my.cnf が読み込めないw
- AppArmor のせい
- 最初のベンチマーク
- 初期200点
- index貼ったり nginx での静的コンテンツ配信したり
- これで 2000 に
- 次に redis 化
- footprints テーブルのデータをもっていってみた
- 7000 になった
- 細かい修正でスコアを稼いだ
- 10000 くらいになった
- 再起動テストをした
- 8700 になった
- おそらくキャッシュがクリアされたことによるもの
- キャッシュを温めるためのスクリプトを組めば良かったかも
- さらに細かい修正をした
- 9700 に
- 逆転を狙った
- スキーマ変更には手を出してなかったので、join をなくすための非正規化に取り組むことに
- comments テーブルに entry_user_id を追加
- スキーマ変更には手を出してなかったので、join をなくすための非正規化に取り組むことに
- そしたら 250 になった、小学生みたいなスコア...
- revert した
- まとめ
- 楽しかった!
- 複数人が同じサーバでコード修正するのだめだなと
Activity Report - 2015 Sept - ISUCON5
- Google 佐藤さんの、Google 社内への ISUCON レポートを紹介!
- isucon 4 のとき、やっぱりインスタンスガチャの問題は重く受け止められていた
- 761名の参加者!
- 90以上のブログポスト!
- 1700以上のツイート数!
- Borg というコンテナ技術がインスタンスガチャ問題を低減化している!
- GCE も Borg の上で動いてる!
- スタートアップガイドも頑張って書きました!
- プリエンプティブインスタンス=Borg のプライオリティが低いインスタンス。
ツールつくりました
LTでやったISUCON5予選のベンチを簡単にまわせるスクリプトです。 https://t.co/IMO8l1kD8U #gcpug
— 月曜日 (@karupanerura) 2015, 10月 6