正确认识LUA在WEB开发上的特长

  在此前我发表过两篇文章,主要介绍LUA在WEB开发上的尝试和LUA的性能测试。其中它的性能测试是蛮不错的,普通的逻辑运算确实比PHP强,但一旦连接数据库的处理,那么这个优势就缩小了,但也基本有1.5~2倍的处理效率吧 ;) 但这点性能提升好像不足以让我们从应用非常普遍的PHP转到LUA上进行开发吧~包括我自己也只是在项目中的一小块应用上使用了LUA来处理。

  那么LUA如此之简单,很多操作库都需要自己开发来实现。值得吗?当你认识到LUA的真正意义,你会知道这是值得的。

  第一点:你可以用C或LUA本身来实现需要的操作库,如:数据库操作、模板、图片处理、文件处理等等。

  第二点:随心所欲的书写代码,没有什么你是无法实现的。Pool、Hook、Filter等都是非常简单的实现,PHP要实现这些功能却有点难度咯。其中WordPress博客系统上的Hook、Filter应用比较多,正是因为WordPress提供了这样的开发模式,它的插件数量非常的多,并且要开发一个WordPress也是很简单的事情。重点是写WordPress插件,不需要修改它系统本身的代码。正是这样插件才能广泛的流行和安装。如果插件需要修改系统代码来实现,这只能算是个 Hack ,这就无法做到很好的兼容性了。

  Yo2 正在努力开发一个LUA的WEB开发框架, 进一步降低从PHP转入LUA开发的门槛。

  贴一个很简单的LUA代码示例:

function aF()
    return 'b'
end

function aF_filter(b)
    if b == 'a' then return 'aaa' end
    return 'cc'
end

addFilter('aF',aF_filter)

print(aF())

  函数aF的返回值将被aF_filter过滤为cc输出。其中 add_filter 是LUA开发框架提供的函数(框架还包括数据库操作、模板操作、分布式文件操作等等功能唷~)

Yo2三岁了~该上幼儿园咯

  转眼三年了,时间过得很快。我们Yo2成长蛮顺利的,我和charles都为此感到欣慰!毕竟这几年过来,还是只有我们两个人扛起了Yo2的大小事务~目前Yo2的博客服务已经走上正轨,在健康发展ing。今年我的时间明显比早两年投入的少一些,大家别以为俺的心思不在这上面哦,Yo2可是我们最大的财富,我只是在想日后更多的事情。

  在Yo2两岁时,我们的技术架构基本定型,足以承载百万级的用户量,所以今年我们需要做的工作并不算多。维持稳定的服务才是重点。今年加入的服务器数量也是历年最多的,但过程中有点问题需要调整,目前到位的新机器还未正在发挥作用,很抱歉~ _-!! 尽快把它们用起来吧:P

  Yo2能顺利走到今天,我们非常感谢大家的支持。没有大家,Yo2会出现资金压力的,尤其是现在的盘子已经够大的了,每月的硬件成本,是收费服务的营收来支撑的呢。大家应该认识到,Yo2的做事风格很务实。从来就没乱花一分钱,更别说铺张浪费呢 :P 我们只会尽最大的努力,给大家带来更好的服务。(挑机房,要货比三家,带宽质量要好好的,价格要优惠再优惠的。~囧~我的工作QQ上居然有上百个做IDC服务的,看来我这几年联系过的真不少了)

  用技术节约成本,也是Yo2能走到今天的重要因素。charles的技术架构,使得Yo2的硬件成本压到了最低。业界的朋友们,都很难相信Yo2的数据处理服务器,单机可以提供10万个WordPress博客服务。甭笑我们一台机器叫什么数据中心,我们为此而自豪呢 ;)

  在10月我们已经购入两台高端配置的服务器加入到数据处理上,主要目的是优化博客的服务能力,其次Yo2的目标不仅仅是博客,我们还要给大家提供更多元化的服务。博客是一块基石,站得稳才能跳得高。大家的支持,是我们强劲的后盾啊,Yo2要再看远一些。

  Yo2正式上幼儿园了,Yo2今年会有更多的服务出来。其中一个也将在11月正式向大家发布,大家记得捧场。嘿嘿!~

  后续的发展路线在我们脑海里已经有了清晰的描绘,接着就是如何实现,进入实际性的操作上。新的一年,Yo2不会让你失望,处处惊喜 ;)

  最后我诚意邀请大家参加Yo2在杭州举办的生日会,马上报名去~

LUA与PHP在WEB应用的性能对比

  这几天用在WEB开发的LUA框架已经完成,框架中已包括数据库操作和模板操作的功能,能够很简单方便的应用在WEB开发上。在此时我对这个LUA框架和PHP开发的WEB应用分别进行充分的压力测试 ;)

  服务器配置:WEB服务器一台,压力测试服务器一台,均为双核+4G内存,CentOS 64位操作系统

  网络环境:局域网

  软件环境:yo2lua (50线程),Nginx+PHP-FPM (50进程)
       应用程序均为连接MySQL数据库查询1行数据并输出(表中就只有一行数据)

  压力测试软件:httperf+autobench

  操作命令行:autobench –host1=192.168.200.251 –port1=8001 –host2=v2.54xing.com –port2=80 –uri1=/ –uri2=/a.php –quiet –low_rate=500 –high_rate=5000 –rate_step=100 –num_call=1 –num_conn=10000 –timeout=10 –file /tmp/result.tsv
  从500并发起步,直到5000个并发,每次测试以10000个连接为基准取得平均值

result

  从测试结果中分析得出,PHP在并发数达到800的时候,性能出现严重的下降并且不稳定。而LUA则一直达到3200个并发时出现一次突发的性能下降,上升到3800个并发后性能下降一半并且不稳定,但依然能维持在2000个并发以上。

  这份简单的测试告诉我,LUA在WEB应用上,性能可以是PHP的4倍以上,并且LUA在3000个并发时,占用的服务器资源非常少,远比PHP要低得多。

  这个LUA的WEB开发框架定位就是简单、高性能,也许一些复杂的功能无法实现,我认为这部分功能可以转到PHP类的语言进行开发就可以,不必要把这个开发框架变得复杂庞大起来,不然就背离原来简单、高效的宗旨了 :P

  LUA跟C的无缝对接,彻底征服俺了 _-!! ~ 刚用一台四核8G内存的WEB服务器跑个压力测试,稳定达到4500个并发/秒。

LUA-WEB开发的新方向

  从事PHP开发有好几年了,初出茅庐时就接触了PHP和JAVA两种WEB开发语言,其中JAVA主要是SERVLET模式,而PHP则是使用时间最长的一门语言。真正应用在业务上的也就是PHP了。PHP的优点我就不废话了,但并不代表它没缺点。PHP给我最大的困扰就是不支持多线程,不支持异步处理,也正是因为这两点导致PHP容易导致堵塞。

  近期一个项目上,我写了一个简单的PHP开发框架,在这个框架基础上已经做了两个版本的开发,第二个版本是Flash+PHP。其中主要应用到的是JSON-RPC接口部分,PHP要做的基本就是数据逻辑处理方面的工作了。因为有了点经验,所以我就想是否可以从PHP换到LUA类的语言上做WEB开发。

  查看过不少的资料,发现LUA会是一个很好的选择。我看中它的原因就在于LUA跟C的无缝配接上,C与LUA上的代码方法都可以互相调用、共享数据。并且我在去年就自己写了一个WEB SERVER程序,我可以比较简单的在原来的基础上集成对LUA的支持。但也有一个大的问题存在,LUA在WEB应用上的开发资料非常少,国内甚至没有什么WEB项目是使用LUA进行开发的,也许有很多东西需要自己去摸索。据我了解的有lighttd是支持FastCGI模式调用LUA,apache也有个mod_lua,但Nginx方面的资料我就没找着 _-!! (我很喜欢用Nginx来做WEB SERVER和Proxy,它真的很强大)当然还有一写直接就使用LUA来写的WEB SERVER,但考虑到LUA的Socket库不支持epoll,担心性能有问题。

  so~我就着手自己弄个LUA SERVER吧 ;) 下面是这个LUA SERVER的业务处理流程图:

lua-server

  最上级的还是Nginx,它的主要作用是负责负载均衡、访问过滤和静态文件访问等服务。接下来就是核心LUA SERVER,这里不仅是一个WEB SERVER,同时这也是一个LUA的WEB开发框架的核心,使用多进程和多线程互相配合的模式提供Server服务,里面还包括了MySQL的Connect pool和Memcache的Connect pool,pool 是JAVA开发里面经常用到的,但PHP就因为没有多线程,就无法实现。

  接下来的是一个Controller负责业务处理的调度。还包括一个Template engine(废话,WEB开发没一个好的模板引擎会很累的)

  剩余的就是WEB项目里面的业务处理程序咯,这没啥好说滴。我的经验是,这类代码最多使用的是 if、for和数据库操作之类的处理了。所以说要拿什么语言来开发WEB都行~能连数据库都搞定了。BASE语言也可以写CGI~囧~

  现在LUA SERVER的基础模型已经写好了,经过一些简单的压力测试,LUA的性能大概是PHP的1~2倍,很牛!我得尽快把它好好完善起来 :) 放到实际业务上。嘿嘿~完~

尊重是双方的互动

  我们从小时候,文化就教育我们应该尊重人,和如何获得人家的尊重。非常简单的一个词语:尊重,但我们是不是真的认识这个词的含义?未必吧~

  人要获得其他的人尊重,就先从自己开始尊重别人。这是一个互动的过程。我在此前尊重(也许还带崇拜?)过一些人,但我在过程中受到一点点的伤害了,so~我也就开始藐视这些人的存在,why?因我在这个互动的过程中,付出了,但没有回报,更甚至被人‘藐视’~?我人的本性显露出来了,自私的我认为付出了,你不给回报就算了,居然还来伤害我?这肯定不行的,马上从之前的尊重来个180度转弯,藐视之~嘿嘿。

  如果你是一个上司,希望得到下属的尊重吧?请问,你在乎他们的感受吗?你乐意接纳下属的意见吗?

  如果你是一个大款,希望得到大家的尊重吧?请问,你觉得清洁工的劳动跟你有关吗?

  如果你是TA的另一半,TA做家务、或者TA努力赚钱,你会如何对待TA的付出?

  不懂的朋友向你请教、问个意见,请问你会如何对待这些问题?

  请问你有尊重的人吗?跟他互动过吗?互动的过程愉快吗?