RSF 分布式 RPC 服务框架的分层设计

RSF 分布式 RPC 服务框架的分层设计,第1张

RSF 分布式 RPC 服务框架的分层设计 RSF 是个什么东西?

一个高可用、高性能、轻量级的分布式服务框架。


支持容灾、负载均衡、集群。


一个典型的应用场景是,将同一个服务部署在多个Server上提供 request、response 消息通知。


使用RSF可以点对点调用,也可以分布式调用。


部署方式上:可以搭配注册中心,也可以独立使用。


渊源

RSF 的核心思想参考了淘宝HSF、Dubbo 等优秀框架。


功能上大体相似,但是实现逻辑完全不同。


因此没有什么历史包袱。


总的来说对比淘宝HSF少了历史包袱,相比Dubbo更加轻量化。


而且还支持了虚拟机房,对于多机房部署的产品可以省下大量带宽成本,同时也降低了远程调用时间。


RSF虽然在功能上与两位前辈出入不大,使用RSF最直观的感受就是简单方便,配置少、依赖少,功能强大。


特点

RSF 的最大特点就是在强大的功能支持下,依然可以保持:最简单、最轻量。


我们先轻描淡写的说一下RSF 的特点。


简单容易(三个一):1 行代码发布服务、1 行代码订阅服务、1 行代码使用服务

体积轻薄:RSF 是基于 Hasor 构建,此外还依赖了 netty 和 groovy。


因此包含 RSF 在内引入的JAR包总数只有 5 个,其中 RSF 只有大约 700KB 的体积。


工作原理

RSF 是专门为集群、高可用系统进行设计的分布式 RPC 服务框架。


服务提供者可以是一个集群,服务的消费者也可以是一个集群,两者混合在一个集群里也是ok的。


同时为了增强融灾 RSF 的注册中心也是支持集群的。


所以基于 RSF 构建的服务系统不会存在任何单点问题。


框架分层

RSF 的架构设计上遵循了自顶而下明确的分层设计,每一层都有专注的工作职责。


大体分为 9 个层次。


他们如下所示:,你也可以理解这是 RSF 的架构设计。


   第一层:是业务系统中的服务,一个服务的状态可以是提供者(Provider)、也可以是消费者(Customer),或者两者共存。


总之在这一层,出现的不是服务接口,就是服务的接口的实现


第二层:是一个应用程序到框架的接入层。


分为提供者(Provider)、消费者(Customer)两个部分。


对于提供者(Provider)来说这一层就是框架的一个交互 API ,负责将服务接口信息提取出来让 RSF 框架可以识别到


而对于消费者(Customer)来说,这一层的目的就是将服务接口进行动态代理。


通过代理拦截所有远程方法调用,这一点类似于AOP。


第三层:这一层中所有来自动态代理的接口调用都会统一转换成 RsfRequest ,同时方法的返回值也会封装成为 RsfResponse。


可以说这一层是专门为扩展性设计准备的,开发者在这一层中可以围绕着 RsfFilter、RsfRequest、RsfResponse 接口进行扩展。


第四层:这是一个典型的职责链,职责链的开端是承接调用请求,末端承接着方法的调用。


在整个职责链中开发者几乎可以为所欲为。


你可以中断整个 RPC,自己 mock 数据。


也可以偷梁换柱调用其它服务然后返回结果。


第五层:这一层是也是消费者(Customer)专有的设计,这一层是一个比较重要的地方,它负责维护管理并且提供服务的IP地址。


举个例子:我们有 1 个服务,这个服务拥有 10 个服务提供者。


那么这 10 个服务提供者的服务地址和端口信息都是在这一层维护的。


当执行远程调用的时候,这一层会提供IP地址出来。


提供IP地址这个 *** 作,有必要稍微展开说一下。


向 QoS流控,跨机房调用、服务路由。


这些非常重要的功能都是由这一层来提供支持。


这一层用一句话来表示:它就是地址管理器


第六层:这一层用“调度器”来总结说明是最贴切的。


对于提供者(Provider)来说,在这一层基于队列提供了一个 Server 的保护屏障。


这个保护屏障可以保证当遇到 Client 疯狂的调用请求时,可以合理的进行回绝以保证 Server 自己不会被冲垮。


对于消费者(Customer)来说,在这一层提供了请求管理器,并且提供了一个最大请求并发的控制器。


这一层可以说是 RSF 的中枢神经,因为调度器就是 RSF 线程模型的最终实现。


有关线程模型在后面会有专门文章介绍一下(https://my.oschina.net/u/1166271/blog/779361)。


第七层:是提供序列化功能,开发者想自定义序列化规则。


也是由这一层提供的支持。


默认 RSF 采用 Hessian 4.0.7 作为默认序列化库。


同时框架内置了 Java、Json 两个策略可以选用。


如果你请求时候使用的 Hessian,数据响应想要用 JSON 。


也是可以被支持的。


第八层:这一层是最底层,负责网络数据的传输。


因此,在这一层 RSF 内置了一套比较完整的 RSF 数据传输协议。


文章在这里:https://my.oschina.net/u/1166271/blog/342091

第九层:就是计算机的 Socket 网络通信了。


如果你想,这一层可以是 TCP 也可以是 UDP。


不过 RSF 采用了 TCP 长链接。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/587053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存