Dubbo

作者: 渔夫与鱼与驴 | 来源:发表于2019-07-18 22:55 被阅读0次

RPC(Remote Procedure Call Protocol):远程过程调用


    RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

Dubbo


    Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。

    Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

Dubbo的超时机制


超时策略:

    1.客户端

    当消费端发起一次请求后,如果在规定时间内未得到服务端的响应则直接返回超时异常,但服务端的代码依然在执行。

    <dubbo:consumer timeout="1000"></dubbo:consumer>

    2.服务端

    当消费端发起一次请求后,一直等待服务端的响应,服务端在方法执行到指定时间后如果未执行完,此时返回一个超时异常给到消费端。

    <dubbo:provider retries="0" threads="500" dispatcher="message" threadpool="cached" filter="timeout" timeout="2000"/>

Dubbo的重试机制


dubbo的重试策略

    1.客户端

<dubbo:reference id="xxxx" interface="xx" check="true" async="false" retries="1" timeout="2000"/>

        <dubbo:method name="listOrderByQuery" retries="2"/>

可以对retries 可设置重试次数,默认为2次,

<dubbo:reference interface="" check="false" id="OrderService" registry="" group="${referenceGroup}" version="1.0.0">

    <dubbo:method name="listOrderByQuery" retries="2"/>

    <dubbo:method name="getRecord" retries="2"/>

    <dubbo:method name="getOrderById" retries="2"/>

</dubbo:reference>

也可以对某个方法单独去设置重试次数

重试次数需要谨慎考虑,可能会带来数据重复问题,比如说金融行业,对用户金额重复操作。

方案:

          1.对于核心的服务中心,去除dubbo超时重试机制,并重新评估设置超时时间。

                   (1)、去掉超时重试机制  

                     <dubbo:provider delay="-1" timeout="6000"  retries="0"/> 

                     (2)、重新评估设置超时时间

                      <dubbo:service interface="*.*" ref="*"  timeout="延长服务时间"/>

            2.业务处理代码必须放在服务端,客户端只做参数验证和服务调用,不涉及业务流程处理,对操作数据进行幂等处理,保证流程的唯一性。

相关文章

网友评论

      本文标题:Dubbo

      本文链接:https://www.haomeiwen.com/subject/xmtdlctx.html