文章目录

  • 一、简介
  • 二、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 Server。DRPC是分布式的远程调用服务。Storm使用DRPC Server进行实时请求应答服务,这种方式,不是一个简单操作,往往伴随着大量的操作。

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

3.3 关键点

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

DRPC Server要做的事:

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

四、DRPC架构


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即可。不过该方法已经过期了,很少在使用了。

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实时请求应答服务相关推荐

  1. 使用JMS实现请求/应答程序

    2019独角兽企业重金招聘Python工程师标准>>> JMS是用来为发送者和接收者解耦的: 消息通过一个进程发送给代理,然后代理在另外一个进程异步的接收消息,一种可以利用JMS来实 ...

  2. vue 接口节流_vue输入节流,避免实时请求接口的实例代码

    在做搜索的时候,当搜索页面只有一个输入框.没有确定按钮的时候,只能在用户输入时请求服务端,查询数据.这样会导致频繁的发送请求,造成服务端压力. 解决这个问题,可以使用vue做输入节流. 1.创建一个工 ...

  3. 【转】WCF请求应答(Request-Reply)、单向操作(One-Way)、回调操作(Call Back)

    [1]请求应答(Request-Reply): 请求应答模式是默认的操作模式.这与经典的C/S编程类似,客户端发送请求,阻塞客户端进程,服务端返回操作结果.请求应答模式与绑定对应关系 : 绑定协议名称 ...

  4. zmq 可靠的请求-应答模式

    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_ht ...

  5. ZMQ 第四章 可靠的请求-应答模式

    感谢原创作者的分享! # ZMQ 第四章 可靠的请求-应答模式 第三章中我们使用实例介绍了高级请求-应答模式,本章我们会讲述请求-应答模式的可靠性问题,并使用ZMQ提供的套接字类型组建起可靠的请求-应 ...

  6. ZeroMQ 中文指南 第四章 可靠的请求-应答模式【转载】

    此文章转载自GitHub : https://github.com/anjuke/zguide-cn 作者信息如下. ZMQ 指南 作者: Pieter Hintjens ph@imatix.com, ...

  7. c语言无纸化软件系统资源不足,系统资源不足无法完成请求的服务怎么办_系统资源不足卸载迈克菲解决教程 - 系统家园...

    最近很多用户在问小编系统资源不足无法完成请求的服务怎么解决,小编电脑没有遇到这个问题,但是看到了贴吧很多小伙伴都有这个问题,发现有个共性就是装了迈克菲McAfee杀毒防护软件,下面快点来看看怎么解决问 ...

  8. ZeroMQ指南:第4章:可靠的请求-应答

    本文是阅读http://zguide2.zeromq.org/page:all#toc65的笔记. 第三章用实际的示例探讨了请求-回应模式的高级用法.本章将探讨可靠性的问题,在ZeroMQ的核心请求- ...

  9. 初探ZeroMQ(二) 请求-应答模式中套结字总结

    参考资料:ØMQ - The Guide(英文) 参考资料:ØMQ - The Guide(中文) 本文主要介绍和总结在请求-应答模式中各种套结字的行为. 套结字简介 来点通俗易懂的,先认识下请求-应 ...

最新文章

  1. python3基础知识梳理(一)
  2. 移动端与pc端的区别 及 ios的 兼容性问题
  3. m6000路由器产品介绍与基本操作_交换机与路由器的区别及光模块搭配方案_光模块吧...
  4. mac wordpress php7,Mac 下基于 wordpress 搭建个人博客系统
  5. 余承东:华为自研的麒麟A1芯片已经应用在了多款可穿戴产品中
  6. C++安全方向(三)3.3 openssl的MD5接口调用演示
  7. JQuery之拖拽插件
  8. 10月全球浏览器份额态势:Chrome领先Firefox7.34%
  9. python *args 和 **kwargs
  10. qt银行排队系统服务器代码,基于qt的银行排队系统
  11. 全球第一开源ERP Odoo操作手册 安装ssh服务和ssh客户端
  12. 测试用例设计方法——判定表法
  13. SlideLive:提供关系型PPT模板下载
  14. 微信开发者工具通过二维码编译步骤
  15. TNS-12555 TNS-12560错误
  16. CRC-16 CCITT
  17. PWM的周期和占空比是如何计算
  18. 【蓝桥杯】Python字符串处理和应用
  19. 【web前端】H5图片制作
  20. 最干净的U盘启动工具:微PE

热门文章

  1. 比较两个Word文档内容的差异
  2. Win7/10/11文件拖拽导致资源管理器闪退问题
  3. 商品图片列表html,用html制作一个商品图片列表
  4. 什么是Redis、Redis的作用以及应用场景
  5. 2014年高考计算机试题答案,2014高考计算机试卷.doc
  6. github copilot插件安装(vscode)
  7. 知识图谱与金融——基于知识图谱的风险监控与决策支持
  8. 基于SSM的java WEB音乐网站
  9. web系统大规模并发中的-秒杀与抢购
  10. 勒索病毒紧急防范步骤和注意事项