実際の分散Webアプリケーションの解析
(3)
例として,
この問題をチューニングするには,
完全な問題,https://
で公開されています。本稿における改変を含めたリポジトリは,https://
で公開しています。
- 注1)
- Webアプリケーションのパフォーマンスチューニングコンテストです。
単体アプリケーションへの組込み
まず競技者がチューニングを行う対象であるWebアプリケーションのPerl実装に,
X-Ray daemonを起動する
ISUCON8の初期実装はDocker Composeで提供されています。リポジトリ内のwebapp/
に,
docker-compose.
services:
isucoin:
environment:
(省略)
AWS_XRAY_DAEMON_ADDRESS: 'xray:2000'
links:
- mysql
- xray
xray:
image: amazon/aws-xray-daemon:latest
command:
- --local-mode
environment:
AWS_REGION: ap-northeast-1
AWS_ACCESS_KEY_ID: 123456789012
AWS_SECRET_ACCESS_KEY: xxxxxxxxxxx
競技者がチューニングするWebアプリケーションはisucoinと呼ばれ,xray:2000
を指定します。
X-Ray daemonからAWSにトレースを送信するために,
- 注2)
- 執筆時点ではX-Ray daemon version 3.
0.0が含まれていました。 - 注3)
- アクセスキー情報は誤って公開しないよう注意してください。IDの123456789012はサンプルです。
コードにAWS::XRayを組み込む
アプリケーションが起動するエントリポイントであるwebapp/
ファイルに,use
して,enable
しているだけです。太字が追加箇所です。
app.
use Isucoin::Web;
use Devel::KYTProf;
use Devel::KYTProf::Logger::XRay;
use AWS::XRay;
Devel::KYTProf->logger("Devel::KYTProf::Logger::XRay");
my $root_dir = File::Basename::dirname(__FILE__);
my $app = Isucoin::Web->psgi($root_dir);
builder {
enable 'XRay',
name => 'isucoin';
モジュールのインストールを行うために,cpanfile
にrequires
を追加します。
cpanfile
requires 'Devel::KYTProf', '0.9992';
requires 'AWS::XRay', '0.08';
requires 'Plack::Middleware::XRay', '0.06';
requires 'Devel::KYTProf::Logger::XRay', '0.04';
これでAWS::XRayの組込みと,
競技アプリケーションを起動し,
docker-composeのログ出力
xray_1 | 2019-04-16T15:16:58Z [Info] Initializing AWS
X-Ray daemon 3.0.0
xray_1 | 2019-04-16T15:18:24Z [Info] Successfully sent
batch of 7 segments (1.432 seconds)
実際の競技時におけるアプリケーションのパフォーマンスを解析するために,
- 注4)
- xrayコンテナがエラーを出力している場合は,
アクセスキーなどの設定を確認してください。 - 注5)
- 実行環境にGo 1.
11以上が必要です。
X-Ray console による解析
ベンチマークを実行後にX-Ray consoleを見ると,
この画面にはX-Ray daemonが送信したトレースが可視化されています。個々の丸いノードがセグメントで,
処理の絞り込み
isucoinをクリックすると,
ここでレイテンシが3秒以上の遅い処理を選択して/info?cursor=0
を選択し