DRPC实时请求应答服务

文章目录

  • 一、简介
  • 二、DRPC设计的目的
  • 三、流式处理
    • 3.1 异步模式
    • 3.2 同步模式(实时请求应答服务)
    • 3.3 关键点
  • 四、DRPC架构
  • 五、配置
  • 六、定义DRPC拓扑
    • 6.1 通过LinearDRPCTopologyBuilder创建
    • 6.2 通过TopologyBuilder创建

一、简介

DRPC是分布式远程过程调用(从客户端去查找服务器端的服务),是通过一个DRPC服务端来实现分布式RPC功能的。

DRPC Server负责接收RPC请求,并把请求发送到Storm中运行的Topology,等待接收Topology发送的处理结果,并把该结果返回给请求的客户端。

二、DRPC设计的目的

DRPC存在的意义,就是借助Storm的实时计算能力,实现高密度的实时计算,提高并行度,借此完成CPU密集型的计算任务。DRPC接收若干个数据流,经过Topology对数据进行处理,并将处理结果通过DRPC返回输出。

三、流式处理

流式处理有2种模式,分为异步模式和同步模式。

3.1 异步模式

客户端提交数据进行结算,并不会等待数据计算结果!
在这里插入图片描述
client传日志交给MQ(消息队列),以此传达处理,最终给了仓库,仓库给Client调用。MQ的典型代表:kafka。生产、消费数据,是一个消息队列,先进先出。kafka是最常用的数据推送工具。

异步模式的特点就是:一直往下走,从来不回头!

3.2 同步模式(实时请求应答服务)

客户端提交数据请求之后,立刻取得计算结果并返回给客户端!(关键DRPC
DRPC实时请求应答服务_第1张图片最后的结果,并没有给到仓库,而是返回了DRPC Server。DRPC是分布式的远程调用服务。Storm使用DRPC Server进行实时请求应答服务,这种方式,不是一个简单操作,往往伴随着大量的操作。

DRPC Server的好处是什么呢?DRPC Server其实适用于分布 式,可以应用分布式处理这个单个请求,来加速处理的过程。

3.3 关键点

Storm只能获取数据,不能接请求和发响应,所以这里借助一 个DRPC Server来帮助完成。

DRPC Server要做的事:

  • ① 接收一个RPC请求
  • ② 发送请求到 storm topology
  • ③ 从storm topology接收结果
  • ④ 把结果 发回给等待的客户端

四、DRPC架构

DRPC实时请求应答服务_第2张图片
DRPC本身不能算是Storm本身的一个特性,它是通过组合Storm的Stream、 Spout、Bolt、 Topology而成的一种模式( pattern)。因为它能利用Storm的实时计算能力,提高并行度完成CPU密集型计算任务,好处多多,所以就把它和Storm捆绑在了一辆战车上!

客户端给DRPC Server发送要执行的方法的名字,以及这个方法的参数,实现了这个函数的Topology使用 DRPC Spout 从DRPC服务器接收函数调用流。每个函数调用被DRPC服务器标记了一个唯一的id,即request-id。 然后这个Topology计算结果,在Topology的最后一个叫做 ResultBolt会连接到DRPC服务器,并且把这个调用的结果发送给DRPC服务器(通过那个唯一的id标识)。DRPC服务器用那个唯一id来跟等待的客户端匹配上,唤醒这个客户端并且把结果发送给它。

五、配置

1.启动Storm集群
2.修改配置文件storm.yaml,配置drpc.servers:

drpc.servers:
     - "node2"

3.将修改好的配置文件分发给其他节点,并启动drpc:

storm drpc>> ./logs/drpc.out 2>&1 &

4.使用java api提交:

public static void main(String[] args) {
		

		DRPCClient client = new DRPCClient("node2", 3772);
		
		try {
			String result = client.execute("exclamation", "11,22");
			
			System.out.println(result);
		} catch (TException e) {
			e.printStackTrace();
		} catch (DRPCExecutionException e) {
			e.printStackTrace();
		} 
	}
}

六、定义DRPC拓扑

6.1 通过LinearDRPCTopologyBuilder创建

通过LinearDRPCTopologyBuilder会自动设定Spout、把结果返回DRPC Server,我们只需要实现Topology即可。不过该方法已经过期了,很少在使用了。
DRPC实时请求应答服务_第3张图片
LinearDRPCTopologyBuilder是个过时的方法,参数是function,意为构建了线性drpc服务。一上来builder先addBolt,ExclaimBolt就是具体做计算的业务逻辑单元。execute负责执行,获取tuple并向后发送。说明它既不是起点,也不是终点,代表dprc架构中的Topylogy。而向后发射,有id和result,这个result就是架构中ResultBolt。ExclaimBolt封装到了BasicBoltExecutor,然后再addBolt,将包装后的bolt给到了_components。ExclaimBolt——>_components.(整体流程就是:先准备好一个计算单元ExclaimBolt,将其扔到一个容器中,备用。)

6.2 通过TopologyBuilder创建

直接通过普通拓扑构造方法TopologyBuilder创建DRPC拓扑,要手动设置开始的DRPCSpout和结束的ReturnResults。
DRPC实时请求应答服务_第4张图片

你可能感兴趣的:(Storm)