Ruby Web框架

JGW Maxwell在2011年底做了一个 Ruby Web框架的并发处理能力测试 ,还做了node.js的对比测试。用250个并发去做压力测试,后端使用MongoDB数据库,总共跑完10万个请求,测试结果如下:

Web框架并发模型吞吐量
Rails多进程531 request/s
Sinatra多进程576 request/s
Sinatra::Synchrony纤程1692 request/s
Goliath纤程1924 request/s
CrampEvent IO3516 request/s
node.jsEvent IO3100 request/s

纤程IO模型的性能是传统多进程模型的3-4倍,而Event IO则是多进程的6-7倍。值得一提的是Ruby的Event IO框架Cramp甚至性能超过了node.js。看来并发性能差的原因并不在Ruby。

 

我们看一个 Ruby web框架请求处理性能评测 ,这个评测不访问数据库,也不测试并发性能,主要是测试框架处理URL请求路由,渲染文本,返回结果的处理速度。

 

Web框架处理速度
Rack1570.43 request/s
Camping1166.16 request/s
Sinatra912.81 request/s
Padrino648.68 request/s
Rails291.27 request/s

 

这里我想简单介绍3个Ruby轻量级框架,性能都远远超过Rails,很适合做Web Service:

  • Sinatra

    Sinatra本身也是Ruby社区非常流行和著名的轻量级Web框架,核心源代码不超过1000行,文档只有1页。对于Rails开发者来说,花了几个小时,就可以快速使用Sinatra开发Web Service了。Sinatra对多线程支持的非常好,可以用rainbows 来跑多线程Sinatra,IO并发处理能力很好。Github也是用它来提供开放API服务的。我自己写了一个 Sinatra的项目模版 ,如果你用Sinatra开发Web Service,可以参考。

  • Padrino

    Padrino是一个基于Sinatra之上的轻量级Web框架,在Sinatra基础之上提供了命名路由,模块化项目组织,页面helpers和generators等等。Padrino是一个高度模仿Rails的框架,API的命名和Rails很像,Rails开发者花1-2天看看文档就可以快速上手开发了。Padrino相比Rails易学易用,多线程支持良好,性能比Rails好很多,开发Website推荐使用。我自己的网站也是用Padrino开发的,源代码在: robbin_site

  • Goliath

    Goliath是一个Ruby的纤程开发框架,性能非常好,作者本身是在开发PostRank产品过程中开发的Goliath。PostRank是一个用户社交行为实时跟踪工具,需要很高的性能来支撑,PostRank被Google收购了,作者现在在Google工作。Goliath适合用来开发对性能非常敏感的Web Service或者real-time的应用,但使用Goliath有一些门槛,你不能使用普通的阻塞IO库,必须使用作者封装的一些纤程的库。http://tech.vonstark.co/post/20053649068/ruby-non-blocking-goliath  

 

比较适合写Web服务接口的轻量级Web框架我推荐两个:Grape和Sinatra,两个的区别主要是:

Grape是个纯粹的写API的框架,提供了很多写API很方便的功能,用Grape写API很爽,应该是首选,他只提供json/xml/txt格式输出。

Sinatra是个相对完善点的Web框架,带有模板渲染功能,但单纯写API的话,没有Grape爽。不过如果你的API Server有可能输出HTML页面片段,需要模板功能的话,还是Sinatra更合适,否则用Grape在代码里面拼字符串还是很麻烦的事情。

Grape和Sinatra都是基于Rack之上很轻量级的封装,我做了框架处理请求速度的测试,以及多线程并发的简单测试,基本上性能差异非常小,Grape稍微快一点点,但不超过5%。

转载于:https://www.cnblogs.com/avincross/p/3815440.html

rubyPHP的高性能体现在以下几个方面: 1.页面缓存。页面缓存指之前加载过的页面以文件方式缓存在服务器中,在一段时间内再次加载相同页面时无需重新执行页面逻辑直接加载静态页面。rubyPHP的页面缓存是自动进行的,在config/tpl.php中可配置是否启用缓存以及缓存文件的有效期。当然这仅仅是全局设置,在调用视图时可重新指定是否启用缓存以及缓存有效期。 2.SQL缓存。sql缓存指之前执行过的查询sql语句以及他的结果缓存在内存中,在一段时间内用相同的sql语句执行查询操作时不经过数据库直接返回内存中数据。rubyPHP使用Redis以键值方式缓存sql语句以及他的对应结果。rubyPHP能够在php7上完美运行。(附:关于windows php7 redis 扩展的下载参照我的另一篇博客:http://blog.csdn.net/fanghailiang2016/article/details/51396649)。rubyPHP重写了mysql_query以及mongo_query方法,在执行查询sql查询语句时会优先加载未过期的缓存数据。与页面缓存类似,sql缓存的全局配置路径为config/redis.php,在具体执行sql语句前可重新执行是否使用缓存以及缓存有效期。 3.读写分离。读写分离是建立在主从同步基础上为了减轻服务器压力,将查询语句转移到从服务器上执行的解决方案。rubyPHP重写了mysql_query,mongo_query函数,除了对查询语句进行内存级缓存的优化,同时也将查询语句放到了从服务器上执行。mysql的主从配置文件路径为config/mysql.php。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值