Flask vs Falcon,Gunicorn vs Tornado,Twisted vs wsgiref的基准


基准测试的开始

有一天,我对Matz在做RT的推文的内容感到好奇。

Flask有很多钩子和可扩展点,因此它只会减慢抽象调用树的一部分,并且我认为多个应用程序共存于一个进程中,除了HTTP请求外。应用程序上下文是单独准备使用的,否则它会很繁重。

-INADA Naoki(@甲烷)2018年10月20日

我并不是真的要求Python提供个人使用的速度,所以我想知道是否是这种情况。
但是,我对随后的推文中提到的名为Falcon的Web框架感到好奇,当我查找它时,我发现了官方基准测试结果。

image.png

显然,猎鹰非常快。
另一方面,我感兴趣的另一件事是在Gunicorn网站上。 Gunicorn是在使用Python构建应用程序服务器时经常使用的软件,但是已经发布了将Gunicorn用作嵌入式服务器的文档。
我一直对纯Python嵌入式服务器感兴趣,

我甚至希望在Python中使用单个二进制文件的可用于生产的http服务器! !!

我写了一个名为

的文档。因此,我也担心Gunicorn的表现。
由于我对这方面的兴趣,

什么是作为Python嵌入式服务器的快速服务器?
Flask和Falcon有何不同?

我想知道

,所以我决定对其进行基准测试。

嵌入式Web服务器

这些是这次使用的Python嵌入式Web服务器。

  • 独角兽
  • 龙卷风
  • 扭曲的
  • wsgiref

正如我在上一节中所写,

Gunicorn是一种常用的wsgi服务器。 Tornado是前一篇文章中介绍的Web框架,并使用提供的wsgi服务器作为其功能之一。如果它不为人所知,它会扭曲吗?这是一个使用了很长时间的网络库,也用于Bittorrent代码;最近,还有一个实现Python的http2服务器。最后的wsgiref是模块名称,而不是库名称。它引用Python标准库中包含的参考实现的wsgi服务器。

网络框架

  • 烧瓶

Flask是一个微框架,一段时间以来一直是热门话题。猎鹰是从那时起出现的微型框架。信息不多,但速度很快。唯一的谣言是,这是我不时听到的图书馆。

烧瓶代码

1
2
3
4
5
6
from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "Hello F1!"

猎鹰代码

1
2
3
4
5
6
7
8
9
import falcon

class SampleApp:
    def on_get(self, req, resp):
        resp.body = "Hello F2!"
        resp.status = falcon.HTTP_200

app = falcon.API()
app.add_route('/', SampleApp())

两者都可以做得很小。

基准工具

蔬菜

image.png

到目前为止,简单的工作台使用的是apache工作台,但是这次我将使用这种蔬菜。它是由golang制成的,似乎相对易于使用。这次,负载以550rps的速度施加了180秒。

1
$ vegeta attack -duration=180s -rate 550

基准结果

<表格>

服务器

框架

成功率[%]

均值[ms]

50%[ms]

95%[ms]

99%[ms]

最大值[ms]


<身体>

gunicorn

猎鹰

100.00

1.37

0.91

2.15

12.12

81.44

龙卷风

猎鹰

100.00

1.13

0.81

1.65

8.66

52.87

扭曲

猎鹰

100.00

2.31

1.20

4.58

28.37

136.24

wsgiref

猎鹰

81.42

790.66

2.92

3677.59

16476.12

44156.88

gunicorn

烧瓶

100.00

1.55

1.16

3.55

7.59

37.95

龙卷风

烧瓶

100.00

2.96

1.04

6.19

38.97

568.63

扭曲

烧瓶

100.00

1633.42

1.99

10066.98

11590.31

11918.90

wsgiref

烧瓶

72.75

815.74

2.44

4739.70

16115.85

44172.28


image.png

考虑

当我这次尝试时,古尼康很稳定。是那个地方吗?亚军像龙卷风吗?毕竟,标准模块wsgiref并不是很快。 Falcon在库比较方面仍然更快。就像那样。但是,在某些情况下,如Twist会有很大的差异,而在某些情况下则不会像wsgiref一样出现,并且原因尚不清楚。对于Twisted Flask,Flask的处理速度可能很慢,而整个服务器的响应速度很慢。
那么Gunicorn Falcon好吗?事实并非如此。
建议使用nginx等反向代理Gunicorn,而Falcon的知识相对较少。

印象数

我已经认真研究了各种Python嵌入式服务器,但是类型却令人惊讶。但是,如果您真的想在生产环境中进行操作,则需要了解安全性,并且如果正确考虑生产设置,则会遇到许多困难,例如缺乏专门知识。但是,我认为如果通过hackathon等快速制作它,可以足够使用它,因此我希望不时继续使用它。