• 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc


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

  • 相关阅读:
    LinkedList的实现源码分析
    ArrayList实现源码分析
    探索HashMap实现原理及其在jdk8数据结构的改进
    Maven的安装使用以及 Maven+Spring hello world example
    RedisHelper帮助类
    Stream 和 byte[] 之间的转换
    WCF For Silverlight跨域策略
    Linq Query常见错误
    Linq to Sharepoint--如何获取Linq Query 生成的CALM
    如何使用代码备份SQL Server数据库
  • 原文地址:https://www.cnblogs.com/ants/p/5652132.html
Copyright © 2020-2023  润新知