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

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

4907fec5fefbf81df4c239ab6ab1b0ef?s=47 g-awa
January 22, 2020

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

4907fec5fefbf81df4c239ab6ab1b0ef?s=128

g-awa

January 22, 2020
Tweet

Transcript

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

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

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

  4. Elasticity Performance, Scalability, Resilience

  5. None
  6. App

  7. App EC2 r4.large × 1

  8. App EC2 r4.large × 1 ApachBench

  9. App EC2 r4.large × 1 ApachBench $ ab -n 100

    -c 10 http://example.com
  10. EC2 EC2 EC2 EC2 EC2 App r4.large × 5

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

  12. EC2 EC2 EC2 EC2 EC2 App r4.large × 5

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

  14. EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 App

    r4.large × 10 Master
  15. EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2

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

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

  18. ⚡Artillery⚡

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

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

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

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

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

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

  25. Artillery + Lambda

  26. None
  27. serverless-artillery https://github.com/Nordstrom/serverless-artillery

  28. None
  29. InfluxDBに結果を保存、Grafanaで可視化

  30. install deploy invoke remove serverless-artillery $ npm install -g serverless-artillery

    $ slsart deploy —stage dev $ slsart invoke —stage dev $ slsart remove
  31. Lambdaだから維持費ゼロ 負荷に応じたオートスケール YAMLによる宣⾔的シナリオ Simple Performance Cost

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

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

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

    ⚡ Serverless Artillery⚡ 処理が被ったらスキップされる
  36. .circleci/config.yml シンプルなインタフェースで 実⾏できるようにしておく

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

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

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

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

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

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

  45. App ⚡Serverless Artillery⚡

  46. 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
  47. TODOリスト アプリケーション https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb-and-offline serverless examples の Node.js REST API

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

  49. 結果

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

  51. TODO⼀覧 ソース

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

  53. AWS X-Ray 監視

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

  55. Lambda (cron) GetServiceGraph API Slack AWS X-Ray ALERT 監視 Response

    time 4xx (error) 429 (throttling) 5xx (failure)
  56. サーバレス時代 の 負荷テスト戦略 まとめ 宣⾔的シナリオ・低コスト・⾼負荷 継続的負荷テスト・ランダム性 分散トレーシング・監視 ⚡Serverless Artillery⚡ AWS

    X-Ray CircleCI
  57. ご静聴ありがとうございました