XRPC的目标非常明确,在.net core平台实现一个百万级别的远程方法调用RPC通讯组件。它的设计理念和GRPC一样,基于连接复用的机制实现高吞的性能;XRPC采用了HTTP2复用的思想,在协议设计上也类似文本和二进制相结合;在应用层面并没使用消息而是基于接口代理的方式让使用更简便。
协议序列化
XRPC采用了基于文本+二进制相结合的通讯协议,头以文本的方式表现主要是描述请求的位置和附加信息,这样设计的好处就是在实现网关的时候只需要解释头部就能做很好的负载策略。二进制处理并没有像GPRC一样使 Protobuf,而是使用了在.net core平台下相对更高效的组件MessagePack。
通讯机制
在早期很多RPC是基于独享连和连接池的方式进行构建,这样的好处就是实现起来方便简单,但这种设计就无法把不同请求的请求混合到一个IO上。导致网络IO随并发消息的增长而增长,从而局限了性能的发挥。XRPC的设计是尽量在最少连接情况发挥更高效的网络处理能力,这样就可以把N个请求的数据复用在一个IO上,而从让网络利用率大大提升。

但这种设计的缺点就是使用起来非常复杂,不过在.NET提供async/await支持下整体设计和应用就变得相对简单和清晰很多了。现在模块已经完成基础功能版本,以下介绍一下如何使用。
组件使用
组件现在只完成最基础的功能,后面会引用Actor的一些基础元素,让在并发业务处理数据上更高效。可以通过Nuget引用组件
Install-Package BeetleX.XRPC -Version x
定义接口服务
XRPC是通过接口的方式来描述服务,通过接口制定相关服务的逻辑,具体实现如下:

启动服务

通过Register注册相关程序集,组件会把程序集中所有控制器加载到内存中,可以通过日志加载情况:

Client定义

定义一个XRPCClient对象来进行远程访问,对象默认最大连接数是2,也可以根据自己实情况进行调整,不建增加这样会导致网络IO也会增加影响整体性能。

通过Create方法可以创建接口代理,这个代理是线程安全的,正常情况只需要创建一个静态成员即可;创建接口后只需要调用相关方法即可完成远程方法的调用。
基础性能
组件设计的性能目标是百万级别RPS的远程方法调用,不过在一台4核物机作为服务测试并没有达到这个目标,不过测试结果还算比较理想,在以上示例代码Login方法,采用500个并发模拟的情况RPS达到将近70万。以下是不同方法在不同并发数下的测试结果。

详细测试代码:https://github.com/IKende/XRPC/tree/master/Samples/Performance
专注dotnet core服务应用技术研发

BeetleX高性能通讯组件并提供ssl支持
https://github.com/IKende/BeetleX
FastHttpApi轻量级高性能的webapi组件,支持websocket和sssl,性能远高于asp.net core webapi
https://github.com/IKende/FastHttpApi
Bumblebee高性能Webapi网关,支持插件扩展,动态路由配置和负载策略
https://github.com/IKende/Bumblebe
BeetleX.Redis高性能async/non-blocking组件,默认支持json和protobuf
https://github.com/IKende/BeetleX.Redis
WebApiBenchmark高性能的Webapi测试用例管理和压测工具,可以轻实现对多个API进地数十万RPS压测
https://github.com/IKende/WebApiBenchmark

被折叠的 条评论
为什么被折叠?



