日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java RESTful 框架的性能比较

發(fā)布時(shí)間:2025/3/21 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java RESTful 框架的性能比较 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.



在微服務(wù)流行的今天,我們會(huì)從縱向和橫向分解代碼的邏輯,將一些獨(dú)立的無狀態(tài)的代碼單元實(shí)現(xiàn)為微服務(wù),可以將它們發(fā)布到一些分布式計(jì)算單元或者Docker中,并在性能需要的時(shí)候及時(shí)地創(chuàng)建更多的服務(wù)單元。


微服務(wù)是一個(gè)概念,并沒有規(guī)定的格式,但是很多廠商和框架都不約而同的采用RESTful的架構(gòu),盡管也有一些其它的性能很好的RPC框架。


如何在Java生態(tài)圈選擇一個(gè)輕量級(jí)的RESTful框架?可以參考一些其他人的經(jīng)驗(yàn), 比如我翻譯的: 最好的8個(gè) Java RESTful 框架。


就我個(gè)人而言,我選擇框架的理由很簡(jiǎn)單:


  • 簡(jiǎn)單,輕量級(jí)

  • 性能好

  • 穩(wěn)定,可靠

  • 易于開發(fā)和維護(hù)


我會(huì)首選遵循Java規(guī)范(JSR339)的框架,輕量級(jí),便于發(fā)布到Docker容器中。 所以我不會(huì)選擇Spring boot, Spring MVC, CXF等比較重的框架,也不會(huì)選擇純netty這樣的太過底層,還得實(shí)現(xiàn)路由等基本功能框架。


因?yàn)樽非筝p量級(jí),便于發(fā)布到docker容器中,我也不會(huì)考察JBOSS, Tomcat這樣的JEE容器, 而是選用jetty, undertow這樣的嵌入式容器。


所以,這里我挑選了幾個(gè)候選者:


  • Jersey + Grizzly

  • Jersey + Jetty

  • Dropwizard

  • RESTEasy + Netty

  • RESTEasy + Undertow


[Updated on 2015/11/18]


我增加了更多的 RESTful 框架,有些不是Jax-RS的實(shí)現(xiàn),但是也有很活躍的社區(qū)。


  • Jersey + Jetty4

  • Spring Boot

  • 純Netty

  • Vert.x


你會(huì)發(fā)現(xiàn)一些有趣的測(cè)試結(jié)果。


Jersey 是Jax-RS的官方參考實(shí)現(xiàn),可以很好的和其它JEE容器集成。RESTEasy是JBoss出品的框架,也很容易的和其它容器集成。Dropwizard實(shí)際上集成了Jersey, Jetty以及其它的第三方庫(kù)比如它的Metrics,提供了一站式的開發(fā),略微有些厚重。


測(cè)試相關(guān)的代碼已經(jīng)放在了GITHUB上(https://github.com/smallnest/Jax-RS-Performance-Comparison)。


編譯代碼


測(cè)試代碼是一個(gè)多模塊的Maven項(xiàng)目, 你直接運(yùn)行maven clean package就可以生成各個(gè)jar,而且這些jar包含了所依賴的類,執(zhí)行起來相當(dāng)簡(jiǎn)單。


你也可以在每個(gè)模塊下運(yùn)行mvn exec:java啟動(dòng)服務(wù),然后在瀏覽器中訪問 http://localhost:8080/rest/hello (對(duì)于Jersey + Jetty,地址是http://localhost:8080/hello)


測(cè)試環(huán)境


服務(wù)器


AWS C3.2xlarge


  • 8 cores (E5-2666 v3 @ 2.90GHz)

  • memory: 16G (服務(wù)只分配了4G內(nèi)存)


Java


1.8.0_51


測(cè)試工具


wrk

測(cè)試命令如: wrk -t16 -c1000 -d30s http://127.0.0.1:8080/rest/hello.

針對(duì)每個(gè)case, 我使用16個(gè)線程,以及100/200/500/1000并發(fā)進(jìn)行測(cè)試。


服務(wù)啟動(dòng)命令


java -Xmx4g -Xms4g -jar jersey-grizzly2-1.0-SNAPSHOT.jar

java -Xmx4g -Xms4g -jar jersey-jetty-1.0-SNAPSHOT.jar

java -Xmx4g -Xms4g -jar dropwizard-1.0-SNAPSHOT.jar hello.yml?

java -Xmx4g -Xms4g -jar resteasy-netty-1.0-SNAPSHOT.jar?

java -Xmx4g -Xms4g -jar resteasy-undertow-1.0-SNAPSHOT.jar

java -Xmx4g -Xms4g -jar springboot-1.0-SNAPSHOT.jar

java -Xmx4g -Xms4g -jar resteasy-netty4-1.0-SNAPSHOT.jar?

java -Xmx4g -Xms4g -jar nativenetty-1.0-SNAPSHOT.jar

java -Xmx4g -Xms4g -jar vertx-verticles-1.0-SNAPSHOT.jar -instances 20


測(cè)試結(jié)果


測(cè)試結(jié)果數(shù)據(jù)可以查看這里: 測(cè)試數(shù)據(jù)(http://colobu.com/2015/11/17/Jax-RS-Performance-Comparison/Jax-RS-Performance-Comparison),

延遲基本在幾毫秒到10幾毫秒之間。


圖形化測(cè)試結(jié)果(y軸為Requests/sec, x軸為并發(fā)量):



結(jié)論


從結(jié)果看,


  • RESTEasy的性能要好于 Jersey,無論哪種嵌入式JEE容器。


  • Jersey+Grizzly2和Jersey+Jetty, dropwizard性能差別不大


  • dropwizard底層實(shí)際是Jersey+Jetty,性能結(jié)果也和Jersey+Jetty一樣


  • RESTEasy+netty (netty3)的結(jié)果并沒有優(yōu)于RESTEasy+undertow.這出乎我的意料,可能CPU和Memory占用上會(huì)好一些


  • RESTEasy+netty4的性能遠(yuǎn)遠(yuǎn)低于RESTEasy+netty3,這出乎我的意料。或許因?yàn)镹etty線程池的改變。


  • 純netty的性能遠(yuǎn)遠(yuǎn)高于其它框架,一方面是由于沒有http router的邏輯,另一方面也顯示了Netty框架的優(yōu)秀。如果不是實(shí)現(xiàn)很復(fù)雜的路由和很多的Service,不妨使用純Netty實(shí)現(xiàn)高性能。


  • Spring Boot太厚重了,使用Spring MVC的語(yǔ)法,性能只有Jersey的一半。


  • Vert.x底層使用Netty,可以使用Java 8 Lambda語(yǔ)法,也提供了其它語(yǔ)言的支持,但是性能看起來不是太好,而且隨著并發(fā)量增大吞吐率也隨之下降。先前的vert.x測(cè)試有問題,只用到了單核,謝謝@Stream網(wǎng)友的提醒,我在代碼中增加了vertx-verticles模塊,支持多核(java -jar vertx-verticles-1.0-SNAPSHOT.jar -instances 20)。 Vert.x性能也不錯(cuò)。@heng


當(dāng)然測(cè)試也有一點(diǎn)遺憾,就是沒有記錄測(cè)試時(shí)的CPU占用率和Memory占用率,以我個(gè)人的經(jīng)驗(yàn),這方面Netty會(huì)占一些優(yōu)勢(shì)。



來源:鳥窩,

colobu.com/2015/11/17/Jax-RS-Performance-Comparison/


總結(jié)

以上是生活随笔為你收集整理的Java RESTful 框架的性能比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。