phpstudy98

28
AWS のののののののの の 98 の PHP ののの 2016.01.27 の のの @m_norii

Upload: masanori-hayashi

Post on 12-Jan-2017

2.264 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Phpstudy98

AWS の最果てを見た日第 98 回 PHP 勉強会

2016.01.27林 正紀 @m_norii

Page 2: Phpstudy98

About me• 林 正紀 (HAYASHI Masanori)• 1974 年 09 月 12 日生 (41 歳 )• 埼玉生まれ埼玉育ち埼玉ふじみ野在住• 埼玉大学/大学院・数学専攻• 埼玉土着エンジニア• EMTG     所属

• @m_norii• http://norii.hatenablog.com/• https://www.facebook.com/m.norii

Page 3: Phpstudy98

http://emtg.co.jp/archives/2975

http://theyellowmonkeysuper.jp/

Page 4: Phpstudy98

TYMS 検定

• アーティストに関するクイズを 50 問出題• 回答時間は 30 分間• 成績優秀者には、アーティストノベルティの

プレゼントの他、 SNS 運営ボランティアになれるかも

Page 5: Phpstudy98

画面構成TYMS 検定

Q1 ・・・・・・○ 選択肢 1○ 選択肢 2○ 選択肢 3

Q2 ・・・・・・○ 選択肢 1○ 選択肢 2○ 選択肢 3

Q50 ・・・・・○ 選択肢 1○ 選択肢 2○ 選択肢 3

回答を送信

TYMS 検定

回答を受け付けましたご参加ありがとうございました。

DB へ登録

Page 6: Phpstudy98

ビジネス面での要件

• ボランティアスタッフ募集については、この検定のあと、全国で面接を行う日程も決まっているため、やり直しが効かない絶対に落とすわけにいかない• 各種メディアにも露出しているので、実施当

日は相当のアクセス集中が予想される

Page 7: Phpstudy98

技術面で取った戦略

• 限定 30 分間企画なので、ショットでこの企画専用の最強サーバ群を構成する• 当然終わったら即削除

• プログラム処理はとにかく無駄を排除。軽く。• DBも回答データは 1カラムで JSON化して保存

• 回答の分析は企画終わってからやればいいので

• 万一 DB に保存できない時のためにローカルディスクにも回答保存• それでも落ちた場合用にメールでの投稿受付も

準備

Page 8: Phpstudy98

テーブル定義

• 回答データは 1 カラムに JSON 化して保存

CREATE TABLE `certification` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `answer` mediumtext NOT NULL COMMENT ' 回答 ', `created_time` datetime NOT NULL COMMENT ' 作成日 ', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

Page 9: Phpstudy98

投稿データ登録プログラム ( 抜粋 )<?php $answer = json_encode($_POST);

// ログへ書き込み list($usec, $timestamp) = explode(' ', microtime()); $logPath = sprintf('%s%s%s.txt', LOG_DIR, date('YmdHis', $timestamp), substr($usec, 2)); file_put_contents($logPath, $answer . PHP_EOL);

//DB へ書き込み $dsn = sprintf('mysql:dbname=%s;host=%s', DB_NAME, DB_HOST); $sql = sprintf("INSERT INTO %s (answer, created_time) VALUES (:answer , :created_time)", TABLE_NAME); try { $pdo = new PDO($dsn, DB_USER, DB_PASS); $stmt = $pdo->prepare($sql); $stmt->execute([':answer' => $answer, ':created_time' => date('Y-m-d H:i:s', $timestamp)]); } catch (Exception $e){ file_put_contents(ERROR_LOG_PATH, $e->getMessage() . PHP_EOL, FILE_APPEND); } // 受付完了ページへリダイレクト header('Location: https://example.com/done');

Page 10: Phpstudy98

サーバ構成

暖気申請

Failover 時はS3 静的ホスティング

でメール投稿で受付け

R3.4xlarge 10 台16 vCPU

メモリ 122GiB

Db.m4.10xlarge40 vCPU メモリ

160GiB

Page 11: Phpstudy98
Page 12: Phpstudy98

結果

• 企画は 30 分間、滞り無く完了• Web 、 DB とも負荷は余裕でさばいた

Page 13: Phpstudy98

しかし実はその裏でAWS の最果てを見た男がいた

Page 14: Phpstudy98

17 : 00 専用環境構築開始

19 : 00 RDS を検証用のスペックから db.m4.10xlarge へ変更

20 : 00 ?????????????

20 : 30 ?????????????

21 : 00 ?????????????

22 : 00 すべてのサーバ設置完了

23 : 00 TYMS 検定開始

当日のタイムテーブル

Page 15: Phpstudy98

RDS インスタンスクラス変更

変更中

Page 16: Phpstudy98

1 時間後

Page 17: Phpstudy98

変更中

Page 18: Phpstudy98

変わってない…

ネットで調べる限りインスタンスクラス変更は 5 分程度で終わるはずなのに・・・

Page 19: Phpstudy98

AWS サポートに問い合わせる

Page 20: Phpstudy98

17 : 00 専用環境構築開始

19 : 00 DB サーバを検証用のスペックから db.m4.10xlarge へ変更

20 : 00 DB サーバのスペックアップが完了しないため、AWS サポートへ連絡

20 : 30 ????????????????????

21 : 00 ????????????????????

22 : 00 すべてのサーバ設置完了

23 : 00 TYMS 検定開始

Page 21: Phpstudy98

30分後AWSサポートから

回答がきた

Page 22: Phpstudy98
Page 23: Phpstudy98

キャパシティ枯渇

Page 24: Phpstudy98

17 : 00 専用環境構築開始

19 : 00 DB サーバを検証用のスペックから db.m4.10xlarge へ変更

20 : 00 DB サーバのスペックアップが完了しないため、AWS サポートへ連絡

20 : 30 AWS から「 db.m4.10xlarge のリソース枯渇」の連絡

21 : 00 ????????????????????

22 : 00 すべてのサーバ設置完了

23 : 00 TYMS 検定開始

Page 25: Phpstudy98

スナップショットから復元

• とのことなので、スナップショットから db.r3.8xlarge に変更して復元

Page 26: Phpstudy98

17 : 00 専用環境構築開始

19 : 00 DB サーバを検証用のスペックから db.m4.10xlarge へ変更

20 : 00 DB サーバのスペックアップが完了しないため、AWS サポートへ連絡

20 : 30 AWS から「 db.m4.10xlarge のリソース枯渇」の連絡

21 : 00 検証 DB のスナップショットから復元、db.r3.8xlarge で再立ち上げ

22 : 00 すべてのサーバ設置完了

23 : 00 TYMS 検定開始

Page 27: Phpstudy98

教訓

• AWS といえど、リソースは無限じゃない• ショットでサーバ強くするにしても

最低でも 1 日前から準備したほうが身のため• AWS サポートには入っとけ(本当にありがとうございました )

Page 28: Phpstudy98

エンジニア募集中 !http://emtg.co.jp/recruit