PHPが動くPaaSの中でも知名度の高いheroku phpfog orchestraのそれぞれ実際のところどの程度のパフォーマンスが出るのか気になったので調べてみました。結論から言うとどのプラットフォームもAmazon EC2内のネットワークがボトルネックになっておりパフォーマンスの差はほとんどありませんでした

テストは下記の簡単なスクリプトに対してabで並列数1でリクエストを投げるという形で行いました。下記のグラフは1秒間あたりに処理したリクエスト数です。



結果が頭打ちになってしまっている原因はおそらくネットワークです。今回のテストは日本から行なっているので海を越えて東海岸のEC2に到達するまでの部分がボトルネックになっていると思われます。3プラットフォームに対してtracerouteを取ってみましたがどれもAmazonのネットワークに入った後に追跡ができなくなっています。どのプラットフォームも連続的に接続を行うと接続がリセットされてしまう現象が起こるのですが、とくにphpfogはその頻度が高くテスト自体が難しい状況でした。

traceroute to argon-stack-1879049447.us-east-1.elb.amazonaws.com (107.20.154.48), 64 hops max, 72 byte packets
 1  1.1.1.1 (#######)  2.618 ms  0.738 ms  0.699 ms
 2  hoge.nttpc.ne.jp (######)  2.966 ms  3.323 ms  3.011 ms
 3  210.153.249.209 (210.153.249.209)  3.511 ms  3.650 ms  3.476 ms
 4  210.153.249.161 (210.153.249.161)  4.049 ms  5.707 ms  4.542 ms
 5  210.165.252.145 (210.165.252.145)  3.617 ms  4.084 ms  4.376 ms
 6  xg5-0-n-otemachi-core6.sphere.ad.jp (202.239.114.173)  3.881 ms  3.082 ms  3.075 ms
 7  xe-7-1-3.a20.tokyjp01.jp.ra.gin.ntt.net (203.105.72.161)  3.596 ms  3.251 ms  2.967 ms
 8  ae-6.r25.tokyjp01.jp.bb.gin.ntt.net (61.213.162.169)  2.919 ms
    ae-6.r24.tokyjp01.jp.bb.gin.ntt.net (61.213.162.161)  3.240 ms  3.238 ms
 9  ae-1.r20.tokyjp01.jp.bb.gin.ntt.net (129.250.2.20)  5.840 ms  9.010 ms
    ae-9.r20.tokyjp01.jp.bb.gin.ntt.net (129.250.2.92)  3.462 ms
10  as-1.r20.sttlwa01.us.bb.gin.ntt.net (129.250.4.189)  108.546 ms  101.626 ms  101.496 ms
11  ae-0.r21.sttlwa01.us.bb.gin.ntt.net (129.250.2.54)  96.991 ms  100.001 ms  100.137 ms
12  ae-5.r21.asbnva02.us.bb.gin.ntt.net (129.250.4.181)  175.298 ms  202.796 ms  167.169 ms
13  ae-2.r00.asbnva02.us.bb.gin.ntt.net (129.250.3.114)  163.586 ms
    ae-2.r04.asbnva02.us.bb.gin.ntt.net (129.250.4.207)  169.794 ms  173.062 ms
14  ae-1.amazon.asbnva02.us.bb.gin.ntt.net (168.143.191.26)  164.108 ms  168.722 ms
    ae-2.amazon.asbnva02.us.bb.gin.ntt.net (168.143.228.38)  184.965 ms
15  205.251.245.1 (205.251.245.1)  184.698 ms
    72.21.220.45 (72.21.220.45)  179.675 ms  169.800 ms
16  72.21.222.149 (72.21.222.149)  169.540 ms  170.406 ms
    205.251.245.47 (205.251.245.47)  175.874 ms
17  216.182.224.203 (216.182.224.203)  164.258 ms  176.473 ms  167.645 ms
18  * * *

参考までにさくらのレンタルサーバー(スタンダード)とロリポップも一緒に同じテストをしてみると圧倒的なパフォーマンスを見せたのはロリポップでした。特にロリポップは秒間20リクエスト以上、並列数を増やしていくと80リクエストを処理する事もあり想像以上のパフォーマンスでした。

パフォーマンスが高い時もある一方で不調時の落ち込みも大きく、結果のばらつきでいえばさくらインターネットの方が安定した数値が出ています。

東海岸のAmazon以外で稼働するPaaSがあれば良いのですが、現状ではパフォーマンス面でPaaSには差がつかない状況です。一方で無料で作れるアプリの数やツールの充実度、拡張などではherokuが群を抜いています。パフォーマンスをさらに引き出すようなノウハウをご存知の方がいたら是非教えて下さい。

ベンチマークの結果は下記に公開しておきます。
PaaS bench

追記
サンフランシスコに出張中の元同僚に同じコマンドを投げてもらったところ、2倍近く性能が向上していました。

Concurrency Level: 1
Time taken for tests: 6.670 seconds
Complete requests: 30
Failed requests: 0
Write errors: 0
Total transferred: 9780 bytes
HTML transferred: 4140 bytes
Requests per second: 4.50 [#/sec] (mean)
Time per request: 222.325 [ms] (mean)
Time per request: 222.325 [ms] (mean, across all concurrent requests)
Transfer rate: 1.43 [Kbytes/sec] received

Connection Times (ms)



min mean[+/-sd] median max
Connect: 180 215 23.6 210 267
Processing: 1 8 5.6 5 24
Waiting: 1 7 5.5 5 23
Total: 186 222 25.0 217 274

Percentage of the requests served within a certain time (ms)
50% 217
66% 228
75% 240
80% 251
90% 261
95% 270
98% 274
99% 274
100% 274 (longest request)