1.11 性能对比
虽然OpenResty基于高性能的Nginx,目前也已经有了诸多的成功应用案例,但仍然有很多人对它抱有疑虑、持观望态度。一个可能的原因是它使用了较为“小众”的脚本语言Lua,与其他常见的开发语言相比社区很小,而且也没有大公司为之“背书”,知名度低导致不了解和偏见。但实际上,OpenResty在开发效率和运行效率上都超过了它的竞争对手。
我们可以用实际的例子来对比验证一下OpenResty的运行效率,比较的对象是与OpenResty类似、目前较为流行的Web开发语言/环境:Node.js、Go、PHP和Python。
测试方式是各自实现一个最简单的HTTP服务,不做任何额外的优化调整,直接返回“Hello World”字符串(具体的程序可以在GitHub上找到,位于benchmark目录)。
各语言/环境的详细信息如下:
■ OpenResty :版本号1.13.6.1,源码编译。
■ Node.js :版本号4.2.6, apt-get安装。
■ Go :版本号1.6.2, apt-get安装。
■ PHP :版本号7.0.22(运行在Apache2.4.18上), apt-get安装。
■ Python :版本号2.7.12, apt-get安装。注
注:本书作者并不很擅长Python,所以测试程序只使用了内置的、最简单的HTTPServer,并未使用twisted、tornado、gevent等框架,可能有些不公平,望见谅。
测试环境是一个单核Linux虚拟机,下面的表格是使用“ab -c 100-n 10000”(并发100个连接,共10000个请求)测试得到的结果:
ab测试结果如图1-2所示:
图1-2 ab测试结果
由表中的数据可见OpenResty的运行效率是最高的,在RPS指标上是Node.js的3.1倍,Go的1.6倍,PHP的2.5倍,远远胜出。
单使用ab测试可能还不足以说明问题,我们还可以使用http_load再运行另一个测试,参数是“-p 50-s 5”(并发50个连接,持续5秒),测试结果如下:
http_load测试结果如图1-3所示:
图1-3 http_load测试结果
毫无意外,在这次测试中OpenResty仍然是遥遥领先,在重要的fetches/sec指标上是Node.js的3.2倍,Go的1.8倍,PHP的2.9倍,Python的6.2倍。
对于高负荷的网站来说,即使是5%~10%的性能提升都是非常有价值的,更何况是50%~200%。注意这还是未经优化的结果,实际上OpenResty还可以轻松开启多个进程服务,成倍地扩充服务能力。
相信经过这两轮测试,读者心中应该可以得到明显的结论了。