NET Core,跨平台的轻量级RPC
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。
NET Core,跨平台的轻量级RPC的更多相关文章
- 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
不久前发布了一篇博文".NET轻量级RPC框架:Rabbit.Rpc",当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性 ...
- .Net Core跨平台应用研究-HelloArm(串口篇)
引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证 ...
- 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
<ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...
- ImageSharp .NET Core跨平台图形处理库
ImageSharp 是支持.NET Core跨平台图形处理库,ImageSharp是ImageProcessor 的.NET Core跨平台实现. ImageSharp 支持如下操作: 调整大小,裁 ...
- 微博轻量级RPC框架Motan
Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...
- .NET Core 跨平台发布(dotnet publish)
.NET Core 跨平台发布(dotnet publish) ,无需安装.NET Core SDK,就可以运行. 前面讲解了.NET Core 的VSCode 开发.现在来讲讲发布(dotnet p ...
- C# 的轻量级 RPC 框架
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Comple ...
- .NET Core跨平台:使用.NET Core开发一个初心源商城总括
1..NET Core基本介绍 a 作为一个.NET的开发者,在以前的开发中,我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是 ...
- [.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建
[.net 面向对象程序设计深入](9).NET Core 跨平台开发环境搭建 1.概述 读前必备:认识.NET Core 上篇介绍了.NET 新的生态环境:包括.NET Framework..NET ...
随机推荐
- 【C++算法设计】八数码问题
八数码问题 [题意] 编好为1~8的8个正方形滑块摆成3行3列(一个格子为空),如图所示 每次可以移动空格相邻的滑块到空格,要计算出能移动出目标局面的最小步数,如无法达到则输出-1. [分析] 我们可 ...
- Oracle 局域网布置数据库服务器,客户端连接提示TNS:无监听器的解决实现
Oracle布置在局域网中的服务器的时候,用本地PL SQL 链接没有丝毫的问题. 但是,如果用远程客户端的PL SQL 链接的时候却出现了“TNS:无监听器”的问题. 首先,就是进行了服务器端的监听 ...
- Android 手势锁的实现 为了让自己的应用程序的安全,现在
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/36236113 今天偶遇以github上gesturelock关于手势锁的一个样例 ...
- 自己的第一个android应用(天气)
主界面代码 package com.example.weather; import android.os.Bundle; import android.app.Activity; import and ...
- App引导页面源代码的实现
一.页面效果图
- CentOS下成功挂载xxxxxDVDx.iso并使用yum安装软件
CentOS下成功挂载xxxxxDVDx.iso并使用yum安装软件 **不断尝试,终能到达彼岸** 测试环境为Win7 32位,VirtualBOx4.2.16+CentOS6.5,可分别到virt ...
- 日志记录Filter
Filter也可以日志记录,在request 之前后, 该filter 使用Apache 日只记录工具,记录客户IP ,访问URI 以及消耗时间. LogFilter.java package com ...
- 【转】Qt Mode/View
1.view与Widget 在UI中,最常用的就是list/grid/tree了(在Qt中,grid被称为table).尤其是做那些数据库相关的程序,可能每个界面都要用到 list或grid.在Qt中 ...
- 【转载】Qt中的QString,QByteArray,Qchar, char*
先要说的是QString. 之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等 ...
- BZOJ 1257 余数之和sum(分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46954 题意:f(n, k)=k mod 1 + k mod 2 ...