为什么80%的码农都做不了架构师?>>>   

RSF是一个轻量化的分布式服务框架。支持点对点调用,也支持分布式调用。典型的应用场景是,将同一个服务部署在多个Server上提供 request、response 消息通知。它的设计思想是:通过Netty实现对自有协议数据交互的封装,支持高并发、高可靠的分布式RPC框架,设计原理参考了淘宝HSF。

RSF设计:http://my.oschina.net/u/1166271/blog/316686
    注册中心设计:http://my.oschina.net/u/1166271/blog/477190
    RSF源码地址:http://git.oschina.net/zycgit/rsf,本文中众多范本配置均来自与源码中的实际案例。

本文主要介绍,RSF注册中心在集群模式下维护的 ZooKeeper节点数据结构,相信有了这个数据结构就不需要太费口舌去介绍RSF注册中心集群模式下如何管理集群数据了。

一、RSF-Center维护的 ZooKeeper 目录结构

/rsf-center --------------------------- RSF-Center/servers -------------------------- 注册中心集群列表/192.168.1.11:2180 ------------ 服务器IP:消息通信端口/info ------------------------- 详细信息/auth ------------------------- 认证秘钥,用来防止集群之外的机器利用RSF传输协议伪造消息/version ---------------------- rsf-center版本/heartbeat -------------------- 服务器状态(用来表示服务器状态,在线还是离线等)/leader --------------------------- Leader是谁/services ------------------------- 服务信息/group ------------------------ 服务所属分组/name --------------------- 服务名称/version -------------- 服务版本/info ------------- 服务信息/provider --------- 提供者列表/192.168.1.11:2180/192.168.1.11:2180/192.168.1.11:2180/consumer --------- 消费者列表/192.168.1.11:2180/192.168.1.11:2180/192.168.1.11:2180/flowcontrol ------ 流控规则/rule ------------- 路由规则/args-level --- 参数级路由规则/method-level - 方法级路由规则/service-level  服务级路由规则/config --------------------------- 默认规则设置/flowcontrol ------------------ 默认流控规则/rule ------------------------- 默认路由规则/args-level --------------- 参数级路由规则/method-level ------------- 方法级路由规则/service-level ------------ 服务级路由规则

二、注册中心服务器数据

节点:/rsf-center/servers/192.168.1.11:2180/info
    该节点是用来保存,RSF-Center的信息,主要列出了注册中心服务器的工作模式以及必要的端口数据。

<info><workMode>master</workMode>                   <!-- 工作模式:Master、Slave、Alone --><inetAddress>192.168.1.11</inetAddress>            <!-- 注册中心地址,RSF客户端连接到这个地址 --><rsf.bindPort>2180</rsf.bindPort>             <!-- 注册中心端口,RSF客户端连接到这个端口 --><zooKeeper.sid>0</zooKeeper.sid>              <!-- 集群中sid --><zooKeeper.bindPort>2181</zooKeeper.bindPort>      <!-- 集群中用于zk信息传输的端口 --><zooKeeper.electionPort>2182</zooKeeper.electionPort>  <!-- 集群中用于zk选举的端口 -->
</info>

节点:/rsf-center/servers/192.168.1.11:2180/auth
    内容是一段随机字符串,RSF-Center在接收来自其它RSF-Center的数据包时会使用该字符串进行校验。

xsfasjnfasldjhasdfiffaj

节点:/rsf-center/servers/192.168.1.11:2180/version
    表示注册中心的程序版本

1.0.0

节点:/rsf-center/servers/192.168.1.11:2180/heartbeat
    表示最后一次该注册中心在线时的心跳时间

2016-02-02-22:22:22

节点:/rsf-center/leader
    表示当前Leader服务器是谁,作为leader,负责一些重要的写操作。

192.168.1.11:2180

三、注册中心服务信息数据

节点:/rsf-center/services/group/name/version/info
    假如有一个RSF服务,所属分组为:RSF,服务名称为:org.hasor.test.HelloWord,服务版本为:1.0.0。那么它的节点路径是:
    /rsf-center/services/RSF/org.hasor.test.HelloWord/1.0.0/info

<info><bindID>[RSF]-org.hasor.test.HelloWord-1.0</bindID>    <!-- BindID --><group>RSF</group>                 <!-- Group --><name>org.hasor.test.HelloWord</name>       <!-- Name --><version>1.0</version>               <!-- Version --><bindType>org.hasor.test.HelloWord</bindTypen>    <!-- Type --><serviceList>                  <!-- 接口信息 --><method>org.hasor.test.HelloWord.hello(String,Long)</method><method>org.hasor.test.HelloWord.hello(String,Long)</method><method>org.hasor.test.HelloWord.hello(String,Long)</method></serviceList>
</info>

节点:/rsf-center/services/group/name/version/provider/192.168.1.11:2180
    该节点是表示服务的提供者,假如有两个服务提供者,就会有两个这样的节点。不同的是,对应最后一个节点的地址会不一样。节点的数据内容格式如下:

<info><serializeType>java</serializeType>     <!-- 传输序列化协议 --><client.timeout>6000</client.timeout> <!-- rsf调用超时时间--><queue.maxSize>4096</queue.maxSize>      <!-- 最大服务处理队列长度 -->
</info>

节点:/rsf-center/services/group/name/version/consumer/192.168.1.11:2180
    该节点是表示服务的消费者,假如有多个服务提供者,就会有多个这样的节点。不同的是,对应最后一个节点的地址会不一样。节点的数据内容格式如下:

<info><serializeType>java</serializeType>         <!-- 传输序列化协议 --><client.timeout>6000</client.timeout>     <!-- rsf调用超时时间--><client.maximumRequest>200</client.maximumRequest>   <!-- 最大并发请求数 -->
</info>

节点:/rsf-center/services/group/name/version/flowcontrol
    该节点是用来保存服务自身的个性化流控规则配置信息,流控配置范本如下:

<controlSet><!-- 单元化规则 --><flowControl enable="true" type="unit"><threshold>0.3</threshold>         <!-- 本地机房占比低于这个数时启用跨机房 --><exclusions>172.23.*,172.19.*</exclusions>  <!-- 当本机IP属于下面这个网段时则不生效 --></flowControl><!-- 服务地址选取规则 --><flowControl enable="true" type="random"></flowControl><!-- QoS流量控制规则 --><flowControl enable="true" type="Speed"><action>service</action>           <!-- 速率控制方式:每服务、每方法、每地址 --><rate>5</rate>                  <!-- 稳态速率 --><peak>100</peak>             <!-- 峰值速率 --><timeWindow>10</timeWindow>          <!-- 时间窗口 --></flowControl>
</controlSet>

节点:/rsf-center/services/group/name/version/rule/service-level
    该节点是用来配置服务路由规则脚本,服务级,下面是脚本范本,脚本语言为:groovy

def List<String> evalAddress(String serviceID,List<String> allAddress)  {////[RSF]sorg.mytest.FooFacse-1.0.0 ---- Group=RSF, Name=sorg.mytest.FooFacse, Version=1.0.0if ( serviceID == "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0" ) {return ["192.168.137.10:8000","192.168.137.11:8000"]}return null
}

节点:/rsf-center/services/group/name/version/rule/method-level
    该节点是用来配置服务路由规则脚本,方法级,下面是脚本范本,脚本语言为:groovy

def Map<String,List<String>> evalAddress(String serviceID,List<String> allAddress)  {////[RSF]sorg.mytest.FooFacse-1.0.0 ---- Group=RSF, Name=sorg.mytest.FooFacse, Version=1.0.0if ( serviceID == "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0" ) {return ["sayEcho":["192.168.137.10:8000","192.168.137.11:8000"],"testUserTag":["192.168.2.3:8000","192.168.3.4:8000","192.168.4.5:8000"]]}return null
}

节点:/rsf-center/services/group/name/version/rule/args-level
    该节点是用来配置服务路由规则脚本,参数级,下面是脚本范本,脚本语言为:groovy

def Map<String,Map<String,List<String>>> evalAddress(String serviceID,List<String> allAddress)  {////[RSF]sorg.mytest.FooFacse-1.0.0 ---- Group=RSF, Name=sorg.mytest.FooFacse, Version=1.0.0if ( serviceID == "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0" ) {return ["sayEcho":["sayTo_etc1":["192.168.2.3:8000","192.168.3.4:8000","192.168.4.5:8000"],"sayTo_etc2":["192.168.137.10:8000","192.168.137.11:8000"]],"testUserTag":["server_3":["192.168.1.3:8000"],"server_4":["192.168.1.4:8000"]]]}return null
}

转载于:https://my.oschina.net/ta8210/blog/614039

RSF-Center,集群模式下-协调数据结构相关推荐

  1. strom-1.1.0模拟单词统计功能,Spout编写,Bolt编写,TopologyDriver编写,本地模式运行,集群模式运行,集群模式下看输出结果

    统计文本中的单词出现的频率,其中文本内容如下: 创建项目 项目结构如下: 创建pom.xml,代码如下: <?xml version="1.0" encoding=" ...

  2. 如何访问集群中指定的服务器,【Nacos源码之配置管理 六】集群模式下服务器之间是如何互相感知的...

    前言 我们用Nacos当配置中心的时候,上一篇文章中 [Nacos源码之配置管理 五]为什么把配置文件Dump到磁盘中 知道了,所有的配置文件都会Dump到服务器的本地磁盘中, 那么集群模式下: 服务 ...

  3. 关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案

    关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案 今天在做项目的时候,需要使用到mget命令,通过一个批量的key去获取对应的value集合,但是取值的时候,报了这个错 ...

  4. zookeeper专题:zookeeper集群模式下,leader选举流程分析

    文章目录 Zookeeper 集群模式一共有三种类型的角色 1. zookeeper启动时leader选举流程 1.1 加载配置文件,设置基本信息 1.2 指定快速选举算法,启动多级队列.线程 1.3 ...

  5. quartz集群模式下qrtz_triggers表trigger_state变ERROR分析

    最近在正式环境新增了一个定时任务,项目启动后,新增的任务总是跑一两次就不跑了,排查发现trigger_state变为ERROR了. 一.Quartz重要表含义 1)qrtz_calendars:以Bl ...

  6. redis分布式锁 在集群模式下如何实现_收藏慢慢看系列:简洁实用的Redis分布式锁用法...

    在微服务中很多情况下需要使用到分布式锁功能,而目前比较常见的方案是通过Redis来实现分布式锁,网上关于分布式锁的实现方式有很多,早期主要是基于Redisson等客户端,但在Spring Boot2. ...

  7. Hadoop框架:集群模式下分布式环境搭建

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境配置 1.三台服务 准备三台Centos7服务,基础环境从伪分布式环境克隆过来. 133 hop01,134 hop02,136 ...

  8. rocketMq双master集群模式下故障演练

    在上一篇,我们简单搭建了rocketMq双master的集群,沿用这个思路,这一篇我们用代码来模拟一下rocketMq集群故障情况下完成自动切换的效果. 1.启动两个节点的broker和nameser ...

  9. 集群模式下,redis锁的问题,红锁

    在使用redis来实现分布式锁的时候,如果redis是集群的,比如1主4从,这种主从模式就会存在延迟问题,导致加锁出现问题. 此时就应该使用红锁的方案,即在代码中不依赖于主从,将这5台机器视为平等的, ...

最新文章

  1. android 学习笔记之图形算法
  2. 【译】 Stealing the funds of all HTC EXODUS 1 users (HTC 区块链钱包安全漏洞分析)
  3. 开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具
  4. matlab画图显示中文
  5. ROS服务中自定义数据类型
  6. anjular.js读取数据库数据调用实例
  7. linux netlink 内核配置,如何在linux内核模块中加入netlink通信接口
  8. Could not find com.serenegiant:common:4.1.1
  9. 全网最详细的下载、安装和使用绘图神器draw.io(drawio),它比visio,processon,wps,亿图图示等更好用,最重要的是它免费
  10. Flutter Opacity 不透明度
  11. 维基百科--文件系统大全
  12. 初识Photoshop
  13. 视频教程-微信小程序从入门基础(第一季)-PHP
  14. synchronized锁升级之轻量级锁
  15. c语言中关键字中文的发音,c语言里面的32个关键字发音
  16. 史上最全《JMeter压力测试教程》——通俗易懂,3天即可学会
  17. 迈阿密牛津计算机专业,迈阿密大学牛津分校计算机科学
  18. 计算机编程课程顺序_您可以在2月开始免费在线编程和计算机科学课程
  19. TableView的使用方法
  20. 对iis写权限的利用

热门文章

  1. iOS 支持3DTouch快捷菜单
  2. seata的部署与微服务集成(包含多集群异地容灾配置)
  3. 天津大学计算机专硕_天津大学计算机复试攻略
  4. 发送短信(SMS)承载方式有哪些?
  5. 弘辽科技:淘宝四月份有满减活动吗?淘宝每个月都会有满减活动吗
  6. 单片机C语言GRB888和RGB565的互相转换
  7. 自学php多久可以工作_PHP语言自学要多久才能工作
  8. oracle dba 培训教程 第11章 索引的管理与维护
  9. nodejs爬虫网络图片
  10. html 拼图游戏,HTML5人物拼图游戏