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

サーバレス時代の負荷テスト戦略 / Load testing strategy for serverless

g-awa
January 22, 2020

サーバレス時代の負荷テスト戦略 / Load testing strategy for serverless

g-awa

January 22, 2020
Tweet

More Decks by g-awa

Other Decks in Technology

Transcript

  1. サーバレス時代 の 負荷テスト戦略
    〜CircleCIで実現する継続的負荷テストとチューニングTips〜
    2020.01.22 Serverless Meetup Tokyo #15

    View full-size slide

  2. 淡路⼤輔 / INTEC
    @gee0awa
    好きな技術
    Serverless / React Native

    View full-size slide

  3. 負荷テスト と サーバレス

    View full-size slide

  4. Elasticity
    Performance, Scalability, Resilience

    View full-size slide

  5. App
    EC2
    r4.large ×
    1

    View full-size slide

  6. App
    EC2
    r4.large ×
    1
    ApachBench

    View full-size slide

  7. App
    EC2
    r4.large ×
    1
    ApachBench
    $ ab -n 100 -c 10 http://example.com

    View full-size slide

  8. EC2
    EC2
    EC2 EC2
    EC2
    App
    r4.large ×
    5

    View full-size slide

  9. EC2
    EC2
    EC2 EC2
    EC2
    App
    r4.large ×
    5

    View full-size slide

  10. EC2
    EC2
    EC2 EC2
    EC2
    App
    r4.large ×
    5

    View full-size slide

  11. Master
    EC2
    EC2 EC2
    EC2
    App
    r4.large ×
    5

    View full-size slide

  12. EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    App
    r4.large ×
    10
    Master

    View full-size slide

  13. EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    EC2
    App
    r4.large ×
    15
    Master

    View full-size slide

  14. ・負荷に応じて Slave 台数をスケールさせたい
    ・サーバの⽤意に時間がかかる
    ・GUIでシナリオ作るとメンテしづらい
    ・EC2 ⾼い・・・
    課題

    View full-size slide

  15. お⾦はかけたくない
    ⼤量リクエストを⽣成したい
    もっと簡単に導⼊したい
    Simple
    Performance
    Cost

    View full-size slide

  16. ⚡Artillery⚡

    View full-size slide

  17. Node.js製のシンプルな負荷テストツール

    View full-size slide

  18. Artillery scenario
    YAMLファイルに宣⾔的にシナリオを記述する
    60秒間、20⼈の仮想ユーザがリクエスト

    View full-size slide

  19. EC2
    App
    ⚡Artillery⚡
    $ artillery run senario.yml

    View full-size slide

  20. CloudWatch, DataDog, aws-sigv4 etc..

    View full-size slide

  21. EC2
    App
    ⚡Artillery⚡
    $ artillery run senario.yml

    View full-size slide

  22. ECS Cluster
    App
    ⚡Artillery Pro⚡
    $ artillery run senario.yml

    View full-size slide

  23. Artillery + Lambda

    View full-size slide

  24. serverless-artillery
    https://github.com/Nordstrom/serverless-artillery

    View full-size slide

  25. InfluxDBに結果を保存、Grafanaで可視化

    View full-size slide

  26. install
    deploy
    invoke
    remove
    serverless-artillery
    $ npm install -g serverless-artillery
    $ slsart deploy —stage dev
    $ slsart invoke —stage dev
    $ slsart remove

    View full-size slide

  27. Lambdaだから維持費ゼロ
    負荷に応じたオートスケール
    YAMLによる宣⾔的シナリオ
    Simple
    Performance
    Cost

    View full-size slide

  28. 継続的負荷テスト
    開発プロセスの早い段階から性能検証を⾏う

    View full-size slide

  29. Github
    Developer commits
    yaml file
    継続的負荷テスト
    CircleCIから負荷テストを実⾏する
    Invoke
    loadtest
    unittest
    ⚡ Serverless Artillery⚡

    View full-size slide

  30. Github
    Developer commits
    yaml file
    継続的負荷テスト
    unittest
    CircleCIから負荷テストを実⾏する
    loadtest
    Invoke
    ⚡ Serverless Artillery⚡
    処理が被ったらスキップされる

    View full-size slide

  31. .circleci/config.yml
    シンプルなインタフェースで
    実⾏できるようにしておく

    View full-size slide

  32. プロダクションでは
    様々なアクセスが想定される

    View full-size slide

  33. 負荷にランダム性を持たせる

    View full-size slide

  34. Artillery scenario
    YAMLファイルに宣⾔的にシナリオを記述する
    60秒間、20⼈の仮想ユーザがリクエスト
    この部分を
    ランダムに変化させる

    View full-size slide

  35. シナリオファイルの負荷量を書き換える
    generateSenario.js
    duration, arrivalRate, phase数の最⼤・最⼩値だけ指定して
    ランダムな負荷を⽣成できるようにシナリオファイルを書き換える
    ChaosEngineering!!

    View full-size slide

  36. 負荷をランダムにする
    .circleci/config.yml

    View full-size slide

  37. 負荷テスト の 環境下 で
    アプリケーション を 開発する

    View full-size slide

  38. App
    ⚡Serverless Artillery⚡

    View full-size slide

  39. App
    ⚡Serverless Artillery⚡
    get /todos
    get /todos/{{ id }}
    put /todos/{{ id }}
    post /todos/{{ id }}
    delete /todos/{{ id }}
    TODOリスト アプリケーション
    https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb-and-offline

    View full-size slide

  40. TODOリスト アプリケーション
    https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb-and-offline
    serverless examples の Node.js REST API

    View full-size slide

  41. TODOリスト アプリケーション
    TODOリストに登録
    Responseのjsonに含まれるidの値を保持
    idを指定して1件取得
    idを指定して1件更新
    idを指定して1件削除
    Artilleryのシナリオ

    View full-size slide

  42. キャパシティユニットが全然⾜りない
    DynamoDB

    View full-size slide

  43. TODO⼀覧 ソース

    View full-size slide

  44. 全件スキャンになってる!!
    TODO⼀覧 ソース

    View full-size slide

  45. AWS X-Ray
    監視

    View full-size slide

  46. PUT
    DELETE
    GET
    POST
    Lambdaの実⾏単位や
    DynamoDBへのリクエスト単位で
    処理時間を計測

    View full-size slide

  47. Lambda
    (cron)
    GetServiceGraph API
    Slack
    AWS X-Ray
    ALERT
    監視
    Response time
    4xx (error)
    429 (throttling)
    5xx (failure)

    View full-size slide

  48. サーバレス時代 の 負荷テスト戦略
    まとめ
    宣⾔的シナリオ・低コスト・⾼負荷
    継続的負荷テスト・ランダム性
    分散トレーシング・監視
    ⚡Serverless Artillery⚡
    AWS X-Ray
    CircleCI

    View full-size slide

  49. ご静聴ありがとうございました

    View full-size slide