Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Webサービスのトラブルの現場 ~ Webサービスの今と昔 ~ / web-server-is-dead

88f4e84b94fe07cddbd9e6479d689192?s=47 soudai sone
December 01, 2019

Webサービスのトラブルの現場 ~ Webサービスの今と昔 ~ / web-server-is-dead

88f4e84b94fe07cddbd9e6479d689192?s=128

soudai sone

December 01, 2019
Tweet

Transcript

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

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


  3. • Webサービスが突然落ちた…
 • コネクションが溢れてサービス停止…
 • サーバのload averageが青天井…
 What is it?


    トラブルは突然に

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


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


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


  7. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

  8. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

  9. 自己紹介
 曽根 壮大(35歳)
 株式会社 オミカレ 副社長 CTO
 
 そ  ね  

    たけ とも
 • 日本PostgreSQLユーザ会 勉強会分科会 担当
 • 3人の子供がいます(長女、次女、長男)
 • 技術的にはWeb/LL言語/RDBMSが好きです
 • コミュニティが好き
  10. 婚活といえばオミカレ
 https://party-calendar.net/

  11. None
  12. 本書きました


  13. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

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


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


  16. Web Server is dead
 • アプリケーションのバグ
 • ハードウェア障害
 • アクセス過多


    • おや?共有サーバの様子が…
 Web Serverの主な死因

  17. Web Server is dead
 • アプリケーションのバグ
 • ハードウェア障害
 • アクセス過多


    • おや?共有サーバの様子が…
 Web Serverの主な死因
 死因 第一位
 テストしましょう

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


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


  20. Web Server is dead
 • アプリケーションのバグ
 • ハードウェア障害
 • アクセス過多


    • おや?共有サーバの様子が…
 Web Serverの主な死因
 HDD、電源、壊れるところは様々

  21. Web Server is dead
 冗長化は大事


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


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


  24. Web Server is dead
 • アプリケーションのバグ
 • ハードウェア障害
 • アクセス過多


    • おや?共有サーバの様子が…
 Web Serverの主な死因
 モニタリングしてますか?

  25. Web Server is dead
 Web Serverを観測する


  26. Web Server is dead
 • OS側の情報
 • Apache or Nginxの情報


    • PHPの実行情報
 • Webサイトの情報
 Web Serverのモニタリング

  27. Web Server is dead
 • OS側の情報
 • Apache or Nginxの情報


    • PHPの実行情報
 • Webサイトの情報
 Web Serverのモニタリング
 top, netstat, vmstat ...etc

  28. Web Server is dead
 • OS側の情報
 • Apache or Nginxの情報


    • PHPの実行情報
 • Webサイトの情報
 Web Serverのモニタリング
 server-statusで取得

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

  30. Web Server is dead
 • OS側の情報
 • Apache or Nginxの情報


    • PHPの実行情報
 • Webサイトの情報
 Web Serverのモニタリング
 プロファイラ、APM ...etc

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


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


    id:3 name:Appleprice:100

  33. trdsqlの凄さ
 # ./trdsql \ 
 "SELECT * FROM test.ltsv WHERE

    id =1"
 1,Orange,50

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


  35. 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

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


  37. Web Server is dead
 • OS側の情報
 • Apache or Nginxの情報


    • PHPの実行情報
 • Webサイトの情報
 Web Serverのモニタリング
 URL監視、エンドポイント監視

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


  39. Web Server is dead
 • アプリケーションのバグ
 • ハードウェア障害
 • アクセス過多


    • おや?共有サーバの様子が…
 Web Serverの主な死因
 自分以外の影響を受けることもある

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


  41. Web Server is dead
 Web Serverは死ぬ
 


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


  43. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

  44. Batchの突き抜け
 Batchの突き抜け?


  45. Batchの突き抜け


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


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


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


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


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


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


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


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


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


  55. Batchの突き抜け


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


  57. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

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


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


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


    アプリケーション

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


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


    アプリケーション

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


    アプリケーション

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


    アプリケーション

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


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


  67. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

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


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


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


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


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


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


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


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


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


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


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


  79. あじぇんだ
 1. 自己紹介
 2. Web Server is dead
 3. Batchの突き抜け


    4. サイトにアクセス出来ませんッッッ!
 5. 失敗から学ぶクラウドの正しい歩き方
 6. まとめ

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


  81. まとめ
 便利になる
 


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


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


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


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


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


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


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