APIサーバの可用性をテストする方法


あなたは、生産またはクラウド環境で使用されるAPIサーバーを作成する過程であなたが開発したか、またはあなたですか?私のシリーズのこの第4の内訳では、私はあなたのAPIサーバーの可用性をテストする方法を示します、そのために、あなたはそれが重い任務を実行している間、扱うことができる1秒あたりの多くの要求を理解することができます.
これは、特に環境にとって重要な手段です.なぜなら、最後に必要とするのは、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サーバーです.
  • /パルス
  • /ストレス
  • /pulse endpointは、ビジネスロジックを含まず、レスポンスとして空の文字列を返す非常に軽量なAPIを表します.この終点を処理するとき、どんな遅れの理由もないはずです.
    一方、ストレスエンドポイントは、BcryptJjsを使用して、パスワードをハッシュしてハッシュします.これはかなり重いプロセスです、そして、それは完全にJavaScriptで書かれているので、それはイベントループを非常にひどくブロックアップするでしょう.
    私たちの最初のテストのために、私たちは/パルスエンドポイントに対してロードテストを実行するためにAutoConを使うつもりです.そのプロセスは以下の通りです.
  • エクスプレスサーバを起動する
  • node app
  • 自動テストを実行する
  • autocannon http://127.0.0.1:6000/pulse
  • これは10秒間の10の同時接続を実行する単純なロードテストです
  • テスト実行後、1秒あたりの平均要求を含むレポートを受け取る必要があります.あなたのマシンの速度に応じて、それは15 000と25

    ベースライン測定ができたので、APIサーバがヘビータスクを実行しているときに何が起こるかを見てみましょう.
  • Expressサーバーが起動していることを確認します
  • node app
  • テストするための2つのターミナルウィンドウを開く
  • ウィンドウ1において、30秒間の間、ストレス終点に対して自動操縦を実行する
  • autocannon -d 30 http://127.0.0.1:6000/stress
  • ウィンドウ2では/ストレステストが実行されている間に、/と同様に/パルスエンドポイントに対してautocannonを実行します
  • autocannon http://127.0.0.1:6000/pulse
  • /testテストが実行されている間に/pulseテストが完了したことを確認してください
  • このテスト実行の後、/pulseテストのために毎秒のリクエストの重要な低下を見るべきです.

    あなたが想像できるように、これは恐ろしい結果です.

    これは現実世界で何を意味しますか


    この例では、実世界ではあまり意味をなさないでしょうが、環境で実行されるべき種類のテスト用のテンプレートを作ります.あなたのAPIサーバーがピークで実行されているときに識別する必要がありますし、サーバーに属している軽量APIに対してロードテストでヒットします.あなたは、彼らが多くの遅れなしで処理されることができるかどうか決定する必要があります、あるいは、あなたのコードが十分にイベントループを管理していないかもしれないので、彼らがブロックされるならば.

    どうやって問題を解決するのですか?


    さて、私は良いニュースを持っています:スタートで述べたように、私はシリーズで忙しいです.すでに発表したコンテンツからのサンプルを使用して、私は/パルスのテストのための1秒あたりの要求を117から4 000以上に増加した.
    あなたがしたいことは私のYouTubeチャンネルにあります.すでにこのシリーズの4つのビデオは、重要なものですManaging The Event Loop Phases "
    この品物が貴重であることを願っています.より多くの来るために調整される😎
    歓声