1. 輕量級,簡單易用。支持idl和手動編寫協議兩種方式。模擬函數式調用方式,更加符合rpc遠程調用方式。linux
易修改易使用,已有的代碼能夠直接發佈使用git
數據格式支持向下兼容,採用flatbuffer協議,兼容性更好,速度更快。github
支持多值返回特性,支持超時機制,類比grpc,thrift,dubbo快幾倍甚至 幾十倍。算法
支持snappy壓縮算法,壓縮速度,性能優越。ubuntu
支持管道數據壓縮,動態數據壓縮,請求式數據壓縮,運用場景靈活普遍。windows
* 環境: linux, unix, windows, macOS
* 傳輸協議:flatbuffer for dlang(須要安裝此依賴庫, https://github.com/huntlabs/g...
* 壓縮協議:snappy(須要安裝此依賴庫, https://github.com/google/sna...
* 開發語言:dlang
* 編譯器:dub
* github:https://github.com/huntlabs/kiss-rpc
* 開發者筆記:[開發筆記](http://e222f542.wiz03.com/share/s/3y8Ll23R1kuW2E2Bv211ZNaJ3xapdS0TaQCk2ieqTL2UN24T))安全
IDL協議編寫和使用說明:IDL協議詳細說明](http://e222f542.wiz03.com/sha...服務器
數據壓縮:使用google snappy壓縮技術, 支持強制壓縮和動態壓縮方式,靈活的壓縮方式可以運用於各類場景。網絡
動態壓縮技術: 當數據包大於200字節或者設定的閾值的時候,會壓縮數據包,不然不壓縮數據包,有助於空間的利用和性能的提高,response也會根據請求是否須要動態壓縮數據。多線程
單請求壓縮:對於單個request請求進行壓縮,response也會根據請求的數據包壓縮方式進行壓縮。
管道壓縮: 可對指定的管道進行數據包壓縮。
數據加密: 使用多證書加密和單證書加密,更加安全。
負載均衡,反向代理:主動發現服務器,動態感知集羣狀態。
* 環境:ubuntu 16.04 lts(64位)
* 硬件:xeon cpu e3-1230@3.3GHz x 8
* 內存:8G
* 網絡:localhost(本地環回)
單鏈接 100w QPS同步測試,耗時:20秒,平均每秒5w QPS
單鏈接 100w QPS異步測試, 耗時5秒,平均每秒20w QPS
1000併發, 100wQPS異步測試, 耗時:5秒,平均每秒QPS:20W
**
* 海量互聯網業務系統只能依賴分佈式架構來解決,而分佈式開發的基石則是RPC;本文主要針對兩個開源的RPC框架(gRPC、 Apache Thrift),以及配合GoLang、C++兩個開發語言進行性能對比分析。
測試場景client, server都是單進程,長鏈接,在單次鏈接內發起1w(5w)次rpc調用,計算耗時;
client, server都是單進程,短鏈接,共發起1w(5w)次鏈接,每次鏈接單次RPC調用,計算耗時;
併發4個client進程,每一個進程長鏈接10w rpc,服務端單進程多線程(協程),計算耗時;
因爲不一樣語言,耗時統計存在誤差,好比boost.timer在程序裏計算出來的耗時明顯偏小,因此統一使用linux命令time來計算耗時;
小結:
總體上看,長鏈接性能優於短鏈接,性能差距在兩倍以上;
對比Go語言的兩個RPC框架,Thrift性能明顯優於gRPC,性能差距也在兩倍以上;
對比Thrift框架下的的兩種語言,長鏈接下Go 與C++的RPC性能基本在同一個量級,在短鏈接下,Go性能大概是C++的二倍;
對比Thrift&C++下的TSimpleServer與TNonblockingServer,在單進程客戶端長鏈接的場景下,TNonblockingServer由於存在線程管理開銷,性能較TSimpleServer差一些;但在短鏈接時,主要開銷在鏈接創建上,線程池管理開銷可忽略;
兩套RPC框架,以及兩大語言運行都很是穩定,5w次請求耗時約是1w次的5倍;