[Golang/MongoDB/Redis]A/Bテスト(パフォーマンス)計測の冴えたやり方

こんにちは。KOUKIです。

とあるWeb系企業でGoエンジニアをしています。

今回は、Golang、MongoDB、Redisの開発環境をDocker上で構築し、キャッシュ有無によるA/Bテスト(パフォーマンステスト)のやり方を記事にしました。

事前準備

アプリケーション

GoのWebフレームワークの一つであるginを使って、簡単なRest APIを実装します。

Dockerfile

docker-compose.yml

main.go

handler.go

ListRecipesHandlerメソッドでは、Redisにデータがあればそれを使い(キャッシュ)、存在しなければMongoDBからデータを取得する処理を実装しています。

recipe.go

ホットリロード

Go製のairを使うとソースコードの変更を検知してビルドを自動で行ってくれるので、導入しておきましょう。

.air.tomlに設定情報を記述します。

redis.conf

redisの初期設定を変更します。

apache-benchmmark.p

パフォーマンス計測で使用する設定ファイルです。

recipes.json

データの一部を記載します。

起動確認

準備が整ったので、下記のコマンドで起動を確認します。

「Connection to MongoDB」、「Connection To Redis: ping: PONG」がコンソール上に表示されたら接続成功です。

計測

abコマンド

計測には、Apacheのabコマンドを利用します。2000リクエストを送信してみましょう。

Time taken for tests」は、2,000リクエストが完了するまでの時間を表しています。

一方、「Time per request」は、1リクエストが完了するまでのミリセコンドを表しています。

キャッシュ有無で比較するとパフォーマンスがだいぶ違うことがわかりますね。

grunplot

grunplotを使うとパフォーマンス結果を可視化することが可能です。

Unable to revert mtime: /Library/Fonts」警告が出てきますが、「benchmark.png」ファイルがローカルに生成されます。

便利ですね^^

まとめ

abコマンドで手軽にAPIリクエストテストができるし、それを可視化することも可能なのでとても便利です。

これからガンガンテストをして、パフォーマンスを意識した実装ができるエンジニアになりたいと思います^^

それでは、また!

Go記事まとめ

Go記事まとめです

コメントを残す