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://www.cnblogs.com/wangzhengyu/p/8659882.html

RSF 分布式 RPC 服务框架的分层设计相关推荐

  1. voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...

    Voyage Overview 采用Java实现的基于netty轻量的高性能分布式RPC服务框架.实现了RPC的基本功能,开发者也可以自定义扩展,简单,易用,高效. Features 服务端支持注解配 ...

  2. RSF 分布式 RPC 服务信息的暴露

    为什么80%的码农都做不了架构师?>>>    在上一篇 Blog 文中,我们了解到 RSF 的整体设计一共是分了 9 个层次.这一篇 Blog 我们来专门介绍 RSF 是如何将服务 ...

  3. 【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合

    一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目 ...

  4. (一) Nepxion-Thunder分布式RPC集成框架 - 介绍

    Nepxion-Thunder(QQ 群 471164539)发布在https://github.com/Nepxion/ 1. 概要 1.1 Thunder是基于Netty + Hessian + ...

  5. NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...

    原文:NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成 本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博 ...

  6. 视频教程-RPC服务框架(Dubbo)源码分析-Java

    RPC服务框架(Dubbo)源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大 ...

  7. 巨人大哥聊聊电商微服务体系中分层设计和领域的划分

    -     前言    - 比起"高并发.多线程"."分布式CAP.一致性.Paxos"."高可用SLA"等具体的干货技术点,软件体系知识显 ...

  8. 唯品会RPC服务框架与容器化演进--转

    原文地址:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=405781868&idx=1&sn=cbb10d37e25 ...

  9. 首发:唯品会RPC服务框架与容器化演进

    编者按:本文是邱戈川在 3 月 27 日数人云"百万并发"活动的演讲,授权「高可用架构」首发.转载请注明来自高可用架构公众号「ArchNotes」. 邱戈川,唯品会分布式架构平台产 ...

最新文章

  1. 极客新闻——06、刘润:给年轻人的10条工作建议
  2. shiroConfig配置中要注意的事项
  3. 【随笔】工程师都是性情中人
  4. SSIS中的容器和数据流—举例说明数据转换任务
  5. 关闭笔记本显示器指定组合键才能打开_笔记本外接显示器怎么设置 笔记本外接显示器设置方法【详解】...
  6. 模糊神经网络_神经网络模型:当网络开始产生类似于人类思维的过程
  7. MariaDB 条件语句WHERE
  8. linux 多线程客户端服务端通信,[转载]多线程实现服务器和客户端、客户端和客户端通信;需要代码,留言...
  9. [翻译]基于ASP.NET的NumericTextBox控件[Carol]
  10. mfc大观之二(类识别)
  11. 《深入理解计算机系统》 CSAPP 入坑推荐
  12. JDK8帮助文档生成-笔记
  13. 大反转!马斯克哭求被裁员工回来
  14. 2018Android面试题总结 上(附答案)
  15. 关于《论文写作》课程的心得和体会
  16. Python警告控制模块:warnings
  17. 将MindManager添加到鼠标右键新建项
  18. jquery:关于$().css(left,)的设置;offset();offset().left();$.width();$.outerWidth();
  19. Mybatis Plus 代码生成器-让上班划水不再是梦
  20. Spring Boot的shiro整合(下)

热门文章

  1. 华为手机通过ADB永久关闭系统更新
  2. R语言——单位根检验/平稳性检验
  3. 推挽变压器与正激变压器的功率比较
  4. EveryDay-Shell之ifconfig输出详解“——netspeed.sh网速监控脚本
  5. 基于深度学习的新闻摘要生成算法实现与详解(Encoder-Decoder框架模型)
  6. Java并发指南6:Java内存模型JMM总结
  7. 双光子荧光成像_为什么双光子成像如此重要?
  8. Laravel版本更新异常4.2.8- 4.2.9 Declaration of ... CompilerEngine ... should be compa
  9. 在虚幻引擎5中构建你的首款游戏 - 10[完] - 特效音效镜头震动打包
  10. mw320r虚拟服务器,水星MW320R路由器桥接设置教程-水星路由器设置