python高性能微服务框架japronto

栏目: 服务器 · 发布时间: 7年前

内容简介:最近由于业务,在看用这个项目的官方介绍是Japronto (from Portuguese "já pronto" /ˈʒa pɾõtu/ meaning "already done") is a

最近由于业务,在看用 Python 写的一些微服务框架,查看资料偶然看到 Japronto 项目

这个项目的官方介绍是

Japronto (from Portuguese "já pronto" /ˈʒa pɾõtu/ meaning "already done") is a screaming-fast , scalable , asynchronous Python 3.5+ HTTP toolkit integrated with pipelining HTTP server based on uvloop and picohttpparser . It's targeted at speed enthusiasts, people who like plumbing and early adopters.

特点官方已经用粗体标明: 极其快可拓展异步

并且看到了性能比较图:

python高性能微服务框架japronto

性能对比图(出自https://github.com/squeaky-pl/japronto)

感到十分震惊,因此查看了一下这个框架,并且进行了一下实际测量。

本次实验采用的是MacBook Pro Early 2015款

CPU:2.7GHz Intel Core i5

内存: 8G 1867 Mhz DDR3

Japronto 的安装非常简单,因此在此没必要赘述,我们可以按照官方用的测试样例进行简单编写探讨:

from japronto import Application


def hello(request):
    return request.Response(text='Hello world!')


app = Application()
app.router.add_route('/', hello)
app.run(debug=True)

这是一个最基本的样例

压测选用的是 wrk 软件( 项目地址是 https://github.com/wg/wrk ),这是一个压测软件,可以在一个多核cpu机器中生成非常高的负载,并且采用多线程设计。

我们首先使用 10 线程, 10000 连接来测试 20 s

wrk -t10 -d20s -c10000 http://127.0.0.1:8080

使用 Japronto 得到的结果如下:

Running 20s test @ http://127.0.0.1:8080
  10 threads and 10000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     8.79ms    5.68ms 130.32ms   90.38%
    Req/Sec     2.77k     2.43k   11.67k    75.04%
  551833 requests in 20.09s, 48.42MB read
  Socket errors: connect 9757, read 78, write 0, timeout 0
Requests/sec:  27468.38
Transfer/sec:      2.41MB

可以看到,有近 27.4k/srequest , 性能可以说非常高。相比之下, golang 所做的服务器的效率我们也可以进行一下测试:

Golang服务器测试结果

Running 20s test @ http://127.0.0.1:6888/
  10 threads and 10000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   364.90ms  209.53ms   1.10s    62.27%
    Req/Sec     1.59k     1.20k    9.61k    88.92%
  313932 requests in 20.52s, 123.95MB read
  Socket errors: connect 0, read 0, write 0, timeout 33
Requests/sec:  15299.29
Transfer/sec:      6.04MB

Requests/sec15.3k/s , 效率明显低于 Japronto , 同时我们又对 Tornado 性能进行了比较,由于测试框架已经写了部分逻辑,因此比较时均选用计算 Fibonacci 数列第1项进行比较

使用 Japronto 计算 Fibonacci 数列得到的结果如下:

10 threads and 10000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     9.83ms    2.70ms  33.98ms   75.53%
    Req/Sec     2.48k     2.61k   10.32k    80.24%
  494265 requests in 20.09s, 37.71MB read
  Socket errors: connect 9757, read 64, write 0, timeout 0
Requests/sec:  24596.95
Transfer/sec:      1.88MB

使用 Tornado 计算 Fibonacci 数列得到的结果如下:

10 threads and 10000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.21s   550.13ms   2.00s    60.52%
    Req/Sec   234.02    283.96     3.28k    88.09%
  21391 requests in 20.07s, 2.73MB read
  Socket errors: connect 0, read 0, write 0, timeout 18967
Requests/sec:   1065.88
Transfer/sec:    139.48KB

显然 Tornado 的处理能力比较捉鸡,并且基本都 timeout 了,因此为了提高性能,用 golang 作反向代理,进行任务分发,在同意主机启动多个进程来实验是凑可以提高 Tornado 性能,实验的结果如下所示:

python高性能微服务框架japronto

多进程Tornado处理能力

即使进行了多进程任务分发,性能仍然比较一般,响应速度比较慢。

因此可以认为,虽然 Japronto 的性能没有官方描述得如此美好,但仍然是一个非常高效的框架。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

支持向量机

支持向量机

邓乃扬、田英杰 / 科学出版社 / 2009-8 / 48.00元

《支持向量机:理论、算法与拓展》以分类问题(模式识别、判别分析)和回归问题为背景,介绍支持向量机的基本理论、方法和应用。特别强调对所讨论的问题和处理方法的实质进行直观的解释和说明,因此具有很强的可读性。为使具有一般高等数学知识的读者能够顺利阅读,书中首先介绍了最优化的基础知识。《支持向量机:理论、算法与拓展》可作为理工类、管理学等专业的高年级本科生、研究生和教师的教材或教学参考书,也可供相关领域的......一起来看看 《支持向量机》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具