不久前发布了一篇博文“.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. 跨平台

项目概况

开源地址: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传输

概述

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

拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc的更多相关文章

  1. NET Core,跨平台的轻量级RPC

    NET Core,跨平台的轻量级RPC:Rabbit.Rpc 特性一览 Apache License 2.0协议开源 支持客户端负载均衡(提供了轮询.随机算法的实现) 支持ZooKeeper和文件共享 ...

  2. 拥抱.NET Core,如何开发跨平台的应用并部署至Ubuntu运行

    之前写了一篇博文宣布Rabbit Rpc跨平台了"拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc",在过程中尝试了如何编写支持跨平台的类库与应用程序,也尝试了在 ...

  3. 拥抱.NET Core,如何开发一个跨平台类库 (1)

    在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ...

  4. .NET轻量级RPC框架:Rabbit.Rpc

    最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上之前一直接触了解过RpcClient组件的开发, ...

  5. Rabbit.Rpc

    .NET轻量级RPC框架:Rabbit.Rpc 最近准备写一个.NET的管理平台应用在公司,由于存在大量的Client => Server,Server => Client的请求需求在加上 ...

  6. 拥抱.NET Core,学习.NET Core的基础知识补遗

    前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...

  7. .Net Core跨平台应用研究-HelloArm(串口篇)

    引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证 ...

  8. Rabbit RPC 代码阅读(一)

    前言 因为想对RPC内部的机制作一个了解,特作以下阅读代码日志,以备忘. RPC介绍 Rabbit RPC 原理可以用3点概括: 1.服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务 ...

  9. 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf

    <ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...

随机推荐

  1. Rxjava cold/hot Observable

    create Observable分为cold以及hot两种,cold主要是静态的,每次subscribe都是从头开始互不干扰,而hot的在同一时刻获得的值是一致的 cold Observable 使 ...

  2. GIT服务器的四种协议

    本地协议 最基本的就是_本地协议(Local protocol)_,所谓的远程仓库在该协议中的表示,就是硬盘上的另一个目录.这常见于团队每一个成员都对一个共享的文件系统(例如 NFS)拥有访问权,或者 ...

  3. windows7 下 apache2.4 和 php5.5 及 mysql5.6 的安装与配置

    要准备的软件 httpd-2.4.9-win32-VC11.zip http://www.apachelounge.com/download/ php-5.5.13-Win32-VC11-x86.zi ...

  4. 从零开始编写自己的C#框架(11)——创建解决方案

    这段时间一直在充电,拜读了园子中大神们的博文(wayfarer的<设计之道>.TerryLee的<.NET设计模式系列文章>.卡奴达摩的<设计模式>还有其他一些零散 ...

  5. 用spm2构建seajs项目的过程

    前言 Javascript模块化规范有CommonJs规范,和主要适用于浏览器环境的AMD规范,以及国内的CMD规范,它是SeaJs遵循的模块化规范.因为以前项目中用SeaJs做过前端的模块管理工具, ...

  6. 支持高并发的IIS Web服务器常用设置

    适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows ...

  7. Mysql 中 show full processlist

    processlist命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这个命令. 1. 进入MySQL/bin目录下输入mysqladmin processlist; ...

  8. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  9. 总结:如何使用redis缓存加索引处理数据库百万级并发

    前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...

  10. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...