高性能異步RPC框架 kiss-rpc-flatbuffer介紹和測試

kiss-rpc特性:

1. 輕量級,簡單易用。支持idl和手動編寫協議兩種方式。模擬函數式調用方式,更加符合rpc遠程調用方式。linux

  1. 易修改易使用,已有的代碼能夠直接發佈使用git

  2. 數據格式支持向下兼容,採用flatbuffer協議,兼容性更好,速度更快。github

  3. 支持多值返回特性,支持超時機制,類比grpc,thrift,dubbo快幾倍甚至 幾十倍。算法

  4. 支持snappy壓縮算法,壓縮速度,性能優越。ubuntu

  5. 支持管道數據壓縮,動態數據壓縮,請求式數據壓縮,運用場景靈活普遍。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介紹和使用說明:

關於kiss-rpc使用的壓縮方式

  • 數據壓縮:使用google snappy壓縮技術, 支持強制壓縮和動態壓縮方式,靈活的壓縮方式可以運用於各類場景。網絡

  • 動態壓縮技術: 當數據包大於200字節或者設定的閾值的時候,會壓縮數據包,不然不壓縮數據包,有助於空間的利用和性能的提高,response也會根據請求是否須要動態壓縮數據。多線程

  • 單請求壓縮:對於單個request請求進行壓縮,response也會根據請求的數據包壓縮方式進行壓縮。

  • 管道壓縮: 可對指定的管道進行數據包壓縮。

待開發
  • 數據加密: 使用多證書加密和單證書加密,更加安全。

  • 負載均衡,反向代理:主動發現服務器,動態感知集羣狀態。

kiss rpc 同步和異步測試:

 * 環境:ubuntu 16.04 lts(64位)
 * 硬件:xeon cpu e3-1230@3.3GHz x 8
 * 內存:8G
 * 網絡:localhost(本地環回)

59582266.png

kiss rpc flatbuffer版本測試:

  • 單鏈接 100w QPS同步測試,耗時:20秒,平均每秒5w QPS

  • 單鏈接 100w QPS異步測試,   耗時5秒,平均每秒20w QPS

59682393.png

1000併發異步測試
  • 1000併發, 100wQPS異步測試, 耗時:5秒,平均每秒QPS:20W

59698927.png

其餘rpc性能對比 測試:(http://blog.csdn.net/jek12345...

**
* 海量互聯網業務系統只能依賴分佈式架構來解決,而分佈式開發的基石則是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來計算耗時;

1.單進程下,長短鏈接,兩個RPC框架和兩大語言對比

1846c0c8-42c3-4b40-b188-d6c024f94d34.png

6bcf041a-1779-494b-a543-ec34dafa4069.png

  • 小結:
    總體上看,長鏈接性能優於短鏈接,性能差距在兩倍以上;

對比Go語言的兩個RPC框架,Thrift性能明顯優於gRPC,性能差距也在兩倍以上;
對比Thrift框架下的的兩種語言,長鏈接下Go 與C++的RPC性能基本在同一個量級,在短鏈接下,Go性能大概是C++的二倍;
對比Thrift&C++下的TSimpleServer與TNonblockingServer,在單進程客戶端長鏈接的場景下,TNonblockingServer由於存在線程管理開銷,性能較TSimpleServer差一些;但在短鏈接時,主要開銷在鏈接創建上,線程池管理開銷可忽略;
兩套RPC框架,以及兩大語言運行都很是穩定,5w次請求耗時約是1w次的5倍;

2.多進程(線程,協程)下,兩大RPC框架和兩大語言對比

8b632946-5b54-4552-a1b2-898c5f1441cd.png

6fda7744-ec65-48b8-ae72-3ba2cb73b5c2.png

相關文章
相關標籤/搜索