最近公司在考虑做openapi的proxy服务器,公司主营网游,旗下多款游戏的用户登陆,充值等等有很多接口,想聚合分散的接口统一走一个通道,所以都要走这上面,压力不小。
在语言和平台上主要在nodejs和ngx_lua中选择,当然最后还是选择了ngx_lua放弃了nodejs的方案,主要原因:
1、主要考虑公司会nodejs的人貌似就我一个,会累死我的
2、对于ngx的运维和配置相对比nodejs来说更加熟悉和有经验
3、从各种性能测试来说ngx_lua似乎在CPU和内存上更胜一筹
我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动的,工作原理和nodejs相同,代码甚至比nodejs的异步回调更好写一些。
性能测试,100并发
php:17400
nodejs:31197
ngx_lua:32628
单纯做http代理服务器加上一些简单的逻辑,似乎ngx_lua的方案更加合适,同时ngx_lua还支持redis、mysql等数据库的支持。
最后附上PHP vs Node.js vs Nginx-Lua性能测试,转载的
http://bluehua.org/demo/php.node.lua.html
这是用的24核CPU么.... 太不公平了,Node.js用了CLUSTER如同开挂,PHP却被I/O拖累
NODE代码越长性能直线下降,优化起来其实是最难的
PHP Lua都有一样的问题吧
其实这样考虑是对的 ! ngx_lua是基于nginx的扩展 nginx已经有无数家验证过 他确实是个可靠的WEB应用。而且ngx_lua 已经有很多广泛的应用 可以说技术上来说已经很成熟了,你们的平台是一个OPANAPI的应用 。所以 在这个上 选ngx_lua 是对的 !当然这并不是说NODE不好 !语言没什么好坏 !只能从成本 技术成熟度来考虑 !
之前使用过章大神openresty, 确实很值得一试, 比node.js易用, 没有那么裸, 做的各种性能优化也都是c级别的, 刚出时也是号称并发超过node.js的. lua确实是很快, 据说是脚本语言里最快的了. 不过也有缺点就是lua的文件处理很弱, 各种库非常的少, 记得当初的想要个好点的orm都没有, 还得手写. 同意楼主说的lua某种程度上真的是跟js很像啊, 当初转型node.js语言上也基本没费多少劲. 推荐一个用lua完全模仿node.js写的一个东西, 叫luvit, 现在完全不成熟, 只有些简单的http server功能, 但是基础的性能测试结果是比node.js快2倍还是4倍来的, 很恐怖啊有木有.
只做简单性能测试结果反应是很片面的。如果测试只是response一个静态数据,某些简单的http服务器可以完胜nginx,请求链上的处理节点少了,处理自然迅速。但如果加上业务代码处理动态数据,影响速度关键则在业务逻辑和数据库、网络通讯的问题上了。
从目前http服务器应用情况来说,异步io方式胜过了多线程,所以无论采用nginx或是nodejs来,差距并不会很大。关键的问题看平台的稳定性,文档、社区是否成熟,团队人员对平台的熟悉程度。如果是在不熟悉的平台开发由于失误而造成的影响会远超于平台自身因素。举个例子,假如使用nodejs没考虑到单线程异步的特性,在业务处理的代码中加入了大量的复杂计算或循环什么的,那最后上线的效果可能还不如tomcat跑出效果好!
所以不要在技术选型时过于纠结测试的结果,多考虑些团队因素。做压测的精力还是放在之后的代码优化上吧
联系客服