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.

GraphAPIのスロットリング(20181027 office365 developersday)

111 views

Published on

2018/10/27 に開催されたoffice365 developersdayのTLです。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

GraphAPIのスロットリング(20181027 office365 developersday)

  1. 1. GraphAPIのスロットリング 寺田 敬佑 Twitter : @teraco https://prius.cc/itya
  2. 2. GraphAPIのスロットリング ▪ エンタープライズ要件でプログラムを並列実行するなどして大量のリクエストを GraphAPIに送信すると、ストットリングポリシーに引っ掛かる事があります。
  3. 3. Microsoft公式のスロットリング回避方法 ▪ “いつスロットリングポリシーに引っ掛かるかを知る方法はないので、スロットリン グポリシーに引っ掛かった時は指定秒待つよう実装してくれ。待ってもスロット リング解除されないこともあるけど…"だそうです。 Throttling - Documentation - Microsoft Graph https://developer.microsoft.com/en-us/graph/docs/concepts/throttling 1. Wait the number of seconds specified in the Retry-After field. 2. Retry the request. 3. If the request fails again with a 429 error code, you are still being throttled. Continue to use the recommended Retry-After delay and retry the request until it succeeds. THR2159 - How to perform large scale operations efficiently using Microsoft Graph https://myignite.techcommunity.microsoft.com/sessions/65997
  4. 4. 実際どれくらい並列実行できるのか? ▪ Microsoftのエンジニアが実際にやってみた(※)ところによると ▪ シーケンシャル実行だとスロットリングにひっかからない。 ▪ 2並列実行だと、スロットリングに引っ掛かりつつも1パラ実行より高速 ▪ 4並列実行以上だと、スロットリングに引っ掛かり、返って実行が遅くなる ようです。 ※100ユーザーを100グループに所属させる = 10,000リクエスト投げるのにかかった時間 2並列実行が最速
  5. 5. 自分でもやってみました ▪ テスト用のOffice 365 テナントを契約し、GraphAPIを並列で呼び出す ▪ 使用したAPI Send mail - Documentation - Microsoft Graph https://developer.microsoft.com/en-us/graph/docs/api- reference/v1.0/api/user_sendmail
  6. 6. 結果 ▪ 4並列×1,000リクエスト、8並列×1,000リクエストで比較しましたが、どち らもスロットリングはかからず、8並列の方が短期間で大量のリクエストを投げ ることが出来ました。 4並列 1クエリあたりの平均(秒) 1-100 101- 200 201- 300 301- 400 401- 500 501- 600 601- 700 701- 800 801- 900 901- 1000 セッション数 1 0.20 0.18 0.18 0.20 0.19 0.19 0.18 0.19 0.22 0.17 2 0.19 0.18 0.18 0.20 0.19 0.18 0.18 0.19 0.22 0.17 3 0.20 0.18 0.17 0.19 0.19 0.18 0.18 0.18 0.22 0.17 4 0.19 0.17 0.17 0.20 0.18 0.18 0.18 0.18 0.22 0.17 8並列 1クエリあたりの平均(秒) 1-100 101- 200 201- 300 301- 400 401- 500 501- 600 601- 700 701- 800 801- 900 901- 1000 セッション数 1 0.20 0.18 0.23 0.23 0.24 0.21 0.27 0.21 0.24 0.27 2 0.20 0.19 0.23 0.23 0.24 0.20 0.27 0.20 0.22 0.26 3 0.20 0.19 0.23 0.23 0.23 0.20 0.26 0.20 0.22 0.26 4 0.19 0.20 0.24 0.22 0.22 0.20 0.27 0.21 0.22 0.26 5 0.20 0.21 0.24 0.25 0.21 0.27 0.21 0.23 0.25 0.21 6 0.20 0.23 0.23 0.25 0.20 0.27 0.20 0.23 0.25 0.20 7 0.18 0.22 0.23 0.24 0.20 0.26 0.21 0.22 0.26 0.20 8 0.19 0.22 0.24 0.24 0.21 0.28 0.21 0.23 0.26 0.19 0.19秒/リクエスト ×4 0.22秒/リクエスト ×8
  7. 7. 結果 ▪ 8並列×10,000で実施して、合計10,000リクエストあたりでスロットリング が発生しました。 8並列 1クエリあたりの平均(秒) 1- 100 101- 200 201- 300 301- 400 401- 500 501- 600 601- 700 701- 800 801- 900 901- 1000 1001- 1100 1101- 1200 1201- 1300 セッション数 1 0.34 0.34 0.44 0.62 0.63 0.35 0.31 0.35 0.35 0.36 0.37 0.35 6.31 2 0.35 0.36 0.49 0.66 0.56 0.34 0.32 0.37 0.40 0.36 0.35 0.39 9.59 3 0.36 0.35 0.48 0.73 0.52 0.33 0.31 0.35 0.35 0.37 0.35 0.38 7.36 4 0.34 0.34 0.41 0.59 0.70 0.33 0.28 0.37 0.33 0.39 0.38 0.34 4.88 5 0.35 0.35 0.43 0.65 0.65 0.34 0.32 0.36 0.34 0.38 0.37 0.38 7.23 6 0.33 0.33 0.38 0.55 0.76 0.36 0.28 0.34 0.34 0.39 0.32 0.34 2.33 7 0.34 0.34 0.42 0.55 0.72 0.36 0.29 0.38 0.33 0.39 0.37 0.33 4.88 8 0.34 0.33 0.34 0.56 0.68 0.42 0.29 0.34 0.33 0.39 0.35 0.33 0.95
  8. 8. 結論 ▪ APIによってスロットリングの閾値は変わる ▪ 必要な対応 ▪ 大量のリクエストを発生させる可能性がある場合、事前にある程度スロットリング閾値 の目星をつけておいて、心構えをする ▪ 429発生時の処理を入れておく

×