Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
AWSの最果てを見た日
第98回PHP勉強会
2016.01.27
林 正紀 @m_norii
About me
• 林 正紀 (HAYASHI Masanori)
• 1974年09月12日生 (41歳)
• 埼玉生まれ埼玉育ち埼玉ふじみ野在住
• 埼玉大学/大学院・数学専攻
• 埼玉土着エンジニア
• EMTG 所属
• @m_nor...
http://emtg.co.jp/archives/2975
http://theyellowmonkeysuper.jp/
TYMS検定
• アーティストに関するクイズを50問出題
• 回答時間は30分間
• 成績優秀者には、アーティストノベルティのプ
レゼントの他、SNS運営ボランティアになれる
かも
画面構成
TYMS検定
Q1 ・・・・・・
○ 選択肢1
○ 選択肢2
○ 選択肢3
Q2 ・・・・・・
○ 選択肢1
○ 選択肢2
○ 選択肢3
Q50 ・・・・・
○ 選択肢1
○ 選択肢2
○ 選択肢3
回答を送信
TYMS検定
回答を受...
ビジネス面での要件
• ボランティアスタッフ募集については、
この検定のあと、全国で面接を行う日程も決
まっているため、やり直しが効かない
絶対に落とすわけにいかない
• 各種メディアにも露出しているので、実施当日
は相当のアクセス集中が予想さ...
技術面で取った戦略
• 限定30分間企画なので、ショットでこの企画
専用の最強サーバ群を構成する
• 当然終わったら即削除
• プログラム処理はとにかく無駄を排除。軽く。
• DBも回答データは1カラムでJSON化して保存
• 回答の分析は企画...
テーブル定義
• 回答データは1カラムにJSON化して保存
CREATE TABLE `certification` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`...
投稿データ登録プログラム(抜粋)
<?php
$answer = json_encode($_POST);
//ログへ書き込み
list($usec, $timestamp) = explode(' ', microtime());
$logP...
サーバ構成
暖気申請
Failover時は
S3静的ホスティングで
メール投稿で受付け
R3.4xlarge 10台
16 vCPU
メモリ122GiB
Db.m4.10xlarge
40 vCPU メモリ160GiB
結果
• 企画は30分間、滞り無く完了
• Web、DBとも負荷は余裕でさばいた
しかし実はその裏で
AWSの最果てを見た男がいた
17:00 専用環境構築開始
19:00 RDSを検証用のスペックから db.m4.10xlarge へ変更
20:00 ?????????????
20:30 ?????????????
21:00 ?????????????
22:00 す...
RDSインスタンスクラス変更
変更中
1時間後
変更中
変わってない…
ネットで調べる限り
インスタンスクラス変更は5分程度で終わるはずなのに・・・
AWSサポートに問い合わせる
17:00 専用環境構築開始
19:00 DBサーバを検証用のスペックから db.m4.10xlarge へ変更
20:00 DBサーバのスペックアップが完了しないため、
AWSサポートへ連絡
20:30 ???????????????????...
30分後
AWSサポートから
回答がきた
キャパシティ枯渇
17:00 専用環境構築開始
19:00 DBサーバを検証用のスペックから db.m4.10xlarge へ変更
20:00 DBサーバのスペックアップが完了しないため、
AWSサポートへ連絡
20:30 AWSから「db.m4.10xlarg...
スナップショットから復元
• とのことなので、スナップショットから
db.r3.8xlargeに変更して復元
17:00 専用環境構築開始
19:00 DBサーバを検証用のスペックから db.m4.10xlarge へ変更
20:00 DBサーバのスペックアップが完了しないため、
AWSサポートへ連絡
20:30 AWSから「db.m4.10xlarg...
教訓
• AWSといえど、リソースは無限じゃない
• ショットでサーバ強くするにしても
最低でも1日前から準備したほうが身のため
• AWSサポートには入っとけ
(本当にありがとうございました)
エンジニア募集中!
http://emtg.co.jp/recruit
Phpstudy98
Phpstudy98
Upcoming SlideShare
Loading in …5
×

Phpstudy98

2,991 views

Published on

第98回PHP 勉強会 LT発表資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Phpstudy98

  1. 1. AWSの最果てを見た日 第98回PHP勉強会 2016.01.27 林 正紀 @m_norii
  2. 2. About me • 林 正紀 (HAYASHI Masanori) • 1974年09月12日生 (41歳) • 埼玉生まれ埼玉育ち埼玉ふじみ野在住 • 埼玉大学/大学院・数学専攻 • 埼玉土着エンジニア • EMTG 所属 • @m_norii • http://norii.hatenablog.com/ • https://www.facebook.com/m.norii
  3. 3. http://emtg.co.jp/archives/2975 http://theyellowmonkeysuper.jp/
  4. 4. TYMS検定 • アーティストに関するクイズを50問出題 • 回答時間は30分間 • 成績優秀者には、アーティストノベルティのプ レゼントの他、SNS運営ボランティアになれる かも
  5. 5. 画面構成 TYMS検定 Q1 ・・・・・・ ○ 選択肢1 ○ 選択肢2 ○ 選択肢3 Q2 ・・・・・・ ○ 選択肢1 ○ 選択肢2 ○ 選択肢3 Q50 ・・・・・ ○ 選択肢1 ○ 選択肢2 ○ 選択肢3 回答を送信 TYMS検定 回答を受け付けました ご参加ありがとうござい ました。 DBへ登録
  6. 6. ビジネス面での要件 • ボランティアスタッフ募集については、 この検定のあと、全国で面接を行う日程も決 まっているため、やり直しが効かない 絶対に落とすわけにいかない • 各種メディアにも露出しているので、実施当日 は相当のアクセス集中が予想される
  7. 7. 技術面で取った戦略 • 限定30分間企画なので、ショットでこの企画 専用の最強サーバ群を構成する • 当然終わったら即削除 • プログラム処理はとにかく無駄を排除。軽く。 • DBも回答データは1カラムでJSON化して保存 • 回答の分析は企画終わってからやればいいので • 万一DBに保存できない時のためにローカル ディスクにも回答保存 • それでも落ちた場合用にメールでの投稿受付も 準備
  8. 8. テーブル定義 • 回答データは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;
  9. 9. 投稿データ登録プログラム(抜粋) <?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');
  10. 10. サーバ構成 暖気申請 Failover時は S3静的ホスティングで メール投稿で受付け R3.4xlarge 10台 16 vCPU メモリ122GiB Db.m4.10xlarge 40 vCPU メモリ160GiB
  11. 11. 結果 • 企画は30分間、滞り無く完了 • Web、DBとも負荷は余裕でさばいた
  12. 12. しかし実はその裏で AWSの最果てを見た男がいた
  13. 13. 17:00 専用環境構築開始 19:00 RDSを検証用のスペックから db.m4.10xlarge へ変更 20:00 ????????????? 20:30 ????????????? 21:00 ????????????? 22:00 すべてのサーバ設置完了 23:00 TYMS検定開始 当日のタイムテーブル
  14. 14. RDSインスタンスクラス変更 変更中
  15. 15. 1時間後
  16. 16. 変更中
  17. 17. 変わってない… ネットで調べる限り インスタンスクラス変更は5分程度で終わるはずなのに・・・
  18. 18. AWSサポートに問い合わせる
  19. 19. 17:00 専用環境構築開始 19:00 DBサーバを検証用のスペックから db.m4.10xlarge へ変更 20:00 DBサーバのスペックアップが完了しないため、 AWSサポートへ連絡 20:30 ???????????????????? 21:00 ???????????????????? 22:00 すべてのサーバ設置完了 23:00 TYMS検定開始
  20. 20. 30分後 AWSサポートから 回答がきた
  21. 21. キャパシティ枯渇
  22. 22. 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検定開始
  23. 23. スナップショットから復元 • とのことなので、スナップショットから db.r3.8xlargeに変更して復元
  24. 24. 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検定開始
  25. 25. 教訓 • AWSといえど、リソースは無限じゃない • ショットでサーバ強くするにしても 最低でも1日前から準備したほうが身のため • AWSサポートには入っとけ (本当にありがとうございました)
  26. 26. エンジニア募集中! http://emtg.co.jp/recruit

×