読者です 読者をやめる 読者になる 読者になる

Rock Me!開発者ブログ

DEVELOPERS BLOG

APIGatewayのベンチマークにwrkを使ってみた

こんにちは。福本です。

サーバレス流行ってきていますね。
Rock Me!ではAWSをメインに使っているのですが、実際Productionで使ってるのは、
EC2, ELB, S3, RDS, Route53
くらいで、クラウドの第1世代といった感じでしょうか。
使い始めのころベンダーロックインしないように気を使いすぎて、ちょっと出遅れぎみです。
ようやく、細かな案件や新規の案件を進める中で、いくつか新しい事に取り組めるようになってきました。

そんな中で、AWSのAPIGatewayを試していて、ハマったことがあるので解決策を残しておきます。

ある案件で、処理としては単純なんだけど、そこそこピークリクエストが高いというのがあって、
これはAPIGateway+Lambdaでいけるかなと思い試してみました。
パフォーマンスの目安がApache Benchのサンプルコマンドで示されていたので、
軽くサンプルを作って試してみることに。

まずは適当に打ってみたところ、

ab -n 100 -c 10 https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/test/xxxxxxxxxxxxxx
〜〜〜
140737154737160:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/Library/Caches/com.apple.xbs/Sources/libressl/libressl-11/libressl/ssl/s23_clnt.c:541:
ずらずらずら

何やらSSLのエラーがでている。
色々と調べてみるとAPIGatewayではTLSv1.2を強要すること、SNI(Server Name Indication)を使用しているのでこれらに対応しているクライアントではないとダメとの事。

他のベンチマークツールを見てみると、
wrk(GitHub)というツールが対応している模様。
Mac(10.12.1)にインストールしてみると、DLしてきて単純にmakeするだけですんなりバイナリが出来上がったのでお手軽でした。

使い方もよくあるオプションなので、すんなり使えると思います。

# 2スレッド、コネクション400、5秒間
wrk -t2 -c400 -d5 --latency https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/test/XXXX
Running 5s test @ https://XXXXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/test/XXXX
  2 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   258.60ms   80.31ms   1.07s    58.74%
    Req/Sec   511.38    250.80     0.94k    64.58%
  Latency Distribution
     50%  302.91ms
     75%  325.37ms
     90%  334.22ms
     99%  403.74ms
  4909 requests in 5.03s, 2.71MB read
Requests/sec:    976.77
Transfer/sec:    551.34KB

あと、Luaで動作拡張ができるらしいです(これはまだやってないです)

古めのベンチマークツールで困ったことがあったら試してみてください。