不久前釋出了一篇博文“.NET輕量級RPC框架:Rabbit.Rpc”,當初只實現了非常簡單的功能,也羅列了之後的計劃,經過幾天的不斷努力又為Rabbit.Rpc增加了一大波新特性,今天主要介紹下專案近況。
特性一覽
- Apache License 2.0協議開源
- 支援客戶端負載均衡(提供了輪詢、隨機演算法的實現)
- 支援ZooKeeper和檔案共享形式的服務協調
- 執行時客戶端代理生成(基於Roslyn)
- 預生成客戶端代理
- 客戶端代理預生成(基於Roslyn)
- 抽象的編解碼器(提供了JSON、ProtoBuffer協議的實現)
- 抽象的傳輸通道(提供了DotNetty與Cowboy.Sockets的移植實現)
- 異常資訊傳遞(服務端執行時的本地異常可以傳遞至客戶端)
- NET Core專案架構
- 跨平臺
專案概況
開源地址:https://github.com/RabbitTeam/Rpc
Rabbit.Rpc(支援跨平臺)
Rpc核心類庫,有如下功能:
- 服務Id生成
- 傳輸訊息模型
- 型別轉換
- 服務路由抽象
- 序列化器抽象(預設提供JSON序列化器)
- 傳輸抽象
- 編解碼器抽象(預設提供JSON的編解碼器實現)
- 客戶端執行時(地址解析器、地址選擇器,遠端呼叫服務)
- 服務端執行時(服務條目管理、服務執行器、服務發現抽象、RpcServiceAttribute標記服務發現實現)
Rabbit.Rpc.ProxyGenerator(支援跨平臺)
服務代理生成器,提供的功能:
- 服務代理實現生成
- 服務代理例項建立
extensions(相關擴充套件)
Rabbit.Rpc.Codec.ProtoBuffer(支援跨平臺)
ProtoBuffer協議的編解碼器實現。
Rabbit.Rpc.Coordinate.Zookeeper(支援跨平臺)
基於ZooKeeper的服務路由管理。
Rabbit.Transport.DotNetty(暫不支援跨平臺)
基於DotNetty的傳輸實現。
ps:官方以有將DotNetty支援NET Core的計劃,大夥可以再等等,待官方支援後,會盡快進行適配。
Rabbit.Transport.Simple(支援跨平臺)
由於DotNetty不支援跨平臺執行,為了讓rpc能在其它平臺上跑通,故移植了“Cowboy.Sockets”實現了一個簡單的傳輸實現。
tools
Rabbit.Rpc.Tests
單元測試專案。
Rabbit.Rpc.ClientGenerator(支援跨平臺)
預生產服務代理的工具,提供瞭如下功能:
- 生成服務代理實現程式碼檔案
- 生成服務代理實現程式集檔案
效能測試
測試環境
OS | CPU | 記憶體 | 硬碟 | 網路環境 | 虛擬機器 |
Windows 10 x64 | I7 3610QM | 16GB | SSD | 127.0.0.1 | 否 |
Ubuntu 16.04 x64 | I7 3610QM | 4GB | SSD | 127.0.0.1 | 是 |
Windows10+NETCoreApp1.0+JSON協議+Simple傳輸
概述
平均用時:2601.6毫秒
平均每次用時:0.26毫秒
通過率:100%
Windows10+NETCoreApp1.0+ProtoBuffer協議+Simple傳輸
概述
平均用時:2625.4毫秒
平均每次用時:0.25毫秒
通過率:100%
Ubuntu16.04-x64+NETCoreApp1.0+JSON協議+Simple傳輸
概述
平均用時:3108.4毫秒
平均每次用時:0.31毫秒
通過率:100%
Ubuntu16.04-x64+NETCoreApp1.0+ProtoBuffer協議+Simple傳輸
概述
平均用時:3580.4毫秒
平均每次用時:0.35毫秒
通過率:100%
ps:linux效能與windows上的效能有一些差距,不知道是不是虛擬機器的原因,但有個有趣的現象,protobuffer在linux上的效能居然比json低,應該是protobuffer庫的實現不夠優秀。
測試程式碼
https://github.com/RabbitTeam/Rpc/tree/master/src/examples/performances
下一步?
等待DotNetty元件支援NETCore,並進行適配。
繼續寫Rabbit.Rpc相關的文章。
下一篇應該是,如何在Ubuntu上執行Rabbit.Rpc。
交流方式
QQ群:384413261(RabbitHub)
Email:majian159@live.com