1. DRPC 简介
分布式RPC( distributed RPC,DRPC)
Storm里面引入DRPC主要是利用 Storm的实时计算能力来并行化CPU密集型( CPU Intensive)的计算任务。
DRPC的 Storm Topology以函数的参数流作为输入,而把这些函数调用的返回值作为 Topology的输出流。
DRPC其实不能算是Storm本身的一个特性,它是通过组合Storm的Stream、 Spout、Bolt、 Topology而成的一种模式( pattern)。
本来应该把DRPC单独打成一个包的,但是DRPC实在是太有用了,所以我们把它和Storm捆绑在一起。
2. DRPC 编程思想
DRPC服务器协调
1) 接收一个RPC请求。2) 发送请求到Storm Topology
3) 从Storm Topology接收结果。
4) 把结果发回给等待的客户端。
从客户端的角度来看一个DRPC调用跟一个普通的RPC调用没有任何区别。
比如下面是客户端如何调用 RPC: reach方法的,方法的参数是: http://twitter.com
DRPCClient client = new DRPCClient("drpc-host", 3772); String result = client.execute("reach", "http://twitter.com");DRPC的工作流大致是这样的:
客户端给DRPC服务器发送要执行的方法的名字,以及这个方法的参数。实现了这个函数的Topology使用 DRPC Spout 从DRPC服务器接收函数调用流。
每个函数调用被DRPC服务器标记了一个唯一的id, 这个Topology然后计算结果,在Topology的最后一个叫做 ReturnResults 的Bolt会连接到DRPC服务器,并且把这个调用的结果发送给DRPC服务器(通过那个唯一的id标识)。
DRPC服务器用那个唯一id来跟等待的客户端匹配上,唤醒这个客户端并且把结果发送给它。
LinearDRPCTopologyBuilder
Storm自带了一个称作 LinearDRPCTopologyBuilder 的topology builder, 它把实现DRPC的几乎所有步骤都自动化了。
这些步骤包括:
1. 设置spout
2. 把结果返回给DRPC服务器
3. 给bolt提供有限聚合几组Tuples的能力