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 长链接。
RSF 分布式 RPC 服务框架的分层设计的更多相关文章
- 基于netty轻量的高性能分布式RPC服务框架forest<下篇>
基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开 ...
- 基于netty轻量的高性能分布式RPC服务框架forest<上篇>
工作几年,用过不不少RPC框架,也算是读过一些RPC源码.之前也撸过几次RPC框架,但是不断的被自己否定,最近终于又撸了一个,希望能够不断迭代出自己喜欢的样子. 顺便也记录一下撸RPC的过程,一来作为 ...
- 基于开源Dubbo分布式RPC服务框架的部署整合
一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目 ...
- 【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合
一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目 ...
- RPC服务框架dubbo(一):简介和原理解析
前置概念 在学习dubbo前,需要先了解SOA和RPC这两个概念. SOA 1.英文名称(Service Oriented Ambiguity) 2.中文名称:面向服务架构 2.1 有一个专门提供服务 ...
- Thrift 个人实战--Thrift RPC服务框架日志的优化
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...
- RPC服务框架探索之Thrift
前言架构服务化后,需要实现一套方便调用各服务的框架,现在开源如日中天,优先会寻找开源实现,如果没有合适自家公司业务的,才会考虑从零开发,尤其是一切以KPI为准绳的公司,谁会跟钱过不去?N个月之前,公司 ...
- 唯品会RPC服务框架与容器化演进--转
原文地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405781868&idx=1&sn=cbb10d37e25 ...
- NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成
本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博文了,最近忙着两件事; 一:阅读刘墉先生的<说话的魅力>,以一种微妙的,你我大家都会经常遇见 ...
随机推荐
- Solving the Top ERP and CRM Metadata Challenges with erwin & Silwood
Registrationhttps://register.gotowebinar.com/register/3486582555108619010 Solving the Top ERP and CR ...
- Nginx 处理Http请求简单流程
L45 1:三次握手后 系统内核收到请求根据端口负载均衡的分配到某个worker 2:nginx 会分配一个512byte链接内存池 3:初始化nginx的http模块并等待用户请求,假设用户在cli ...
- [转载:Q1mi]Bootstrap和基于Bootstrap的登录验证示例
转载自:Q1mi Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包. 它支 ...
- [NOIp2016] 换教室
题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...
- day08读取文件
可参考;https://www.cnblogs.com/gengcx/p/6713646.html主要内容: 1.只读 2.只写 3.追加 4.r+读写 5.w+写读 6.a+写读 7.其他一.使用p ...
- maven 使用 log4j
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可 ...
- shapeit提取或去除指定SNP和样本(shapeit extract or exclude SNP, sample)
shapeit最大的功能是对双链DNA进行phase和基因型进行impute.除此之外,还能提取SNP和样本,同样的,也能去除SNP和样本.下面简单介绍这两个功能. 一.提取SNP 提取SNP用到“- ...
- building tool的简单了解
java常用的三种构建工具: Apache Maven ——主要用于构建Java项目的自动化工具. NetBeans IDE 支持 Maven 构建系统,可帮助您管理项目的依赖关系.构建.报告和文档. ...
- java调用matlab绘图
一 注意事项 1: MatLab的版本必须是2006b+(包括2006b或更高版本),因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder). 2: 运 ...
- jQuery使用(十二):工具方法之type()之类型判断
type()的使用 类型判断方法之is...() 实现原理可以参考我的另一篇js源码剖析博客: 类型和原生函数及类型转换(二:终结js类型判断) $.type( undefined ) === &qu ...