Successfully reported this slideshow.
Your SlideShare is downloading. ×

Web API をデバックするときに必要なたったひとつのこと

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 38 Ad
Advertisement

More Related Content

Similar to Web API をデバックするときに必要なたったひとつのこと (20)

More from Tomokazu Kiyohara (15)

Advertisement

Recently uploaded (20)

Web API をデバックするときに必要なたったひとつのこと

  1. 1. Web API をデバッグするときに必要な
 たったひとつのこと 2015/05/16 - Kanazawa.rb meetup 33
  2. 2. かしこいロギング こたえ
  3. 3. かしこいロギング こたえ
  4. 4. Web API の特徴 • 多数の構成要素 • ロードバランサ, リバースプロクシ, アプケーションサーバー, DB ... • プロセス, スレッド … • 多数の並列処理 • 複数クライアント, 多重 API コール …
  5. 5. client A client B RP RP App Server App Server DB DB Process α ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ Process β ・ ・ ・ ・ ・ ・ LB client A からの API コール x の 処理パスを特定して それぞれの log を 目 grep して…
  6. 6. そんな装備で大丈夫か?
  7. 7. –T.K, 2013 “開発環境はそんな複雑じゃない。複数 Terminal 開いて log を tail しておけば十分。”
  8. 8. –T.K, 2014 “開発環境は複雑だった”
  9. 9. –T.K, 2015 “本当のバグは運用環境にこそ潜む”
  10. 10. かしこさの種 • ロギング全般 • いろいろある。おおい。 • おググりください。 • Web API に絞ると • 集約と識別
  11. 11. 集約と識別
  12. 12. 集約と識別
  13. 13. ログの集約 • すでに様々なアプローチがある • 古くは syslog • イマドキは fluentd
  14. 14. 集約と識別
  15. 15. ログの識別 • API Call を識別する • 構成要素横断で識別 • サーバやプロセスをまたいでも識別できることが大事 • API Call 毎に識別 • クライアント毎ではなく Call 毎であることが大事
  16. 16. どうやって? • 識別子を発行して構成要素間で伝搬 • だれが発行? • どうやって伝搬?
  17. 17. だれが発行?
  18. 18. client A client B RP RP App Server App Server DB DB ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ LB APIクライアントに もっとも近い構成要素 入れやすいのはこの辺
  19. 19. どうやって伝搬?
  20. 20. ・ ・ ・ ・ ・ ・ ・ ・ ・ client A client B RP RP App Server App Server DB DB ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ LB ① API Call ② 識別子発行 ③ 識別子付き で logging ④ 識別子付き でIPC(call) ⑤ 識別子付き で logging ⑥ 識別子付き でIPC(call) ⑦ 識別子付き で logging ⑧ 識別子付き でIPC(call) ⑨ 識別子付き で logging ⑩ 識別子付き でIPC(res) ⑫ 識別子付き でIPC(res) ⑪ 識別子付き で logging ⑬ 識別子付き で logging ⑭ 識別子付き でIPC(res) ⑮ 識別子付き で logging ⑯ API Response
  21. 21. シンプルな話
  22. 22. 押さえるべきポイントが もうひとつ
  23. 23. どうやって? • 識別子を発行して構成要素間で伝搬 • だれが発行? • どうやって伝搬?
  24. 24. どうやって? • 識別子を発行して構成要素間で伝搬 • だれが発行? • どうやって発行? • どうやって伝搬? New!
  25. 25. client A client B RP RP App Server App Server DB DB ・ ・ ・ LB ① API Call ② 識別子発行 LB ①' API Call ②' 識別子発行 ・ ・ ・ ・ ・ ・ ・ ・ ・
  26. 26. client A client B RP RP App Server App Server DB DB ・ ・ ・ LB ① API Call ② 識別子発行 LB ①' API Call ②' 識別子発行 ・ ・ ・ ・ ・ ・ ・ ・ ・
  27. 27. ログの識別 • API Call を識別する • 構成要素横断で識別 • サーバやプロセスをまたいでも識別できることが大事 • API Call 毎に識別 • クライアント毎ではなく Call 毎であることが大事
  28. 28. ログの識別 • API Call を識別する • 構成要素横断で識別 • サーバやプロセスをまたいでも識別できることが大事 • API Call 毎に識別 • クライアント毎ではなく Call 毎であることが大事 一意性 (Uniqueness)
  29. 29. client A client B RP RP App Server App Server DB DB ・ ・ ・ LB ① API Call ② 識別子発行 LB ①' API Call ②' 識別子発行 ・ ・ ・ ・ ・ ・ ・ ・ ・
  30. 30. client A client B RP RP App Server App Server DB DB ・ ・ ・ LB ① API Call ② 識別子発行 LB ①' API Call ②' 識別子発行 ・ ・ ・ ・ ・ ・ ・ ・ ・ 識別子発行 サーバー×The ボトルネック
  31. 31. 分散型ユニークID生成問題
  32. 32. 分散型採番手法 • 分散した採番環境それぞれで自立的に採番可能
 であること • 採番結果が絶対に衝突しないこと
  33. 33. 分散型採番手法 • 分散した採番環境それぞれで自立的に採番可能
 であること • 採番結果が絶対に衝突しないこと
  34. 34. 分散型採番手法 • 分散した採番環境それぞれで自立的に採番可能
 であること • 採番結果の衝突確率が運用されるシステムにおいて
 十分に低確率であること
  35. 35. 分散型採番手法 • 大きな桁数のランダム文字列 • UUID
  36. 36. 分散型採番手法 • 演算コスト問題 • Snowflake • Twitter の Tweet ID 生成手法 • 衝突確率は上がる • Twitter にとっては十分低確率
  37. 37. まとめ • Web API におけるかしこいロギング • 収集と識別を実現する • 識別子には分散型ユニークID生成手法をもちいる
  38. 38. Thank you Tomokazu Kiyohara http://github.com/kiyohara http://facebook.com/tomokazu.kiyohara

×