温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

DRPC架构怎么掌握

发布时间:2021-12-22 17:17:50 来源:亿速云 阅读:212 作者:iii 栏目:云计算

本篇内容介绍了“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架构怎么掌握

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

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

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

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

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

“DRPC架构怎么掌握”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI