CM re:Growth 2014 Tokyoで負荷試験ツールであるfullbokについて話しました #cmdevio

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

12/16に弊社主催のCM re:Growth 2014 TOKYOというイベントを開催しました。そこでfullbokという負荷試験ツールについて話しました。

fullbokとは

fullbokとはJMeterクラスタを構築するためのCloudFormationテンプレートです。
fullbokをがっつり使ってみた.006
CloudFormationテンプレートを実行するだけでテストシナリオを実行するためのMaster(Windows)とSlave(Amazon Linux)が構築されます。そのため、単一のJMeterマシンではかけられないような負荷を簡単にかけることが出来ます。詳細はお手軽JMeterクラスター 〜 フルボッコ編|アドカレ2013 : CFn #1をご参照下さい。

DNSキャッシュを回避する

複数のサーバーに対して負荷をかける際はDNSキャシュを回避する必要があります。CloudFrontやELBは複数のノードでアクセスを分散して処理する仕組みになっているため、負荷試験を行う際はそれぞれのノードに対して分散して負荷をかける必要があります。しかし、DNSキャッシュによって単一もしくは一部のノードにしか負荷をかけられない場合があります。詳細はAmazon EC2から負荷テストを行うときの落とし穴と対策をご参照下さい。

DNSキャッシュの回避に関してfullbokは未実装であったため実装しました。まずはJVMのDNSキャッシュ無効化です。これが実装されていないとJVMが名前解決した結果のIPアドレスをキャッシュするため1台のSlave毎に1台のノードにしかアクセスしない状態になってしまいます。
fullbokをがっつり使ってみた.015
次にVPCのDNSサーバーのキャッシュです。デフォルトの設定の場合、EC2インスタンスはVPCで用意されているDNSサーバーを利用しますが、VPCのDNSサーバーが名前解決した結果はTTLが切れるまでキャッシュされているため、実際には数十のノードが存在してもその内の8台のノードにしかアクセスをかけることが出来ません。
fullbokをがっつり使ってみた.020
なお、対策としてSlave毎にUnboudをインストールしていますが、この場合でも1台毎に8台のノードにしか分散してアクセス出来ないため、なるべくアクセスを分散させたい場合はSlaveはインスタンスタイプを上げるよりは下げて台数を増やす方がよいかと考えます。

Tips

後は実際にfullbokを利用する上での細かなTipsの紹介になります。
fullbokをがっつり使ってみた.026
ちなみに、ELBに関してはノードが何台存在するかはENIから確認することが出来ます。IPアドレスリストを取得するワンライナーがありますのでよければご利用下さい。

最後に

fullbokは負荷試験をかける対象がAWSでなくても利用できますし、金額も利用した時間だけで済むのでお気軽に試してもらえればと思います。GitHubで公開していますのでissueの報告やpullreqをもらえると嬉しいです(^^)

fullbok以外に複数のJMeterを使うツールとしてjmeter-ec2というものがあるそうです。私は利用したことがありませんが、Master(GUI)が不要な場合はこちらの方がシンプルなのではないかと思います。DNSキャッシュに関して対策が実施されているかは分かっていません(^_^;)

あと、GCEでやりたいという方はGCEとJMeterでフルボッコ。(パクリ) - Qiitaが参考になると思います。