RSF 1.0.0 分布式服务框架正式发布

2016年10月27日

    一个高可用、高性能、轻量级的分布式服务框架。支持容灾、负载均衡、集群。一个典型的应用场景是,将同一个服务部署在多个Server上提供 request、response 消息通知。使用RSF可以点对点调用,也可以分布式调用。部署方式上:可以搭配注册中心,也可以独立使用。

    注册中心的使用支持嵌入到应用程序本身,也支持独立运行。1.0版本注册中心仅支持单机部署。

渊源

    核心思想参考了淘宝HSF、Dubbo等优秀框架。虽然参考了相关设计,但是实现逻辑完全不同,相比淘宝HSF少了历史包袱,相比Dubbo更加轻量化。而且还支持了虚拟机房,对于多机房部署的产品可以省下大量带宽成本,同时也降低了远程调用时间。真正的毫秒级调用业务处理。

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

简单容易(三个一)

  • 1 行代码发布服务。

  • 1 行代码订阅服务。

  • 1 行代码使用服务。

    配置文件上也是十分简单,编辑xml配置文件,两行配置(一行,配置端口、一行配置注册中心)

工作原理


架构

特性

01. 支持服务热插拔:支持服务动态发布、动态卸载
02. 支持服务分组:支持服务分组、分版本
03. 支持多种方式调用:同步、异步、回调、接口代理
04. 支持多种模式调用:RPC模式调用、Message模式调用
          RPC     模式: 远程调用会等待并返回执行结果。适用于一般方法。遇到耗时方法会有调用超时风险
          Message 模式: 远程调用当作消息投递到远程机器,不会产生等待,可以看作是一个简单的 MQ。适合于繁重的耗时方法
05. 支持点对点调用。RSF的远程调用可以点对点定向调用,也可以集群大规模部署集中提供同一个服务
06. 支持虚拟机房。通过配置虚拟机房策略可以降低跨机房远程调用
07. 支持泛化调用。简单的理解,泛化调用就是不依赖二方包,通过传入方法名,方法签名和参数值,就可以调用服务
08. 支持隐式传参。可以理解隐式传参的含义为,不需要在接口上明确声明参数。在发起调用的时传递到远端
09. 内置 Telnet 控制台,可以命令行方式直接管理机器
10. 支持 offline/online 动作
* 扩展性:
01. 支持第三方集成,可以独立使用,也可以和 Spring、Jfinal等第三方框架整合使用
02. 支持拦截器RsfFilter,开发者可以通过扩展 Filter 实现更多需求
03. 支持自定义序列化。默认使用内置 Hessian 4.0.7 序列化库
04. 支持Telnet控制台自定义指令。通过扩展控制台指令,可以发挥更大想象空间
* 稳定性(参数可配置):
01. 最大发并发请求数配置(默认:200)
02. 最大发起请求超限制策略设置: A-等待1秒重试、B-抛异常(默认:B-抛异常)
03. Netty线程数配置(默认: 监听请求线程数: 1,IO线程数: 8)
04. 提供者调用队列容量配置(默认: 队列容量: 4096)
05. Work线程数配置(默认: 处理调用线程数: 4)
06. 请求超时设置。支持服务提供者,服务订阅者独立配置各自的超时参数(默认 6000毫秒)
07. 双向通信。RSF会合理利用Socket连接,双向通信是指当A机器发起远程调用请求之后,RSF会建立长连接
          -- 如果B机器有调用A机器的需求则直接使用这个连接不会重新创建新的连接,双向通信会大量降低集群间的连接数
08. 支持优雅停机。应用停机,Center会自动通知整个集群。即便所有 Center 离线,RSF也会正确处理失效地址
* 健壮性:
01. 每小时地址本动态备份。当所有注册中心离线,即便在没有注册中心的情况下应用程序重启,也不会导致服务找不到提供者的情况
02. 当某个地址失效之后,RSF会冻结一段时间,在这段时间内不会有请求发往这个地址
03. 支持请求、响应分别使用不同序列化规则
* 可维护性:
01. 支持QoS流量控制。流控可以精确到:接口、方法、地址
02. 支持动态路由脚本。路由可以精确到:接口、方法、参数
03. 通过路由脚本可以轻松实现接口灰度发布
* 安全性:
01. 支持发布服务授权
02. 支持服务订阅授权
03. 支持匿名应用

Demo

<!-- 引入依赖 -->
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>rsf-core</artifactId>
    <version>1.0.0</version>
</dependency>

<!-- 配置文件 -->
<!-- server-config.xml and client-config.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://project.hasor.net/hasor/schema/main">
    <hasor.environmentVar>
        <RSF_CENTER_SERVERS>rsf://<CenterHostAddress>:2180</RSF_CENTER_SERVERS>
    </hasor.environmentVar>
</config>

// 服务接口
public interface EchoService {
    public String sayHello(String echo) throws InterruptedException;
}

// 服务接口实现
public class EchoServiceImpl implements EchoService {
    public String sayHello(String echo) throws InterruptedException {
        return "you say " + echo;
    }
}

// 服务提供者
Hasor.createAppContext("server-config.xml", new RsfModule() {
    public void loadModule(RsfApiBinder apiBinder) throws Throwable {
        EchoService echoService = new EchoServiceImpl();
        apiBinder.rsfService(EchoService.class).toInstance(echoService).register();
    }
});

// 服务消费者
AppContext clientContext = Hasor.createAppContext("client-config.xml", new RsfModule() {
    public void loadModule(RsfApiBinder apiBinder) throws Throwable {
        apiBinder.rsfService(EchoService.class).register();
    }
});
RsfClient client = clientContext.getInstance(RsfClient.class);
EchoService echoService = client.wrapper(EchoService.class);
String echoMessage = echoService.sayHello("Hello Word");
System.out.println(echoMessage);

相关链接

展开阅读全文
119 收藏
分享
加载中
最新评论 (23)

引用来自“坏老叟”的评论

参与了苏宁的RSF框架设计? 差不多哎

引用来自“哈库纳”的评论

应该是名字撞车了,我只参考了 HSF 的设计。另外看了看 dubbo 的功能设计。
Hasor-RSF 是在 2014年10月末开始编写的,拖拖拉拉写了2年。
HSF是不是没开源?
2016-11-11 17:12
0
回复
举报

引用来自“tdmlxq”的评论

有没有在实际项目中使用呢?
已经有两位同学计划用在实际项目中了。
2016-11-11 01:00
0
回复
举报
有没有在实际项目中使用呢?
2016-11-08 22:19
0
回复
举报

引用来自“kqdjacky”的评论

good,和zbus比较呢?
和 少帮主 的 zbus不太一样。 zbus 感觉上趋向于服务代理。
RSF 和 dubbo 是一个系列的,它自带线程模型,请求队列等。
如果定位没有偏差,zbus 可以用来代理 rsf 的服务。
2016-10-29 11:26
0
回复
举报
good,和zbus比较呢?
2016-10-29 10:16
0
回复
举报
https://my.oschina.net/u/1166271/blog/777571 《RSF 分布式 RPC 服务框架的分层设计》
2016-10-28 18:50
0
回复
举报
我顶,谢谢分享,一定要好好学习学习
2016-10-28 13:04
0
回复
举报
支持!!!!一定要看看源码学习学习!
2016-10-28 09:15
0
回复
举报

引用来自“mn_1127”的评论

spring cloud才是王道!
哈哈
2016-10-28 08:48
0
回复
举报
非常好
2016-10-28 07:20
0
回复
举报
更多评论
23 评论
119 收藏
分享
返回顶部
顶部