WEB開發架構性能基準測試解讀與趨勢分析
TechEmpower的《Web Framework Benchmarks》性能基準測試,是關注Web開發架構發展的重要途徑。但是内容資料衆多,每次看都耗費大量時間。這是根據Round17(2018-10-30)測試結果做的整理筆記,以及結合多輪結果做的趨勢分析。
Web架構性能排名
首先,根據開發為出發點,排除了純伺服器和ORM不完善的架構。每種語言也僅僅選擇了一兩種性能靠前,比較知名的架構。專門的resty架構,也由于差異較大,沒有收錄。所得的架構性能排名如下(以H2O伺服器速度為基準100%):

1、主流語言的異步架構
由于Web開發的标杆語言Java的标志性架構Spring,在SpringBoot2.0架構中推出了WebFlux異步核心。全面标志着Web開發已經由大伺服器與容器時代,轉向了異步時代。而Servlet技術所代表的容器技術,已經成了備選。
此次,入選第一集團的所有架構都是異步架構。且都有着不輸于C++的性能表現。比如這次奪冠的是Rust語言架構Actix,有着純伺服器50%以上的性能,比較讓人驚喜。需要說明的是此次資料中沒有出現SpringBoot,不過根據網上Vertx+SpringBoot的實際性能測試表現《Spring Boot同步架構與Vert.x異步架構高并發性能對比》,把SpringBoot加入了排名。
2、新興語言的異步架構
此次,排名第二集團的所有架構,都是新興語言。令人詫異的是Golang的架構表現不佳。這可能和Golang的社群熱度不高有關。影響了相關架構的開發疊代速度,導緻成熟度不高。Golang中性能最好的Iris架構此次沒有參評,不然性能還是有提升空間的。然後,此次沒有收錄的Swift語言Vapor架構也是值得關注的。
3、腳本語言的異步架構
腳本語言由于其原理限制,性能不能和主流語言比較,已經是非常好的表現了。
4、主流語言的傳統架構
以Java語言Servlet容器技術為代表的傳統架構,由于不同技術的層層包裹之下,其性能已經被異步架構遠遠抛下。此次Spring架構7.3%的性能還是有點偏低的,實際表現應該會更好。
5、腳本語言的傳統架構
以Ruby和Python語言為代表的Web開發腳本語言,是表現比較穩定的架構。其提升空間也不會太大。它的異步架構,比如Python的Tornado和Sanic,由于體系和機制的問題,性能有一定提升,但有限。
6、PHP語言的傳統架構
由于Php語言的原理限制,對Php的性能影響最大的還是其使用方式,不恰當的設計會使程式性能急劇下降,是以哪怕PHP的實際性能并不低的情況下,其架構和程式的表現隻能用糟糕來形容。實際使用中,Python和Php兩個功能基本相似的程式,性能相差5倍以上很常見。是以,對于Php大家還是謹慎選擇。
Web架構發展趨勢分析
有人說,異步架構就是把單線程變成了多線程,每個任務并沒有變化。這種觀點是不正确的。異步架構之是以有着近5倍的巨大性能提升,主要得益于開源。開源使得原來由異步核心+Web伺服器+Servlet容器+JSP+Web架構等許許多多軟體配合的事情,變成由一個架構來提供,中間節省了巨大的空間和時間開銷。是以Web架構的發展方向是偏平化,逐漸會淘汰中間環節,變成大一統架構。一如Spring架構的演變過程。
另一方面,腳本語言原本生态上就是以開源為根基,架構融合帶來的性能提升并沒有主流語言那麼大。腳本語言的開發地位會發生動搖。畢竟如果主流語言的性能有10到20倍提升,那麼腳本語言的開發速度就不再是關注重點。
最後,我們可以看到,随着前端架構的發展,資料與頁面分離成為常态。摧生了大量的Resty架構。revenj-jvm的性能甚至達到了70.5%。而且,可以預見的,Resty架構會迅速向GraphQL為代表的查詢語言架構演進。Web架構将會變得越來越快,越來越薄。
附表
1、主流語言的異步架構
Actix+Diesel(Rust)
Vert.x+SpringBoot(Java)
ActFramework(Java)
AspCore+Kestrel(.Net)
Silicon Web(C++)
2、新興語言的異步架構
Amber(Crystal)
Ktor(Kotlin)
Gin(Golang)
Echo(Golang)
3、腳本語言的異步架構
Lapis(Lua)
Koa(Node.js)
Express(Node.js)
4、主流語言的傳統架構
SpringBoot+SpringMVC(Java)
5、腳本語言的傳統架構
Sinatra+Sequel(Ruby)
Django(Python)
Flask+SQLAlchemy(Python)
6、PHP語言的傳統架構
CodeIgniter(PHP)
Laravel(PHP)
(完)