Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバレス時代の負荷テスト戦略 / Load testing strategy for serverless
Search
g-awa
January 22, 2020
Technology
18
4.5k
サーバレス時代の負荷テスト戦略 / Load testing strategy for serverless
g-awa
January 22, 2020
Tweet
Share
More Decks by g-awa
See All by g-awa
実践的にAPIを開発していく - ソースコード管理とデリバリーを考えよう - / develop effective web api versioning
gawa
3
390
クラウドを駆使した開発〜AWS Lambda, Dev Tools, AppSync の革新的な最新アップデート〜 / reinvent2023-recap-serverless-meetup-tokyo-developer-experience
gawa
0
560
refactoring-serverless
gawa
1
1.7k
modern-frontend-design-pattern
gawa
8
5.3k
サーバレスブース展示物のアーキテクチャを語る / Serverless Booth Architecture at AWS Summit 2023
gawa
0
120
Effective AppSync ~ Serverless Framework を使用した AppSync の実践的な開発方法とテスト戦略 ~ / Effective AppSync
gawa
0
1.1k
オレをCI/CDする / my ci cd practice
gawa
6
2.5k
AWSのテスト技法とPolicy as Code / aws-testing-techniques-and-policy-as-a-code
gawa
4
1.2k
Other Decks in Technology
See All in Technology
Flutter研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
160
コミュニティサービスに「あなたへ」フィードを リリースするまでの試行錯誤
takapy
1
150
ソフトウェアエンジニアリングの知見を活かして データ基盤をいい感じにする on Snowflake [MIERUNE BBQ #10]
mtpooh
2
150
エンジニア向け会社紹介資料
caddi_eng
14
230k
サーバーレスAPI(API Gateway+Lambda)とNext.jsで 個人ブログを作ろう!
shuntaka
PRO
0
560
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
OSSコミットしてZennの課題を解決した話
dyoshikawa1993
0
150
What is DRE? - Road to SRE NEXT@広島
chanyou0311
3
630
Azure Pipelinesを使用したCICDベースラインアーキテクチャ実践
yuriemori
0
190
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
年間一億円削減した時系列データベースのアーキテクチャ改善~不確実性の高いプロジェクトへの挑戦~
lycorptech_jp
PRO
3
2.9k
RAGのサービスをリリースして1年3ヶ月が経ちました
segavvy
4
960
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Git: the NoSQL Database
bkeepers
PRO
423
64k
Design by the Numbers
sachag
277
18k
Agile that works and the tools we love
rasmusluckow
325
20k
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
224
21k
KATA
mclloyd
20
13k
The Language of Interfaces
destraynor
151
23k
Music & Morning Musume
bryan
43
5.9k
In The Pink: A Labor of Love
frogandcode
139
22k
Mobile First: as difficult as doing things right
swwweet
219
8.8k
5 minutes of I Can Smell Your CMS
philhawksworth
200
19k
Transcript
サーバレス時代 の 負荷テスト戦略 〜CircleCIで実現する継続的負荷テストとチューニングTips〜 2020.01.22 Serverless Meetup Tokyo #15
淡路⼤輔 / INTEC @gee0awa 好きな技術 Serverless / React Native
負荷テスト と サーバレス
Elasticity Performance, Scalability, Resilience
None
App
App EC2 r4.large × 1
App EC2 r4.large × 1 ApachBench
App EC2 r4.large × 1 ApachBench $ ab -n 100
-c 10 http://example.com
EC2 EC2 EC2 EC2 EC2 App r4.large × 5
EC2 EC2 EC2 EC2 EC2 App r4.large × 5
EC2 EC2 EC2 EC2 EC2 App r4.large × 5
Master EC2 EC2 EC2 EC2 App r4.large × 5
EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 App
r4.large × 10 Master
EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2 EC2
EC2 EC2 EC2 EC2 App r4.large × 15 Master
・負荷に応じて Slave 台数をスケールさせたい ・サーバの⽤意に時間がかかる ・GUIでシナリオ作るとメンテしづらい ・EC2 ⾼い・・・ 課題
お⾦はかけたくない ⼤量リクエストを⽣成したい もっと簡単に導⼊したい Simple Performance Cost
⚡Artillery⚡
Node.js製のシンプルな負荷テストツール
Artillery scenario YAMLファイルに宣⾔的にシナリオを記述する 60秒間、20⼈の仮想ユーザがリクエスト
EC2 App ⚡Artillery⚡ $ artillery run senario.yml
CloudWatch, DataDog, aws-sigv4 etc..
EC2 App ⚡Artillery⚡ $ artillery run senario.yml
ECS Cluster App ⚡Artillery Pro⚡ $ artillery run senario.yml
Artillery + Lambda
None
serverless-artillery https://github.com/Nordstrom/serverless-artillery
None
InfluxDBに結果を保存、Grafanaで可視化
install deploy invoke remove serverless-artillery $ npm install -g serverless-artillery
$ slsart deploy —stage dev $ slsart invoke —stage dev $ slsart remove
Lambdaだから維持費ゼロ 負荷に応じたオートスケール YAMLによる宣⾔的シナリオ Simple Performance Cost
None
継続的負荷テスト 開発プロセスの早い段階から性能検証を⾏う
Github Developer commits yaml file 継続的負荷テスト CircleCIから負荷テストを実⾏する Invoke loadtest unittest
⚡ Serverless Artillery⚡
Github Developer commits yaml file 継続的負荷テスト unittest CircleCIから負荷テストを実⾏する loadtest Invoke
⚡ Serverless Artillery⚡ 処理が被ったらスキップされる
.circleci/config.yml シンプルなインタフェースで 実⾏できるようにしておく
None
None
プロダクションでは 様々なアクセスが想定される
負荷にランダム性を持たせる
Artillery scenario YAMLファイルに宣⾔的にシナリオを記述する 60秒間、20⼈の仮想ユーザがリクエスト この部分を ランダムに変化させる
シナリオファイルの負荷量を書き換える generateSenario.js duration, arrivalRate, phase数の最⼤・最⼩値だけ指定して ランダムな負荷を⽣成できるようにシナリオファイルを書き換える ChaosEngineering!!
負荷をランダムにする .circleci/config.yml
負荷テスト の 環境下 で アプリケーション を 開発する
App ⚡Serverless Artillery⚡
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
TODOリスト アプリケーション https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb-and-offline serverless examples の Node.js REST API
TODOリスト アプリケーション TODOリストに登録 Responseのjsonに含まれるidの値を保持 idを指定して1件取得 idを指定して1件更新 idを指定して1件削除 Artilleryのシナリオ
結果
キャパシティユニットが全然⾜りない DynamoDB
TODO⼀覧 ソース
全件スキャンになってる!! TODO⼀覧 ソース
AWS X-Ray 監視
PUT DELETE GET POST Lambdaの実⾏単位や DynamoDBへのリクエスト単位で 処理時間を計測
Lambda (cron) GetServiceGraph API Slack AWS X-Ray ALERT 監視 Response
time 4xx (error) 429 (throttling) 5xx (failure)
サーバレス時代 の 負荷テスト戦略 まとめ 宣⾔的シナリオ・低コスト・⾼負荷 継続的負荷テスト・ランダム性 分散トレーシング・監視 ⚡Serverless Artillery⚡ AWS
X-Ray CircleCI
ご静聴ありがとうございました