谈谈rpc中的异步调用设计

谈谈rpc中的异步调用设计

ID:22293710

大小:71.50 KB

页数:6页

时间:2018-10-28

谈谈rpc中的异步调用设计_第1页
谈谈rpc中的异步调用设计_第2页
谈谈rpc中的异步调用设计_第3页
谈谈rpc中的异步调用设计_第4页
谈谈rpc中的异步调用设计_第5页
资源描述:

《谈谈rpc中的异步调用设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、•谈谈RPC中的异步调用设计RPC(远过程调川M•:分布式系统巾足很常用的棊础通讯手段,核心思想足将不同进程之间的通讯抽象为函数调用,基木的过稈是调用端通过将参数序列化到流屮并发送给服务端,服务端从流中反序列化出参数外完成实际的处理,然后将结果序列化后返回给调川端。通常的RPC巾接口形式来定义,接U定义服务的名字,接口方法定义付个谘求的输入参数和返冋结果。RPC内部的序列化、网络通讯等实现细节则由桐架来完成,对用户来说是完全透明的。之前我使用.net开发过一套轻量级的分布式框架(PPT看这里,视频看这里),这套框架经过2年多的持

2、续开发和改进已经运川到数款产品中(包柄网络游戏和分布式应川),取得了不错的效果,等米米框架成熟后会考虑开源,木文讨论的RPC基于这套框架展开。通常我们的函数调用都是同步的,也就是调用力‘在发起请求后就能得到结果(成功返回结果失败则抛岀异常),中间不能去干其他事情,与这种校式对应的RPC称之为请求-响应式校式。请求-响应式的优点在于时序清晰,逻辑简萆,和竹通的函数调用完今等价。比如我们可以这样定义RPC接口:1[Protocol(ID=1)]2publicinterfacelCalculate3{4[Displd(l)]5intA

3、dd(intpi,intp2);6}客户端就可以像这样使用接口:Ivarcalculate=newICalculateProxy();//ICalculateProxy为框架生成的接口代理类2calculate.Connect(url);3varresult=calculate.Add(1,2);但是在分布式中这种模式的缺点也足非常的明显,第一个问题足网络通讯的延迟会严重的制约谘求-响应式RPC的响/、V:速度,使得谘求吞吐量无法满足性能耑要,大量的CPU时问会阻塞在等待请求的响应上;第二个问题是请求-响应式只有由客户端向服务端

4、发起请求,服务端不能主动向客户端发送事件通知,也就是缺乏一种callback机制。针对请求-响应式的缺点我们W以用双A通讯机制来改进,打先上掉请求的返M似,所冇的方法请求都定义为尤返叫结果,这样调用方在发出请求之后就nJ•以继续干后面的水情了,而不需要吋等待服务返回结果。同吋针对服务接口定义-个Callback接口用于服务端向客P端发送请求结果和事件通知,这样服务器就可以主动向荠广端发送消息/。这种RPC模乂可以称之为双向会话式,接口可以这样定义:1[Protocol(ID=1),Callback(typeof(ICalcula

5、teCallback))]2publicinterfaceICalculate3{4[Displd(l)]5voidAdd(intpi,intp2);6}78publicinterfaceTCalculateCal1back:TServiceCal1back9{10[Dispid(l)]llvoidOnAdd(intresult);12}服务端可以这样实现服务接口:lpublicclassCaculateService:ICaculatelmpl//这里ICaculatelmpl为框恕生成的服务实现接U2{3ICaculateI

6、mpl.Add(Sessionsession,intpi,intp2)4{5varresult=pi+p2;6session.Cllback.OnAdd(result);7}8}双14会话式解决了请求的奸步处理以及服务器的双14通讯问题,但是也给调用齐带來了一鸭不便,例如上例屮如果调用方发起多个Add请求,在收到OnAdd消息G如何将结果与请求关联起來呢?一种解决方案是在Add请求中多加一个requestid参数,服务器在处理完Add之后将requestid放到OnAdd方法屮和结果一起传给客户端,客户端根裾requestid来

7、关联请求4结果。这种手丁.处理的方式代码5起来很麻烦,那么有没介一•种更好的RPC模式来解决这个问题呢?这就是下面给大家介绍的支持界步调用的RPC设计。异步调川的主耍没计思想足在双昀会话式的棊础上让调用方通过一个冋调函数米获得淸求的结果,而不Pi通过Callback接口来获得结果。采用I叫调函数的好处在r我们以使用闭包来隐式的关联淸求和响应之间的上卜‘文,这样就不需耍显式的传递requestid米手工关联上下文了。并且服务器仍然可以通过Callback接口14客户端主动发送消息,保留了原來双14通讯的优点。W是需要注意的是由于请

8、求在服务器上可能是异步执行的,所以服务器不保证请求的响应是按顺序返回的,这讨能造成母隐含的乱序问题,需要客广端在调用时特别注意。如果响应需要严格的按照请求顺序返回客广端,那么服务端需耍冋步处理请求,或者引入队列机制对异步的响应进行排队冇序返回响应。之前的ICal

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。