Download - アカツキはどのようにAWSを活用しているか #jawsug
![Page 1: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/1.jpg)
2014/05/20 JAWS UG田中 勇輔
![Page 2: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/2.jpg)
田中 勇輔 @csouls, @yusuket• 株式会社アカツキ
• CTOではない
• 責任者…?責任感は強い方です!
![Page 3: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/3.jpg)
アカツキ• ソーシャルゲーム出しています
• ブラウザゲームは、Ruby on Rails
• ネイティブゲームは、C++ と Ruby on Rails
![Page 4: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/4.jpg)
インフラ 構成VPC ELB EC2 RDS
ElastiCache CloudFront
S3
![Page 5: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/5.jpg)
構築• CloudFormation + Chef + Capistrano
• CloudFormation template
• https://gist.github.com/yusuket/40e2ec7811cf1cd3d703 ( yusuket の public gist )
![Page 6: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/6.jpg)
デプロイ
![Page 7: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/7.jpg)
デプロイ• 管理用(踏み台)サーバ[Public zone]からWeb
サーバ群[Private zone]に対してCapistranoを実行
![Page 8: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/8.jpg)
デプロイ• デプロイ内容をどうやって決めているか?
• Gitのタグ
# 検証が終わった環境から、本番用の production/yyyymmddhhmmss タグを作るgit tag production/yyyymmddhhmmss!# git tag 結果は文字列の昇順にソートされているので、# 最後に表示される production タグをもとにデプロイするgit tag | grep "^production" | last
※Capistranoでの実装: http://hackerslab.aktsk.jp/technology/2014-04-29-faster-deploy/
![Page 9: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/9.jpg)
デプロイ• デプロイ先をどうやって決めているか?
• AWSのタグ
• Webサーバの数は変動するので、プログラムで判断する為には、インスタンスの「役割」を明確にする必要がある
※Capistranoでの実装: http://hackerslab.aktsk.jp/technology/2014-04-29-faster-deploy/
![Page 10: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/10.jpg)
デプロイ• データの更新も同時に実施
• Assets on Cloud パターン (静的コンテンツ)
• Rails だと、asset_sync Gem を使うと簡単
※ http://d.hatena.ne.jp/lettas0726/20130320/1363773153
![Page 11: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/11.jpg)
デプロイ• クライアントが予めダウンロードしておく画像やサウンドデータの更新
• 仕組みは、S3のデータとレポジトリの差分を毎回アップロード
• 毎回S3のデータをダウンロードするのは遅いので、S3上にFilepath + MD5のリストを作っておいて、そのリストとレポジトリを比較
![Page 12: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/12.jpg)
リスト取得
def s3_md5_list(bucket, platform) obj = bucket.objects.with_prefix("#{platform}/md5_list/").sort_by{|o| o.last_modified}[-1] return [] if obj.nil? obj.read.each_line.map do |line| line.chomp.split("\t") endend
• 直接S3上のファイルを操作できる AWS-SDK が素晴らしい
![Page 13: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/13.jpg)
RDSの話
![Page 14: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/14.jpg)
RDS• 2014/4 全国TV-CM開始!
• RDS Master DB Instance type は既に
db.cr1.8xlarge (最大サイズ)
• CPU使用率は30%弱
• ユーザ数は最大3~4倍を想定。普通に考えてCPUリソースが枯渇する
![Page 15: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/15.jpg)
立ち止まれない運用
![Page 16: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/16.jpg)
迫り来るCM
![Page 17: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/17.jpg)
どうしたか?
![Page 18: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/18.jpg)
RDS
• 全データベース の
innodb_flush_log_at_trx_commit を 0 に、
sync_binlogを 0 に
![Page 19: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/19.jpg)
どういうことか?
![Page 20: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/20.jpg)
RDS• Commit 時の REDO ログと binlog の fsync() を止める
• srv_sync_log_buffer_in_background() によって、1秒置きにログは fsync() されている
• 障害時に最大1秒間のデータが消失する可能性がある!(Master DB では普通やらない)
![Page 21: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/21.jpg)
RDS
1. ユーザが来ないよう祈る
2. アプリケーションと構成を変える
(DynamoDB導入、Shading 等)
→ 3. 最大1秒のデータ消失を許容する
![Page 22: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/22.jpg)
RDS
• 結果、CPU使用率は 5% 程度に
• WriteIOPSも少し下がった
• TV-CM乗り切った
• パラメータは戻す予定。余程のことが無い限り、参考にしない方が良いと思います
![Page 23: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/23.jpg)
監視
![Page 24: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/24.jpg)
CloudWatchのアラートをChatに流すのが良い
![Page 25: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/25.jpg)
監視• Pull型のメールと違い、すぐに気付ける
• 「この辺がやばそう」「自分はここを調べる」という会話が同じコンテクストの中ですぐに出来る
![Page 26: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/26.jpg)
監視• https://github.com/blackline/amazon-
cloudwatch-to-hipchat を使ってます
![Page 27: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/27.jpg)
他にも苦労や工夫の話はたくさんあるのですが、今日はこ
れくらいが限界です
![Page 28: アカツキはどのようにAWSを活用しているか #jawsug](https://reader033.vdocuments.pub/reader033/viewer/2022051112/558775fed8b42a786f8b4687/html5/thumbnails/28.jpg)
ありがとうございました!5分は短い…