APIサーバの可用性をテストする方法
4683 ワード
あなたは、生産またはクラウド環境で使用されるAPIサーバーを作成する過程であなたが開発したか、またはあなたですか?私のシリーズのこの第4の内訳では、私はあなたのAPIサーバーの可用性をテストする方法を示します、そのために、あなたはそれが重い任務を実行している間、扱うことができる1秒あたりの多くの要求を理解することができます.
これは、特に環境にとって重要な手段です.なぜなら、最後に必要とするのは、APIサーバがピッキングした結果としてキューイングリクエストをキューに入れ、リソースを十分に解放することではないからです.
速記
/パルス /ストレス /pulse endpointは、ビジネスロジックを含まず、レスポンスとして空の文字列を返す非常に軽量なAPIを表します.この終点を処理するとき、どんな遅れの理由もないはずです.
一方、ストレスエンドポイントは、BcryptJjsを使用して、パスワードをハッシュしてハッシュします.これはかなり重いプロセスです、そして、それは完全にJavaScriptで書かれているので、それはイベントループを非常にひどくブロックアップするでしょう.
私たちの最初のテストのために、私たちは/パルスエンドポイントに対してロードテストを実行するためにAutoConを使うつもりです.そのプロセスは以下の通りです. エクスプレスサーバを起動する 自動テストを実行する これは10秒間の10の同時接続を実行する単純なロードテストです テスト実行後、1秒あたりの平均要求を含むレポートを受け取る必要があります.あなたのマシンの速度に応じて、それは15 000と25
ベースライン測定ができたので、APIサーバがヘビータスクを実行しているときに何が起こるかを見てみましょう. Expressサーバーが起動していることを確認します テストするための2つのターミナルウィンドウを開く ウィンドウ1において、30秒間の間、ストレス終点に対して自動操縦を実行する ウィンドウ2では/ストレステストが実行されている間に、/と同様に/パルスエンドポイントに対してautocannonを実行します /testテストが実行されている間に/pulseテストが完了したことを確認してください このテスト実行の後、/pulseテストのために毎秒のリクエストの重要な低下を見るべきです.
あなたが想像できるように、これは恐ろしい結果です.
これは現実世界で何を意味しますか
これは、特に環境にとって重要な手段です.なぜなら、最後に必要とするのは、APIサーバがピッキングした結果としてキューイングリクエストをキューに入れ、リソースを十分に解放することではないからです.
速記
私が参照する間NodeJS この記事では、理論と原則のほとんどはプラットフォームと環境に適用できます.
動画を見る
使用するベンチマークテストツール
私がテストのために使用するツールはAutoCannon . 完全に書かれているNodeJS と非常に似ているApache Benchmark , Artillery , K6 , Wrk , あなたがこの記事に沿って従うためにAutomatonを使用することを強制されないので、これは良いニュースです.あなたのベンチマークテストツールがHTTPリクエストに対してロードテストを実行し、1秒あたりの平均リクエストを決定することができれば、うまく行くことができます.
それが言われているなら、あなたはオートマトンを利用したいと思います.npm i -g autocannon
APIサーバの可用性をテストする方法
第一に、オンラインSource Code Repo これらの例をローカル環境で実行したい場合は、参照できます.必要なのはNODEJSがインストールされます.
以下のコードのスニペットは、あなたのパッケージを設定するのを除いて、あなたは99 %になりたいです.JSONは、プロダクションとポート6000(参照ソースコードを提供するソースコードrepoと埋め込まれたビデオでは、苦労する必要があります)にnodestra envを設定します.アプリに次を追加します.jsファイル.
'use strict'
require('dotenv').config()
const Express = require('express')
const App = Express()
const HTTP = require('http')
const BCrypt = require('bcryptjs')
// Router Setup
App.get('/pulse', (req, res) => {
res.send('')
})
App.get('/stress', async (req, res) => {
const hash = await BCrypt.hash('this is a long password', 8)
res.send(hash)
})
// Server Setup
const port = process.env.PORT
const server = HTTP.createServer(App)
server.listen(port, () => {
console.log('NodeJS Performance Optimizations listening on: ', port)
})
これは2つのルートを公開する非常に単純なExpressサーバーです.
使用するベンチマークテストツール
私がテストのために使用するツールはAutoCannon . 完全に書かれているNodeJS と非常に似ているApache Benchmark , Artillery , K6 , Wrk , あなたがこの記事に沿って従うためにAutomatonを使用することを強制されないので、これは良いニュースです.あなたのベンチマークテストツールがHTTPリクエストに対してロードテストを実行し、1秒あたりの平均リクエストを決定することができれば、うまく行くことができます.
それが言われているなら、あなたはオートマトンを利用したいと思います.npm i -g autocannon
APIサーバの可用性をテストする方法
第一に、オンラインSource Code Repo これらの例をローカル環境で実行したい場合は、参照できます.必要なのはNODEJSがインストールされます.
以下のコードのスニペットは、あなたのパッケージを設定するのを除いて、あなたは99 %になりたいです.JSONは、プロダクションとポート6000(参照ソースコードを提供するソースコードrepoと埋め込まれたビデオでは、苦労する必要があります)にnodestra envを設定します.アプリに次を追加します.jsファイル.
'use strict'
require('dotenv').config()
const Express = require('express')
const App = Express()
const HTTP = require('http')
const BCrypt = require('bcryptjs')
// Router Setup
App.get('/pulse', (req, res) => {
res.send('')
})
App.get('/stress', async (req, res) => {
const hash = await BCrypt.hash('this is a long password', 8)
res.send(hash)
})
// Server Setup
const port = process.env.PORT
const server = HTTP.createServer(App)
server.listen(port, () => {
console.log('NodeJS Performance Optimizations listening on: ', port)
})
これは2つのルートを公開する非常に単純なExpressサーバーです.
第一に、オンラインSource Code Repo これらの例をローカル環境で実行したい場合は、参照できます.必要なのはNODEJSがインストールされます.
以下のコードのスニペットは、あなたのパッケージを設定するのを除いて、あなたは99 %になりたいです.JSONは、プロダクションとポート6000(参照ソースコードを提供するソースコードrepoと埋め込まれたビデオでは、苦労する必要があります)にnodestra envを設定します.アプリに次を追加します.jsファイル.
'use strict'
require('dotenv').config()
const Express = require('express')
const App = Express()
const HTTP = require('http')
const BCrypt = require('bcryptjs')
// Router Setup
App.get('/pulse', (req, res) => {
res.send('')
})
App.get('/stress', async (req, res) => {
const hash = await BCrypt.hash('this is a long password', 8)
res.send(hash)
})
// Server Setup
const port = process.env.PORT
const server = HTTP.createServer(App)
server.listen(port, () => {
console.log('NodeJS Performance Optimizations listening on: ', port)
})
これは2つのルートを公開する非常に単純なExpressサーバーです.一方、ストレスエンドポイントは、BcryptJjsを使用して、パスワードをハッシュしてハッシュします.これはかなり重いプロセスです、そして、それは完全にJavaScriptで書かれているので、それはイベントループを非常にひどくブロックアップするでしょう.
私たちの最初のテストのために、私たちは/パルスエンドポイントに対してロードテストを実行するためにAutoConを使うつもりです.そのプロセスは以下の通りです.
node app
autocannon http://127.0.0.1:6000/pulse
ベースライン測定ができたので、APIサーバがヘビータスクを実行しているときに何が起こるかを見てみましょう.
node app
autocannon -d 30 http://127.0.0.1:6000/stress
autocannon http://127.0.0.1:6000/pulse
あなたが想像できるように、これは恐ろしい結果です.
これは現実世界で何を意味しますか
この例では、実世界ではあまり意味をなさないでしょうが、環境で実行されるべき種類のテスト用のテンプレートを作ります.あなたのAPIサーバーがピークで実行されているときに識別する必要がありますし、サーバーに属している軽量APIに対してロードテストでヒットします.あなたは、彼らが多くの遅れなしで処理されることができるかどうか決定する必要があります、あるいは、あなたのコードが十分にイベントループを管理していないかもしれないので、彼らがブロックされるならば.
どうやって問題を解決するのですか?
さて、私は良いニュースを持っています:スタートで述べたように、私はシリーズで忙しいです.すでに発表したコンテンツからのサンプルを使用して、私は/パルスのテストのための1秒あたりの要求を117から4 000以上に増加した.
あなたがしたいことは私のYouTubeチャンネルにあります.すでにこのシリーズの4つのビデオは、重要なものですManaging The Event Loop Phases "
この品物が貴重であることを願っています.より多くの来るために調整される😎
歓声
Reference
この問題について(APIサーバの可用性をテストする方法), 我々は、より多くの情報をここで見つけました
https://dev.to/johnjardincodes/how-to-test-the-availability-of-your-api-server-1mb8
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
さて、私は良いニュースを持っています:スタートで述べたように、私はシリーズで忙しいです.すでに発表したコンテンツからのサンプルを使用して、私は/パルスのテストのための1秒あたりの要求を117から4 000以上に増加した.
あなたがしたいことは私のYouTubeチャンネルにあります.すでにこのシリーズの4つのビデオは、重要なものですManaging The Event Loop Phases "
この品物が貴重であることを願っています.より多くの来るために調整される😎
歓声
Reference
この問題について(APIサーバの可用性をテストする方法), 我々は、より多くの情報をここで見つけました https://dev.to/johnjardincodes/how-to-test-the-availability-of-your-api-server-1mb8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol