Yo2Lua App Engine 一个全新的应用开发模式

Yo2Lua App Engine 简介:

  Yo2Lua App Engine (简称 YAE)于2009年开始研发,并在2011年5月正式推出第一个Alpha版本的公有云计算平台( http://yo2lua.com )。

  YAE 通过借鉴 PHP 语言的众多功能,来完善 LUA 语言在 Web 开发场景中所需要到的功能,充分模仿 PHP 的函数方法,让开发者可以很简单的从 PHP 语言转入到 LUA 语言开发环境。

  YAE 向用户提供一系列分布式计算、存储服务,包括分布式文件系统、分布式数据库集群、分布式缓存、分布式定时服务等。在这些服务基础上, YAE 更引入多个开放平台功能,以创新的模式提供给开发者使用。如:手机短信接口、网易微博开放接口等丰富多彩的应用。

关于 LUA 语言:

  Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它的主页是 http://www.lua.org

  Lua最著名的应用是在暴雪公司的网络游戏WOW中。

  更多信息请查阅:http://yo2lua.com/wiki/lua/

使用 YAE 进行开放平台的应用开发:

  YAE 已经把开放平台的 API 进行了完整的封装,开发者点下按钮就可以把开放平台的 API 接口集成到你的应用开发环境,形成简单的函数调用。

  如腾讯微博获取首页动态的接口是:weibo.qq.statuses.home_timeline()

  由此开发者在使用 YAE 进行应用开发的门槛和周期都大大降低,并且托管在 YAE 公有云计算平台上,开发者不再需要为架构而折腾,这些由 YAE 提供服务。

  对于应用开发者,YAE 带来的好处有:

  • 硬件成本更低,无需预先购买设备,承担更大的投入风险
  • 开发成本更低,YAE 提供许多服务供开发者使用,开发者无需重复开发,包括队列、数据库、缓存、定时、验证码、计数器,几乎覆盖了Web开发的所有领域。
  • 运维成本更低,在 YAE 上的应用无需关心硬件维护、服务监控、数据容灾等操作,YAE 会通过其高可靠的架构和方便的监控页面为用户将运维成本降到最低扩展性更强,在 YAE 上的服务无需关心服务压力猛增时带来的扩容等操作,YAE 自动支持服务扩展
  • 更加安全可靠,前端防攻击、代码检查等功能,在 YAE 上的所有应用均为多机房容灾部署,比传统的部署模式更加安全可靠,并且 YAE 提供服务的 SLA 来实现对用户服务质量的承诺

  数据库热备?有木有???负载均衡?有木有???

  都有 :) YAE 是云计算平台,你的应用会被分布到多台服务器上执行。并且我们可以确保没有单点故障,而导致你的应用访问受限。

YAE 作为开放平台应用托管服务商,我们到目前已接入的开放平台有:

  • 腾讯微博
  • 网易微博
  • 手机短信接口

  在未来半年我们还会加入更多第三方接口到我们 YAE 平台上。帮助开发者从众多第三方接口 API 中抽身出来,专注于做好自己的应用功能。

理解云计算

  现在互联网最热门的关键字“云计算”,大大小小的公司纷纷加入到这块领域。简单来说,目前的“云计算”主要分为:SaaS、PaaS和IaaS三大类。

  其中SaaS云计算,为软件即服务的概念。把传统客户端软件部署在互联网上,用户只需要一个浏览器就可以使用到软件的模式。其实早在2000年就已经有B/S结构的软件服务,与现在所说的SaaS云计算相近,但此前的B/S结构软件服务,数据库等服务端是需要用户自行部署的,而非由软件提供商进行统一部署。SaaS模式则由软件提供商统一部署并提供计算和存储服务。鉴于此特性一方面用户的使用成本降低很多,在软硬件的投入都大大缩小,但由此而衍生新的问题:数据保密和安全性。因为数据都是存放在软件服务商的服务器上,如何保障用户的数据保密性和安全性,将是SaaS模式在推广上的主要门槛。

  PaaS云计算,为平台即服务的概念。这是一种较创新的服务模式,PaaS云计算平台将为用户提供一个标准的、可扩展的应用计算与数据存储服务。用户可以在PaaS平台上开发并部署自己的应用程序,目前已有Google的App Engine(Java、Python语言)、Sina的App Engine(PHP语言)、HeroKu.com的App Engine(Ruby语言)和我们的Yo2lua App Engine(Lua语言)等多个PaaS平台。PaaS云计算要求用户使用平台所支持的开发语言,并以平台开发SDK为基础进行应用程序开发。按业界常规服务都会提供数据库和文件存储服务,其中数据库服务因需要做到云服务支持非常庞大的数据量,一般服务商多为基于key/value非关系型数据库为主,当然有技术实力的云计算平台还在此基础上实现类关系型数据库的特性,以方便开发者使用;而文件存储服务也是一个巨大的系统,可容纳PB级别的文件。

  目前大多数网站因其规模已有较多在使用云存储系统(文件/KeyValue DB),这部分就是我们一般说的私有云服务。这些系统一般只为其网站本身使用,而非公有云计算平台是为计算服务。

  对于PaaS云计算平台的数据保密和安全,同样是平台发展的主要门槛。但相对SaaS平台则要低一些,并且数据服务敏感度也没有SaaS类服务高。PaaS平台的数据存储服务为应用程序服务,平台方并不理会客户的应用存储什么类型的数据和数据结构,但SaaS平台则对于平台方更简单易懂,是由SaaS平台方制定的存储方案,最清楚的也是平台方咯 ;)

  IaaS云计算,为系统计算和存储服务为主。这是由原来虚拟机服务延伸出来的服务,(虚拟机:把一台服务器虚拟成多台服务器使用)就是我们在05年间开始流行的VPS虚拟服务器。但IaaS云计算跟我们此前的虚拟机服务有非常大的区别,老的虚拟机服务只是简单的在一台服务器上虚拟出多台虚拟的服务器,以供多种业务使用,但这些虚拟服务器的计算和存储都将局限在一台物理服务器上,并且要跟其他几个虚拟服务器共同使用这台物理服务器,计算能力和存储能力都无法达到一台物理服务器的效果。而IaaS云计算服务则可按客户需求,购买需要多快的CPU、更大的内存和磁盘空间,通常这些要求可以大于一台物理服务器;比如我可以个购买几个TB的磁盘,并且这个磁盘还会带有Raid备份,不需要担心硬盘损坏而丢失任何数据。

  IaaS云计算服务平台更侧重于提供硬件服务,客户需要在购买到的虚拟机上安装自己需要的操作系统,并部署应用服务。也因此IaaS云计算服务跟传统的应用程序兼容性最好,不需要客户对原应用程序进行修改就可以迁移到IaaS云计算平台上,享用云计算带来的多种好处。虽然IaaS提供的类虚拟服务器服务,看似没有数据保密和安全的问题,但可不要忽略虽然数据是一个虚拟的硬盘空间,但同样是可以被可获取到该磁盘映像的第三方读取。当然这个风险较PaaS平台和SaaS平台都要低。

  目前国外的亚马逊EC2和国内的阿里云、世纪互联和华为等企业都在发展自己的IaaS云计算平台。但目前国内的IaaS云计算平台与亚马逊所提供的云计算服务还有一定差距,国内还未有一个标杆服务,大家仍处于紧张的研发和测试阶段,并未出现国内的亚马逊 :) 但相信未来两年就会有的了。届时国内的IDC服务将被彻底颠覆(当然服务的售价可不能比普通托管服务器的费用还高)如世纪互联的服务,因其机房带宽资源比较优秀,但其云计算服务的销售价格偏高,相信一般网站不会轻易选择他们的服务。毕竟托管物理服务器价格比你低的话,那么IaaS云计算还有哪些优势来吸引客户?

  总结来说,PaaS和IaaS才是严格意义上的云计算平台,而SaaS只是一个云计算的服务场景。而PaaS云计算平台也包括一部分标准的IaaS平台服务,如:文件存储和数据库服务;IaaS云计算平台更容易让客户接受,但虽然客户在使用IaaS云计算服务与传统的服务器计算没什么区别,同样客户也是需要SA(运维工程师)来管理这些虚拟服务器,IaaS只是提供虚拟的服务器而已。

  现在来看,SaaS平台可以构建在PaaS平台或IaaS云平台上,PaaS平台也包括一些IaaS平台所提供的服务,而IaaS平台更接近传统的服务器服务、更容易让客户接受(现阶段是这样)

  依我看:未来云计算必然会是PaaS云计算平台为主,PaaS云计算平台可给客户更廉价、更简单的服务。

正确认识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开发框架提供的函数(框架还包括数据库操作、模板操作、分布式文件操作等等功能唷~)

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倍,很牛!我得尽快把它好好完善起来 :) 放到实际业务上。嘿嘿~完~