NET Core,跨平台的輕量級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。





