- 2016-2-11
apacheのMaxClientやNginxのworker数など、
conf等の詳細はある程度最適化してあります。
環境はさくらクラウドのメモリ2GB 2Core/4Coreです。
12回abコマンド(-c 1000 -n 1000)を異なるサーバから叩いてRequestsPerSecondを調べます。
そこから、最小と最大を省いた10回の平均値を出します。
nodejsの場合、マルチプロセス化しないとコア数が増えた時に意味が無いので、
今回はCluster化する/しないも検証します。
返すレスポンスデータは全て同一byteのテキストベースで、静的なファイルです。
検証結果
2Core Apache | 573 | 1257 | 952 | 329 | 1229 | 2588 | 910 | 1284 | 1049 | 1338 | 1267 | 1309 |
2Core Nodejs | 984 | 960 | 1317 | 3063 | 950 | 937 | 3087 | 914 | 472 | 952 | 960 | 956 |
2Core Nodejs(Cluster化) | 962 | 1119 | 3634 | 4007 | 782 | 913 | 922 | 1046 | 1144 | 1287 | 1354 | 1592 |
2Core Nginx | 935 | 510 | 1248 | 1292 | 1286 | 357 | 122 | 928 | 457 | 907 | 931 | 945 |
2Core Nginx(cache) | 3182 | 1127 | 956 | 1320 | 900 | 2236 | 955 | 610 | 1548 | 951 | 945 | 943 |
4Core Apache | 944 | 1263 | 1295 | 1285 | 578 | 1295 | 917 | 545 | 1297 | 952 | 1337 | 1062 |
4Core Nodejs | 1316 | 3414 | 4825 | 2676 | 2981 | 1260 | 3037 | 3364 | 940 | 956 | 939 | 1299 |
4Core Nodejs(Cluster化) | 3309 | 2990 | 1312 | 1537 | 1732 | 2048 | 2987 | 1874 | 2052 | 2086 | 2363 | 2517 |
4Core Nginx | 934 | 937 | 1330 | 961 | 1214 | 1138 | 955 | 1122 | 953 | 940 | 936 | 965 |
4Core Nginx(cache) | 3421 | 1439 | 1498 | 826 | 950 | 929 | 1029 | 982 | 1059 | 940 | 2606 | 2760 |
平均値
2Core Apache | 1116 |
2Core Nodejs | 1201 |
2Core Nodejs(Cluster化) | 1434 |
2Core Nginx | 850 |
2Core Nginx(cache) | 1188 |
4Core Apache | 1088 |
4Core Nodejs | 2124 |
4Core Nodejs(Cluster化) | 2218 |
4Core Nginx | 1012 |
4Core Nginx(cache) | 1419 |
結論
静的なレスポンスのみであれば、webサーバは何でもいいんじゃないですかね。
ほとんどの場合、DBが絡んで動的になりますし。
ただ、WordPressのような場合はNginxでフルキャッシュ環境にしたほうが速いし、
大規模MMOのようなキャッシュが使えない環境であればNodejsでクラスタ化したほうが速いですし。
というわけで今度はnodejs/Mysql/Redisで検証してみます。