正文
了解 Japronto!
Japronto 是一个全新的,为微服务量身打造的微框架。实现它的主要目标包含
够快
、
可扩展
和
轻量化
。的确它
快
的吓人,甚至远比 NodeJS 和 Go 还要快的多的多。要感谢
asyncio
,让我可以同时编写
同步
和
异步
代码。
Python 的微框架(蓝色)、NodeJS 和 Go (绿色) 和 Japronto (紫色)
勘误表:用户 @heppu 提到,如果谨慎点用 Go 的 stdlib HTTP 服务器可以写出比上图的 Go 快 12% 的代码。另外 fasthttp 也是一个非常棒的 Go 服务器,同样的测试中它的性能几乎只比 Japronto 低 18%。真是太棒了!更多细节查可以看 https://github.com/squeaky-pl/japronto/pull/12 和 https://github.com/squeaky-pl/japronto/pull/14
我们可以看到其实 Meinheld WSGI 服务器已经和 NodeJS 和 Go 的性能差不多了。尽管它用的是阻塞式设计,但还是要比前面那四个要快的多,前面四个用的是异步的 Python 解决方案。所以,不要轻易相信别人那些关于异步系统总是比同步系统更快的说法,虽然都是并发处理的问题,但事实远不如想象的那么简单。
虽然我只是用 "Hello World" 来完成上面这个关于微框架的测试,但它清晰的展现了各种服务器框架的处理能力。
这些测试是在一台亚马逊 AWS EC2 的 c4.2xlarge 实例上完成的,它有 8 VCPUs,数据中心选在圣保罗区域,共享主机、HVM 虚拟化、普通磁盘。操作系统是 Ubuntu 16.04.1 LTS (Xenial Xerus),内核为 Linux 4.4.0–53-generic x86_64。操作系统显示的 CPU 是 Xeon® E5–2666 v3 @ 2.90GHz。Python 我用的版本是 3.6,刚从源码编译来的。
公平起见,所有程序,包括 Go,都只运行在单个处理器内核上。测试工具为 wrk,参数是 1 个线程,100 个链接和每个链接 24 个请求(累计并发 2400 次请求)。
HTTP 流水线(图片来自 Wikipedia)