内容简介:最近由于业务,在看用这个项目的官方介绍是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.
特点官方已经用粗体标明: 极其快 , 可拓展 , 异步 ,
并且看到了性能比较图:
性能对比图(出自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/s 的 request , 性能可以说非常高。相比之下, 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/sec 有 15.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 性能,实验的结果如下所示:
多进程Tornado处理能力
即使进行了多进程任务分发,性能仍然比较一般,响应速度比较慢。
因此可以认为,虽然 Japronto 的性能没有官方描述得如此美好,但仍然是一个非常高效的框架。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Swoole + Laravel 实现高性能框架
- 高性能异步框架Celery入坑指南
- 腾讯高性能的图片框架 LKImageKit 正式开源
- 轻量级高性能PHP框架ycroute
- go-netty 高性能网络框架
- 腾讯高性能图计算框架Plato及其算法应用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
An Introduction to the Analysis of Algorithms
Robert Sedgewick、Philippe Flajolet / Addison-Wesley Professional / 1995-12-10 / CAD 67.99
This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discre......一起来看看 《An Introduction to the Analysis of Algorithms》 这本书的介绍吧!