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

GraphQL における quota を見ながら 高負荷試験 してみた

Kazuki Miura
September 30, 2022

GraphQL における quota を見ながら 高負荷試験 してみた

#jawsug_sre

AppSync の負荷試験のお話
token って難しいよね

Kazuki Miura

September 30, 2022
Tweet

More Decks by Kazuki Miura

Other Decks in Technology

Transcript

  1. #JAWSUG_SRE
    GraphQL
    における
    quota
    をみながら
    負荷試験してみた
    2022年9月30日
    #04

    View Slide

  2. #jawsug_sre 04
    自己紹介
    三浦一樹(36)
    #Sauna #Sapporo #HTB #Amplify
    #StepFunctions #Serverless
    #AWSSamurai2019
    #Marvel #Hinatazaka46 #ANN
    #PdM #PjM #SM

    View Slide

  3. #jawsug_sre 04
    SREじゃないんですけど
    ツイートしたら捕まりましたw

    View Slide

  4. 数年に1度やってくる
    瞬間的な高負荷
    スパ
    イク
    #JAWSUG_SRE 04

    View Slide

  5. #jawsug_sre 04

    View Slide

  6. 落城

    View Slide

  7. #jawsug_sre 04
    2021

    View Slide

  8. View Slide

  9. #jawsug_sre 04
    query
    mutation
    商品データ
    10Table


    ユーザデータ
    10Table

    View Slide

  10. #jawsug_sre 04
    query
    mutation
    amplify-cli

    View Slide

  11. #jawsug_sre 04
    mutation
    ここがやばい
    商品データ
    10Table


    ユーザデータ
    10Table

    View Slide

  12. クォータ
    #JAWSUG_SRE 04
    リクエスト/s
    最適化

    View Slide

  13. 最初の1クエリで
    全データを持ってくる
    2022.04.28 〜
    2022.03.01 〜

    View Slide

  14. #jawsug_sre 04
    2022

    View Slide

  15. クォータ
    #JAWSUG_SRE 04
    リクエスト/s

    View Slide

  16. だと
    おもってたら

    View Slide

  17. 変わってた
    (本番 1週間前)

    View Slide

  18. クォータ
    #JAWSUG_SRE 04
    リクエスト トークン
    /s
    リクエスト/s

    View Slide

  19. とーくん??

    View Slide

  20. #JAWSUG_SRE 04
    課金制度が変わった時?
    クォータが変更されたアナウンスは
    見つからず、、
    くやしいので、
    過去のキャッシュを漁って、履歴を確認する

    View Slide

  21. #JAWSUG_SRE 04
    通常は 1token ってことは、変わらなそうじゃん
    レスポンスヘッダーの
    x-amzn-appsync-TokenConsumed
    を確認してみましょう
    冷静にドキュメントを読むんだ、、!

    View Slide

  22. x-amzn-appsync-tokenconsumed:50

    View Slide

  23. x-amzn-
    appsync-
    tokencon
    sumed:
    50

    View Slide

  24. View Slide

  25. 😴

    View Slide

  26. #JAWSUG_SRE 04
    2000 リクエスト /s
    1ユーザは初期2クエリする
    2000 ➗ 2 = 1000 users / s
    昔の想定

    View Slide

  27. #JAWSUG_SRE 04
    2000 リクエスト /s
    1ユーザは初期2クエリする
    2000 ➗ 2 = 1000 users / s
    2000 リクエスト トークン/s
    1ユーザは 約 60トークン消費
    2000 ➗ 60 ≒ 33 users/ s
    昔の想定 実際

    View Slide

  28. #JAWSUG_SRE 04
    2000 リクエスト /s
    1ユーザは初期2クエリする
    2000 ➗ 2 = 1000 users / s
    2000 リクエスト トークン/s
    1ユーザは 約 60トークン消費
    2000 ➗ 60 ≒ 33 users/ s
    昔の想定 実際
    想定の
    30分の1
    しか耐えられない!

    View Slide

  29. 怒りのデス・ロード

    View Slide

  30. 割愛

    View Slide

  31. 高負荷かけると
    消費量が変化する
    結論
    #JAWSUG_SRE 04

    View Slide

  32. #jawsug_sre 04
    JMeter から
    AppSync にクエリなげる
    CloudWatch logs Insight
    で頑張って集計する
    (金額はまぁすごいことに)
    いろんな負荷のかけ方をしてみた

    View Slide

  33. #jawsug_sre 04
    JMeter から
    AppSync にクエリなげる
    100 rps 付近から
    トークン消費が
    「1」に漸近する
    CloudWatch logs Insight
    で頑張って集計する
    (金額はまぁすごいことに)
    いろんな負荷のかけ方を試してみ
    たところ
    token consumed/queryのログのcount
    (それぞれ1秒間のSUM)

    View Slide

  34. スパイク前に
    JMeterで
    高負荷かけたれ

    View Slide

  35. スパイクが予想される
    前に高負荷かけて
    クエリあたりのトークン
    消費量を
    大幅に減少させ
    クォータの制限ないに
    収めることができた!!
    まとめ
    #JAWSUG_SRE 04

    View Slide

  36. 基本はオンライン
    東京以外はオフライン会場も

    View Slide