Slide 1

Slide 1 text

Webサービスのトラブルの現場
 ~ Webサービスの今と昔 ~
 PHP Conference Japan 2019

Slide 2

Slide 2 text

What is it?
 鳴り止まないアラート…
 天を仰ぐ上司…
 黙々と戦うエンジニア


Slide 3

Slide 3 text

● Webサービスが突然落ちた…
 ● コネクションが溢れてサービス停止…
 ● サーバのload averageが青天井…
 What is it?
 トラブルは突然に


Slide 4

Slide 4 text

What is it?
 今も昔も変わらないことは
 トラブルは大小あれど
 必ず起こるという現実です


Slide 5

Slide 5 text

What is it?
 しかしトラブルシューティングは花形!


Slide 6

Slide 6 text

What is it?
 様々な事例を交えながら
 トラブル対応のコツをお伝えします


Slide 7

Slide 7 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 8

Slide 8 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 9

Slide 9 text

自己紹介
 曽根 壮大(35歳)
 株式会社 オミカレ 副社長 CTO
 
 そ  ね   たけ とも
 ● 日本PostgreSQLユーザ会 勉強会分科会 担当
 ● 3人の子供がいます(長女、次女、長男)
 ● 技術的にはWeb/LL言語/RDBMSが好きです
 ● コミュニティが好き

Slide 10

Slide 10 text

婚活といえばオミカレ
 https://party-calendar.net/

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

本書きました


Slide 13

Slide 13 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 14

Slide 14 text

Web Server is dead
 突然ですがWeb Serverは死ぬ
 


Slide 15

Slide 15 text

Web Server is dead
 突然ですがWeb Serverは死ぬ
 ↓
 様々な理由で死ぬ
 


Slide 16

Slide 16 text

Web Server is dead
 ● アプリケーションのバグ
 ● ハードウェア障害
 ● アクセス過多
 ● おや?共有サーバの様子が…
 Web Serverの主な死因


Slide 17

Slide 17 text

Web Server is dead
 ● アプリケーションのバグ
 ● ハードウェア障害
 ● アクセス過多
 ● おや?共有サーバの様子が…
 Web Serverの主な死因
 死因 第一位
 テストしましょう


Slide 18

Slide 18 text

Web Server is dead
 E2Eテストやユニットテストは大事!


Slide 19

Slide 19 text

Web Server is dead
 E2Eテストやユニットテストは大事!
 ↓
 PHP Unitを使うのじゃ


Slide 20

Slide 20 text

Web Server is dead
 ● アプリケーションのバグ
 ● ハードウェア障害
 ● アクセス過多
 ● おや?共有サーバの様子が…
 Web Serverの主な死因
 HDD、電源、壊れるところは様々


Slide 21

Slide 21 text

Web Server is dead
 冗長化は大事


Slide 22

Slide 22 text

Web Server is dead
 冗長化は大事
 ↓
 Cloud Platformだと簡単に実現出来る


Slide 23

Slide 23 text

Web Server is dead
 冗長化は大事
 ↓
 Cloud Platformだと簡単に実現出来る
 1台でもオートスケールを設 定しましょう


Slide 24

Slide 24 text

Web Server is dead
 ● アプリケーションのバグ
 ● ハードウェア障害
 ● アクセス過多
 ● おや?共有サーバの様子が…
 Web Serverの主な死因
 モニタリングしてますか?


Slide 25

Slide 25 text

Web Server is dead
 Web Serverを観測する


Slide 26

Slide 26 text

Web Server is dead
 ● OS側の情報
 ● Apache or Nginxの情報
 ● PHPの実行情報
 ● Webサイトの情報
 Web Serverのモニタリング


Slide 27

Slide 27 text

Web Server is dead
 ● OS側の情報
 ● Apache or Nginxの情報
 ● PHPの実行情報
 ● Webサイトの情報
 Web Serverのモニタリング
 top, netstat, vmstat ...etc


Slide 28

Slide 28 text

Web Server is dead
 ● OS側の情報
 ● Apache or Nginxの情報
 ● PHPの実行情報
 ● Webサイトの情報
 Web Serverのモニタリング
 server-statusで取得


Slide 29

Slide 29 text

Web Server is dead
 https://qiita.com/advent-calendar/2017/mackerel-plugins

Slide 30

Slide 30 text

Web Server is dead
 ● OS側の情報
 ● Apache or Nginxの情報
 ● PHPの実行情報
 ● Webサイトの情報
 Web Serverのモニタリング
 プロファイラ、APM ...etc


Slide 31

Slide 31 text

Web Server is dead
 noborus/trdsql
 がめちゃめちゃ便利


Slide 32

Slide 32 text

trdsqlの凄さ
 # cat test.ltsv
 id:1 name:Orange price:50
 id:2 name:Melon price:500
 id:3 name:Appleprice:100


Slide 33

Slide 33 text

trdsqlの凄さ
 # ./trdsql \ 
 "SELECT * FROM test.ltsv WHERE id =1"
 1,Orange,50


Slide 34

Slide 34 text

trdsqlの凄さ
 # ./trdsql \
 "SELECT count(*),sum(price) FROM test.ltsv"
 3,650


Slide 35

Slide 35 text

trdsqlの凄さ
 # ps | ./trdsql -ih -oh -id " " "SELECT \`PID\`, \`TTY\`, \`TIME\`, \`CMD\` FROM -"
 PID,TTY,TIME,CMD
 8,tty1,00:00:13,zsh
 2689,tty1,00:00:00,ps
 2690,tty1,00:00:00,trdsq


Slide 36

Slide 36 text

Web Server is dead
 雑にログとして出力して集計出来る
 CSVなど様々のフォーマットに対応
 その中でもLSTVが使いやすい


Slide 37

Slide 37 text

Web Server is dead
 ● OS側の情報
 ● Apache or Nginxの情報
 ● PHPの実行情報
 ● Webサイトの情報
 Web Serverのモニタリング
 URL監視、エンドポイント監視


Slide 38

Slide 38 text

Web Server is dead
 [そーだいなるらくがき帳 ○○ 監視] [検索]


Slide 39

Slide 39 text

Web Server is dead
 ● アプリケーションのバグ
 ● ハードウェア障害
 ● アクセス過多
 ● おや?共有サーバの様子が…
 Web Serverの主な死因
 自分以外の影響を受けることもある


Slide 40

Slide 40 text

Web Server is dead
 影響範囲を知ることが大事


Slide 41

Slide 41 text

Web Server is dead
 Web Serverは死ぬ
 


Slide 42

Slide 42 text

Web Server is dead
 Web Serverは死ぬ
 ↓
 死ぬ前提で準備することが大事
 


Slide 43

Slide 43 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 44

Slide 44 text

Batchの突き抜け
 Batchの突き抜け?


Slide 45

Slide 45 text

Batchの突き抜け


Slide 46

Slide 46 text

Batchの突き抜け
 次のBatchが実行されるまでに Batchが終わらない!


Slide 47

Slide 47 text

Batchの突き抜け
 ● 開店までにBatchが終わらない
 ● 毎時、毎分のBatchが終わらない
 ● 終わってほしい時間までに終わらない
 
 類似例


Slide 48

Slide 48 text

Batchの突き抜け
 Batchの突き抜けはクリティカル!


Slide 49

Slide 49 text

Batchの突き抜け
 Batchの突き抜けはクリティカル!
 ↓
 Batchの進捗を確認する必要がある


Slide 50

Slide 50 text

Batchの突き抜け
 非同期処理は忘れがち


Slide 51

Slide 51 text

Batchの突き抜け
 非同期処理は忘れがち
 ↓
 実行結果を知る
 songmu/horenso


Slide 52

Slide 52 text

Batchの突き抜け
 1. いつ実行されたか
 2. 実行時間はどれくらいか
 3. 複数のBatchが同時実行されることはあるか
 ...etc


Slide 53

Slide 53 text

Batchの突き抜け
 そうだ可視化をしよう!


Slide 54

Slide 54 text

Batchの突き抜け
 そうだ可視化をしよう!
 ↓
 ariarijp/mackerel-client-php


Slide 55

Slide 55 text

Batchの突き抜け


Slide 56

Slide 56 text

Batchの突き抜け
 Batchの実行時間を集めることができれば...
 trdsqlで集計出来る!
 ※jsonも対応してます


Slide 57

Slide 57 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 58

Slide 58 text

サイトにアクセス出来ませんッッッ!
 まず落ち着け


Slide 59

Slide 59 text

サイトにアクセス出来ませんッッッ!
 サイトは様々な理由で落ちる


Slide 60

Slide 60 text

サイトにアクセス出来ませんッッッ!
 クライアント
 インターネット
 サーバサイド
 通信は常に往来している
 DNS
 BGP
 ISP
 サーバ
 ネットワーク
 アプリケーション


Slide 61

Slide 61 text

サイトにアクセス出来ませんッッッ!
 どこのレイヤーが駄目なのか知る


Slide 62

Slide 62 text

サイトにアクセス出来ませんッッッ!
 クライアント
 インターネット
 サーバサイド
 通信は常に往来している
 DNS
 BGP
 ISP
 サーバ
 ネットワーク
 アプリケーション


Slide 63

Slide 63 text

サイトにアクセス出来ませんッッッ!
 クライアント
 インターネット
 サーバサイド
 通信は常に往来している
 DNS
 BGP
 ISP
 サーバ
 ネットワーク
 アプリケーション


Slide 64

Slide 64 text

サイトにアクセス出来ませんッッッ!
 クライアント
 インターネット
 サーバサイド
 通信は常に往来している
 DNS
 BGP
 ISP
 サーバ
 ネットワーク
 アプリケーション


Slide 65

Slide 65 text

サイトにアクセス出来ませんッッッ!
 問題箇所を的確に知る


Slide 66

Slide 66 text

サイトにアクセス出来ませんッッッ!
 問題箇所を的確に知る
 ↓
 根拠を持って調べる


Slide 67

Slide 67 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 68

Slide 68 text

失敗から学ぶクラウドの正しい歩き方
 Web Server is dead
 


Slide 69

Slide 69 text

失敗から学ぶクラウドの正しい歩き方
 Cloud is dead


Slide 70

Slide 70 text

失敗から学ぶクラウドの正しい歩き方
 Cloud is dead
 ↓
 Cloudでも死ぬ


Slide 71

Slide 71 text

失敗から学ぶクラウドの正しい歩き方


Slide 72

Slide 72 text

失敗から学ぶクラウドの正しい歩き方
 稼働率、考えていますか?


Slide 73

Slide 73 text

失敗から学ぶクラウドの正しい歩き方
 稼働率、考えていますか?


Slide 74

Slide 74 text

失敗から学ぶクラウドの正しい歩き方
 制御できるところ
 と
 制御できないところ


Slide 75

Slide 75 text

失敗から学ぶクラウドの正しい歩き方
 データストアが死ぬと対応が難しい


Slide 76

Slide 76 text

失敗から学ぶクラウドの正しい歩き方
 データストアが死ぬと対応が難しい
 ↓
 画像、DB、CDN … etc


Slide 77

Slide 77 text

失敗から学ぶクラウドの正しい歩き方
 自分たちの急所を知る


Slide 78

Slide 78 text

失敗から学ぶクラウドの正しい歩き方
 トレードオフを理解した上で
 自分たちに必要な技術を選ぶ


Slide 79

Slide 79 text

あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け
 4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ


Slide 80

Slide 80 text

まとめ
 Webサービスは様々な力で動いている


Slide 81

Slide 81 text

まとめ
 便利になる
 


Slide 82

Slide 82 text

まとめ
 便利になる
 ↓
 抽象化された


Slide 83

Slide 83 text

まとめ
 しかし漏れのある抽象化の場合
 トラブル時に仕組みを知っている必要がある


Slide 84

Slide 84 text

まとめ
 PHPでも...
 フレームワーク...
 PHPの言語仕様...


Slide 85

Slide 85 text

まとめ
 現場のトラブルを解決するのは誰?


Slide 86

Slide 86 text

まとめ
 現場のトラブルを解決するのは誰?
 ↓
 自分自身


Slide 87

Slide 87 text

まとめ
 技術で課題を解決する


Slide 88

Slide 88 text

まとめ
 ご清聴ありがとうございました