python高性能微服务框架japronto
最近由于业务,在看用 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.特点官方已经用粗体标明:极其快, 可拓展, 异步,
并且看到了性能比较图:
文章图片
性能对比图(出自https://github.com/squeaky-pl/japronto)
感到十分震惊,因此查看了一下这个框架,并且进行了一下实际测量。
本次实验采用的是MacBook Pro Early 2015款
CPU:2.7GHz Intel Core i5
内存: 8G 1867 Mhz DDR3
Japronto 的安装非常简单,因此在此没必要赘述,我们可以按照官方用的测试样例进行简单编写探讨:
from japronto import Applicationdef 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
【python高性能微服务框架japronto】使用 Japronto 得到的结果如下:
Running 20s test @ http://127.0.0.1:8080
10 threads and 10000 connections
Thread StatsAvgStdevMax+/- Stdev
Latency8.79ms5.68ms 130.32ms90.38%
Req/Sec2.77k2.43k11.67k75.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/s 的 request, 性能可以说非常高。相比之下,golang 所做的服务器的效率我们也可以进行一下测试:
Golang 服务器测试结果
Running 20s test @ http://127.0.0.1:6888/
10 threads and 10000 connections
Thread StatsAvgStdevMax+/- Stdev
Latency364.90ms209.53ms1.10s62.27%
Req/Sec1.59k1.20k9.61k88.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/sec 有 15.3k/s, 效率明显低于 Japronto , 同时我们又对 Tornado 性能进行了比较,由于测试框架已经写了部分逻辑,因此比较时均选用计算 Fibonacci 数列第1项进行比较
使用 Japronto 计算 Fibonacci 数列得到的结果如下:
10 threads and 10000 connections
Thread StatsAvgStdevMax+/- Stdev
Latency9.83ms2.70ms33.98ms75.53%
Req/Sec2.48k2.61k10.32k80.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 StatsAvgStdevMax+/- Stdev
Latency1.21s550.13ms2.00s60.52%
Req/Sec234.02283.963.28k88.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 性能,实验的结果如下所示:
文章图片
多进程Tornado处理能力
即使进行了多进程任务分发,性能仍然比较一般,响应速度比较慢。
因此可以认为,虽然 Japronto 的性能没有官方描述得如此美好,但仍然是一个非常高效的框架。
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- python学习之|python学习之 实现QQ自动发送消息
- CET4听力微技能一
- 微习惯复盘
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 员工的微信朋友圈是公司的宣传阵地吗()
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)