測試說明
-
僅限於 Java
客戶端使用 JMH 進行壓測, 32 線程, 3 輪預熱 3 輪測試, 每輪 10s
每次運行前都會執行 killall java, 但沒有在每輪測試時重啟操作系統
所有類庫版本在發佈時都是最新的, 除非存在 bug
所有框架都儘量參考該項目自帶的 Benchmark 實現
將會一直持續, 不定期發佈測試結果
測試用例
boolean existUser(String email), 判斷某個 email 是否存在
boolean createUser(User user), 添加一個 User
User getUser(long id), 根據 id 獲取一個用戶
Page
listUser(int pageNo), 獲取用戶列表
運行結果
生成時間: 2018-03-25 13:25:48
硬件環境: 阿里雲 ecs.c5.xlarge Intel Xeon Platinum 8163, 4CPU 8GB RAM 兩臺
軟件環境: Ubuntu x64 16.04.5, Java HotSpot(TM) 64-Bit Server VM 10+46
啟動參數: java -server -Xmx1g -Xms1g -XX:MaxDirectMemorySize=1g -XX:+UseG1GC
existUser
framework | thrpt (ops/ms) | avgt (ms) | p90 (ms) | p99 (ms) | p999 (ms) |
---|---|---|---|---|---|
turbo-rpc | 122.675 | 0.262 | 0.387 | 0.581 | 2.001 |
jupiter | 120.029 | 0.267 | 0.364 | 0.59 | 4.301 |
thrift | 96.589 | 0.332 | 0.633 | 1.174 | 1.778 |
netty | 91.215 | 0.372 | 0.403 | 0.471 | 0.767 |
turbo-rest | 83.689 | 0.384 | 0.841 | 1.501 | 3.971 |
undertow | 83.66 | 0.369 | 0.802 | 1.446 | 3.415 |
undertow-async | 73.534 | 0.433 | 0.898 | 1.708 | 5.604 |
dubbo-kryo | 61.077 | 0.528 | 0.673 | 0.915 | 3.891 |
dubbo | 60.481 | 0.533 | 0.677 | 0.868 | 3.199 |
motan | 54.075 | 0.583 | 0.907 | 1.858 | 12.206 |
rapidoid | 49.32 | 0.65 | 1.97 | 3.924 | 10.764 |
hprose | 39.489 | 0.845 | 0.506 | 4.239 | 40.239 |
springwebflux | 29.885 | 1.076 | 1.653 | 2.183 | 8.139 |
grpc | 26.896 | 1.129 | 1.425 | 1.679 | 4.08 |
springboot | 23.121 | 1.409 | 1.962 | 11.534 | 25.952 |
createUser
framework | thrpt (ops/ms) | avgt (ms) | p90 (ms) | p99 (ms) | p999 (ms) |
---|---|---|---|---|---|
jupiter | 108.155 | 0.298 | 0.417 | 0.69 | 4.415 |
turbo-rpc | 96.085 | 0.336 | 0.454 | 0.664 | 2.941 |
thrift | 91.383 | 0.354 | 0.667 | 1.231 | 1.884 |
undertow | 82.799 | 0.392 | 0.815 | 1.45 | 3.856 |
turbo-rest | 77.048 | 0.395 | 0.75 | 1.376 | 4.801 |
undertow-async | 70.419 | 0.464 | 0.827 | 1.475 | 5.983 |
netty | 70.157 | 0.439 | 0.514 | 0.603 | 0.932 |
motan | 50.684 | 0.645 | 1.006 | 2.097 | 12.452 |
dubbo-kryo | 45.009 | 0.739 | 0.921 | 1.145 | 5.12 |
hprose | 34.056 | 0.998 | 0.564 | 38.142 | 40.436 |
grpc | 28.261 | 1.088 | 1.466 | 1.718 | 3.498 |
springwebflux | 26.934 | 1.156 | 1.776 | 2.347 | 8.831 |
dubbo | 26.672 | 1.207 | 1.544 | 1.925 | 5.054 |
springboot | 23.156 | 1.417 | 2.003 | 11.649 | 27.537 |
rapidoid | 19.033 | 1.689 | 1.116 | 30.245 | 50.463 |
getUser
framework | thrpt (ops/ms) | avgt (ms) | p90 (ms) | p99 (ms) | p999 (ms) |
---|---|---|---|---|---|
turbo-rpc | 106.83 | 0.304 | 0.452 | 0.655 | 3.224 |
jupiter | 104.561 | 0.304 | 0.434 | 0.74 | 4.481 |
thrift | 91.213 | 0.351 | 0.669 | 1.235 | 1.896 |
undertow | 81.5 | 0.404 | 0.863 | 1.612 | 4.252 |
turbo-rest | 71.833 | 0.448 | 0.759 | 1.415 | 5.825 |
undertow-async | 69.805 | 0.451 | 0.804 | 1.452 | 4.768 |
netty | 68.668 | 0.508 | 0.517 | 0.543 | 0.611 |
motan | 50.618 | 0.626 | 0.986 | 1.993 | 12.222 |
dubbo-kryo | 48.287 | 0.665 | 0.817 | 1.031 | 5.087 |
rapidoid | 43.454 | 0.74 | 2.437 | 5.054 | 13.721 |
hprose | 43.037 | 0.766 | 0.778 | 1.391 | 40.042 |
grpc | 28.437 | 1.037 | 1.374 | 1.647 | 3.83 |
dubbo | 24.487 | 1.187 | 1.507 | 2.011 | 7.137 |
springwebflux | 24.419 | 1.313 | 2.085 | 2.568 | 9.11 |
springboot | 21.619 | 1.509 | 2.163 | 11.829 | 28.279 |
listUser
framework | thrpt (ops/ms) | avgt (ms) | p90 (ms) | p99 (ms) | p999 (ms) |
---|---|---|---|---|---|
jupiter | 42.076 | 0.754 | 1.343 | 2.58 | 5.767 |
turbo-rpc | 39.544 | 0.862 | 1.894 | 2.396 | 6.226 |
thrift | 30.629 | 1.048 | 2.03 | 4.092 | 10.223 |
undertow | 30.1 | 1.063 | 1.489 | 2.273 | 9.798 |
grpc | 29.788 | 1.038 | 1.331 | 1.804 | 7.528 |
motan | 28.702 | 1.102 | 1.806 | 3.351 | 11.64 |
undertow-async | 28.581 | 1.119 | 1.604 | 2.56 | 10.153 |
netty | 23.24 | 1.494 | 1.53 | 1.612 | 4.549 |
rapidoid | 20.166 | 1.604 | 1.497 | 21.725 | 39.911 |
turbo-rest | 18.627 | 1.74 | 2.134 | 3.637 | 11.554 |
springwebflux | 18.208 | 1.76 | 2.748 | 3.346 | 11.289 |
hprose | 17.308 | 1.85 | 2.023 | 2.666 | 58.524 |
dubbo-kryo | 17.054 | 1.867 | 2.462 | 3.391 | 8.618 |
springboot | 14.813 | 2.175 | 3.338 | 14.516 | 32.309 |
dubbo | 3.833 | 8.338 | 11.289 | 14.942 | 19.847 |
更新說明
硬件變化, 阿里雲 ecs.c4.xlarge 沒有了, 只能使用 ecs.c5.xlarge
軟件變化, java 9 升級為 java 10
測試方法變化, "10 輪預熱 3 輪測試 每輪 1s" 修改為 "3 輪預熱 3 輪測試 每輪 10s"
aeron: 性能差會丟消息, 沒存在價值, 從 rpc-benchmark 中去掉了
jupiter: 作者 fengjiachun 親自修改測試參數, 非常感謝
hprose: 作者 andot 親自修改測試參數, 非常感謝
thrift: 連接數由 4 個增加到 32 個, 連接池修改為分段鎖實現
其他: 常規版本升級, 都升級到了最新版本 (dubbo 2.6.1 存在 bug,繼續使用 2.6.0)
如果你認為xx框架的代碼或配置存在問題,那麼歡迎發起 Pull Request
利益相關: 本測試用例作者同時為 turbo, undertow-async 的作者
快速鏈接
RPC Benchmark Round 1
rpc-benchmark 測試說明
rpc-benchmark 項目代碼
tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=2284732365
閱讀更多 JAVA小酷 的文章