文档章节

Twitter Storm源代码分析之DRPC架构细节

超人学院
 超人学院
发布于 2014/11/25 17:04
字数 625
阅读 57
收藏 1

这篇文章我们来看一看整个Storm DRPC的架构,整个DRPC里面参与的各方如何交互消息而组成这样一个系统。

架构解析

有图有真相, 我们先看看DRPC的架构图:

从上面的图中看,整个DRPC分为了3个部分:

  • Client: 真正使用DRPC服务的代码

  • DRPCServer: 从Client角度来看的DRPC服务器,就是它把DRPC所有的实现细节从Client的眼中隐藏了。

  • Storm: 这里的Storm是指真正实现DRPC功能的storm的Spout, Bolt, 比如JoinResult, ReturnResults等等。

这里比较有意思的一点是对于DRPCServer来说,Client和Storm都是“客户端”,只是干的工作不同,我们下面通过来分析下整个请求提交,返回的流程来看看它们各自都干了啥:

  • 首先DRPCClient提交请求给DRPCServer

  • DRPCServer首先给这个请求产生一个request-id, 然后把它丢到一个 request-id -> request池子里面

    • DRPCServer在把request放入池子里面的时候,会同时生成一个Semaphore, 并且把这个Semaphore把放到一个 request-id -> semaphore池子里面去

    • 同时它调用semaphore.acquire()来等在这个semaphore上面等待结果的到来。

  • Storm组件从 request-id -> request池子中获取需要处理的请求

  • 通过DRPCSpout, PreapreRequest, JoinResult, ReturnResults一帮家伙去处理这个请求。

  • 把处理完的请求结果发回到DRPCServer的 request-id -> result池子里面去。

    • 同时会通过request-id request-id -> semaphore池子里面取出这个请求所对应的semaphore, 并且调用semaphore.release()来释放这个semaphore

  • semaphore被释放之后,DRPCServer上面阻塞的等待线程得以继续执行,去 request-id -> result池子里面把结果取出来,返回给等待的客户端。

异步DRPC

Storm现在还不支持异步的DRPC, 不过要在上面的模型的基础上去实现异步的DRPC应该是很简单的,我画了一下大致是这样的:

和上面的同步DRPC相比改动很小:

  • 请求提交之后,服务器不会等在Semaphore上, 而是立即返回给客户端一个Future对象。

    • 这个Future对象带了request-id的信息

  • 在Client端维护一个 request-id -> result的池子, 客户端将来调用future.get()的时候就是要到这个池子里面来找结果

  • 服务器端发现请求的结果来了之后把回客户端的结果池子里面去

© 著作权归作者所有

超人学院
粉丝 114
博文 335
码字总数 388917
作品 0
昌平
CTO(技术副总裁)
私信 提问
storm翻译(3)Distributed RPC(分布式远程调用)

原文地址:http://storm.apache.org/documentation/Distributed-RPC.html 分布式RPC的目的是在storm进行大量的实时计算时,能够并行的调用storm上的函数。Storm topology可以将函数参数作为输...

岩之有理
2015/02/25
357
0
storm client command

最近在研究实时日志分析,storm确实不错,以下是命令参数: storm help Syntax: storm jar topology-jar-path class 运行jar包中类的主函数和指定的参数 Commands: activate storm activate ...

China_OS
2014/02/22
1K
0
Storm同步调用之DRPC模型探讨

  摘要:Storm的编程模型是一个有向无环图,决定了storm的spout接收到外部系统的请求后,spout并不能得到bolt的处理结果并将结果返回给外部请求。所以也就决定了storm无法提供对外部系统的同...

刘洋intsmaze
2017/09/28
0
0
Apache Storm 0.10.0-beta 发布

Apache Storm 0.10.0-beta 发布,值得关注的更新如下: 安全,多租户部署: Kerberos Authentication with Automatic Credential Push and Renewal Pluggable Authorization and ACLs Multi-......

oschina
2015/06/16
1K
0
基于Storm流计算天猫双十一作战室项目实战(Storm Kafka HBase Highchats)

基于Storm流计算天猫双十一作战室项目实战(Storm Kafka HBase Highchats) 网盘地址:https://pan.baidu.com/s/1-59o76H32Jfp0Vp-o8zLYg 提取码: im8f 备用地址(腾讯微云):https://share...

小小搞笑弟
2018/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向海量数据的极致成本优化-云HBase的一体化冷热分离

前言 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多...

阿里云官方博客
29分钟前
3
0
最新最全国内外架构开源技术干货资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。 领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。 大家按照下...

泥瓦匠BYSocket
32分钟前
6
0
springmvc jsp访问不了css

在jsp中引入css,一直报404错误,直接访问css,也无法访问 将css文件移出WEB-INF,因为处于安全性考虑,这个目录禁止外部访问。 当引用css时,可以直接用绝对路径${pageContext.request.conte...

沉迷于编程的小菜菜
34分钟前
4
0
android 系统版本 9.1网络请求遇到坑

网络请求异常: E/http: CLEARTEXT communication to plat.xunlinkeji.cn not permitted by network security policy 在res下新建一个xml目录 创建名为network_security_config.xml 文件 ,该......

MrLins
51分钟前
5
0
Istio 1.3 发布,HTTP 遥测不再需要 Mixer

> 原文链接:Istio 1.3 发布,HTTP 遥测不再需要 Mixer Istio 是 Google、IBM 和 Lyft 联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题...

米开朗基杨
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部