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 ...
随机推荐
- CSSBox - Java HTML rendering engine
CSSBox - Java HTML rendering engine CSSBox is an (X)HTML/CSS rendering engine written in pure Java. ...
- c 结构体struct
struct 定义初始化 #include<stdio.h> typedef struct stuInfo { ]; //姓名 int stuId; //学号 int age; //年龄 ...
- c 跟字符串有关的函数
1.字符串查找 strstr char * strstr(const char *s1, const char *s2); 在s1中查找s2,如果找到返回首个s2的首地址 char * strcase ...
- 全面理解js面向对象
前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学 ...
- 关于new Function使用以及将json格式字符串转化为json对象方法介绍
一直对Function()一知半解,今日就Function()的使用做一下总结 一.函数实际是功能完整的对象,用Fucntion()直接创建函数. 语法规则: var 函数名 = new Fun ...
- Windows Server 2012 R2 服务器管理器介绍和配置使用
1. 服务管理器是用于管理系统服务的管理工具.一般常用于windows系统,使用这个工具你可以启动.停止服务:设置服务是自动.手动启动或禁用:查看某个服务的相关信息:设置服务以什么用户启动等等(一般包 ...
- Filter 字符编码Filter 一
使用字符编码Filter package com.helloweenvsfei.filter; import java.io.IOException; import javax.servlet.Fil ...
- Cocos2d-x基础篇C++
1.C++类和对象 类的公有成员可以使用成员访问运算符(.)访问. (::)是范围解析运算符.调用成员函数是在对象上使用(.)运算符. 2.C++继承(C++中父类称为基类,子类称为派生类) clas ...
- mac的svn之cornerstone简易教程
链接地址:http://jingyan.baidu.com/article/9989c74612a55af648ecfef2.html 背景: 关于cornerstone的介绍很少: 这里介绍mac的 ...
- BZOJ 1625: [Usaco2007 Dec]宝石手镯( dp )
最裸的01背包.... --------------------------------------------------------------------- #include<cstdio ...