擁抱.NET Core,跨平臺的輕量級RPC:Rabbit.Rpc

KAnts發表於2016-07-08

不久前釋出了一篇博文“.NET輕量級RPC框架:Rabbit.Rpc”,當初只實現了非常簡單的功能,也羅列了之後的計劃,經過幾天的不斷努力又為Rabbit.Rpc增加了一大波新特性,今天主要介紹下專案近況。

特性一覽

  1. Apache License 2.0協議開源
  2. 支援客戶端負載均衡(提供了輪詢、隨機演算法的實現)
  3. 支援ZooKeeper和檔案共享形式的服務協調
  4. 執行時客戶端代理生成(基於Roslyn)
  5. 預生成客戶端代理
  6. 客戶端代理預生成(基於Roslyn)
  7. 抽象的編解碼器(提供了JSON、ProtoBuffer協議的實現)
  8. 抽象的傳輸通道(提供了DotNetty與Cowboy.Sockets的移植實現)
  9. 異常資訊傳遞(服務端執行時的本地異常可以傳遞至客戶端)
  10. NET Core專案架構
  11. 跨平臺

專案概況

image

開源地址:https://github.com/RabbitTeam/Rpc

Rabbit.Rpc(支援跨平臺)

Rpc核心類庫,有如下功能:

  1. 服務Id生成
  2. 傳輸訊息模型
  3. 型別轉換
  4. 服務路由抽象
  5. 序列化器抽象(預設提供JSON序列化器)
  6. 傳輸抽象
  7. 編解碼器抽象(預設提供JSON的編解碼器實現)
  8. 客戶端執行時(地址解析器、地址選擇器,遠端呼叫服務)
  9. 服務端執行時(服務條目管理、服務執行器、服務發現抽象、RpcServiceAttribute標記服務發現實現)

Rabbit.Rpc.ProxyGenerator(支援跨平臺)

服務代理生成器,提供的功能:

  1. 服務代理實現生成
  2. 服務代理例項建立

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(支援跨平臺)

預生產服務代理的工具,提供瞭如下功能:

  1. 生成服務代理實現程式碼檔案
  2. 生成服務代理實現程式集檔案

效能測試

測試環境

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傳輸

image

概述

平均用時:2601.6毫秒

平均每次用時:0.26毫秒

通過率:100%

Windows10+NETCoreApp1.0+ProtoBuffer協議+Simple傳輸

image

概述

平均用時:2625.4毫秒

平均每次用時:0.25毫秒

通過率:100%

Ubuntu16.04-x64+NETCoreApp1.0+JSON協議+Simple傳輸

image

概述

平均用時:3108.4毫秒

平均每次用時:0.31毫秒

通過率:100%

Ubuntu16.04-x64+NETCoreApp1.0+ProtoBuffer協議+Simple傳輸

image

概述

平均用時: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

相關文章