使用uvloop和cython构建的vibora框架

前言:

     在github刷feeds的时候,发现不少老外关注了一个叫vibora的项目,该项目在github trending里的周star榜里也有不俗的成绩。 简单说,他是一个python的高性能又相当易用的一个web框架,名字叫 vibora。项目地址 https://github.com/vibora-io/vibora 。

     我本身对这类所谓的高性能web框架也些不以为然,像先前出的sanic, Japronto,后来也没有啥大消息了,虽然他们的feature也一直在更新着。 

     每当一个新web框架出来的时候,貌似框架的作者都在wiki里上传他的benchmark,好多时候都怀疑他的测试方法和环境。我们看下vibora的benchamark成绩….  感觉应该是用了高配机器和分布式压测。

    

     该文章后续仍在不断的更新修改中, 请移步到原文地址  http://xiaorui.cc/?p=5350


考虑到vibora默认是多进程模式,这样对于大多数的web框架不公平的。当然,其他的框架是可以加gunicorn,uwsgi做server层实现多进程,但毕竟不是原生。现在我们不考虑这个,简单的测试 单进程 pk 单进程 模式。  因为在家连不上公司的主机,找了个阿里云4core、8g 的主机做了个压力测试。 大家都是在一个主机环境下测试,算是公平了。


无聊的压测

虽然这种hello world测试很无聊,毕竟一个web框架存在的意义不单单是压测,但通过该压测最少可以证明,web框架cython c化,性能确实有很大的提升。

vibora的server端代码. vibora需要python3.6.x的支持. 

# xiaorui.cc

from vibora import Vibora, Request
from vibora.responses import JsonResponse

app = Vibora()


@app.route('/')
async def home(request: Request):
    return JsonResponse({'hello': 'world'})


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=2331, workers=1, debug=False)

WRK压测的结果, 我来回压了十来遍,基本qps都是在7.3w-8w之间的数值。


下面是top cpu的截图,  因为我们在vibora里配置了单个worker,自然就只是单核了。


试试 vibora 的多进程worker模式.  其实没测试之前,我就推断出会因为垃圾阿里云的软中断问题直接拉稀,果然….  测试的结果跟我们预先的一样。 阿里云的ecs主机没办法调节rps、rfs软中断均衡的,他把配置文件的sys目录直接给你只读模式了,你怎么改?

后面我又无聊加蛋疼的对比了tornado、aiohttp、 sanic+uvloop、japronto 的web框架的性能。据我压测的结果来看, python2时代的tornado果然是让人失望,毕竟好几年前的tornado异步调度器是纯python构建的,而像aiohttp是依赖python3的asyncio,asyncio的部分代码是c扩展, aiohttp更是在2017年就引入了httptools的支持,所以aiohttp比tornado高看似理所当然的。sanic比aiohttp高的原因是,sanic可引入uvloop,uvloop core基本是cython构建,所以可以说 谁替换的C代码多,谁性能就高。 vibora的qps要领先他们所有人。原因看下面 !


注释:  go net/http的压测在9w左右,go gin的压测在8w左右,可以说vibora的性能着实不差呀。


为什么vibora性能这么高?

针对python vibora性能高的这个问题,我还专门提了一个issue…. 作者的回复是说,vibora的高性能依赖于 cython实现的uvloop异步框架及cython实现的http_parser, 再加上一些cython构建的web组件,比如 模板,user-route等。还没有阅读vibora的源码,不知道里面具体的实现细节。

vibora logo

总结:

       单单看vibora的性能已经很厉害了,web的使用也像极了flask框架。 作者也提供了一些例子,看起来还算丰富,就不知道能不能跑起来! 有兴趣的可以看看, https://github.com/vibora-io/vibora/tree/master/samples 。 期望vibora能越走越好,别赚取star后膨胀了,就不愿意commit了。



大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc